diff --git a/LICENSE.NetInfoChecker_HTML b/LICENSE.NetInfoChecker_HTML deleted file mode 100755 index 10d4ca8..0000000 --- a/LICENSE.NetInfoChecker_HTML +++ /dev/null @@ -1,3 +0,0 @@ -Copyright(C)2025 Yumeyo - -This copy has been allowed to distribute and modify for Ne0W0r1d diff --git a/LICENSE_QtWebEngine_Chromium b/LICENSE_QtWebEngine_Chromium new file mode 100644 index 0000000..2249a28 --- /dev/null +++ b/LICENSE_QtWebEngine_Chromium @@ -0,0 +1,27 @@ +// Copyright 2015 The Chromium Authors +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google LLC nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index 4874ab4..7447777 100755 --- a/README.md +++ b/README.md @@ -17,8 +17,7 @@ ## 中文翻译明明是密码?为什么用其作为名字呢?而为什么子项目 Rana Toolkit 要叫 Rana 呢? 名字取自于《崩坏:星穹铁道》的[赛飞儿](https://mzh.moegirl.org.cn/%E8%B5%9B%E9%A3%9E%E5%84%BF),啊没错就是那只猫娘,~~你也可以理解为是无畏契约的阴暗保安零~~
-而 Rana Toolkit 的 Rana 则取自于 《BanG Dream!It's MyGO!!!!!》的[要乐奈](https://mzh.moegirl.org.cn/%E8%A6%81%E4%B9%90%E5%A5%88)
-Rana Toolkit 项目[传送门请前往](#rana-toolkit-传送门)
+而 Rana Toolkit 的 Rana 则取自于 《BanG Dream!It's MyGO!!!!!》的要乐奈 ## 预览截图 @@ -32,9 +31,9 @@ Rana Toolkit 项目[传送门请前往](#rana-toolkit-传送门)
- [X] 日志实现(Rana-Re)
- [X] 多网卡信息输出实现(Rana-Re)
- [ ] 设置和多 API 可选实现(Rana-Re) -- [ ] 大陆和海外线同时信息获取(Alice/Saki-Beta)
-- [ ] 路由跳点检测、WOL功能实现(Alice/Saki-Beta)
-- [ ] NAT 检测、DNS 检测实现(Alice/Saki-Beta)
+- [ ] 大陆和海外线同时信息获取(Alice-Beta)
+- [ ] 路由跳点检测、WOL功能实现(Alice-Beta)
+- [ ] NAT 检测、DNS 检测实现(Alice-Beta)
- [ ] 设备信息实现(Stable)
- [ ] 全新UI(NXT-Stable)
- [ ] i18n 支持(NXT-Stable)
diff --git a/src/Home.cpp b/src/Home.cpp index 44ea992..81a1605 100755 --- a/src/Home.cpp +++ b/src/Home.cpp @@ -24,8 +24,10 @@ home::home(QWidget *parent) QString distro = QSysInfo::prettyProductName();// 获取发行版名称 QString systemver = QSysInfo::productVersion();// 获取系统版本 + sessionNet = new QNetworkAccessManager(this); // 大一统 QNAM + ui -> Version ->setText(AK_VERSION); // 主页应用版本 - ui -> test_waring -> setText("Alpha 版本 || 请勿用于生产环境 || 请及时汇报BUG || 请勿滥用接口"); // 主页测试版警告 + ui -> test_waring -> setText("测试版本 || 请勿用于生产环境 || 请及时汇报BUG || 请勿滥用接口"); // 主页测试版警告 home::HomeInfo_Refresh(); // 启动首次触发刷新(Trigger Auto Refresh) qInfo()<<"系统环境:"< localv4add -> setText("Loading......"); // 局域网V4: UI初始化 ui -> localv6add -> setText("Loading......"); // 局域网V6: UI初始化 ui -> priority -> setText("Loading......"); // 优先级: UI初始化 + ui -> asn -> setText("Loading......"); // 优先级: UI初始化 + this->getwanv6(); // 执行公网 V6 获取 getlan(); // 执行本地获取 @@ -89,24 +93,25 @@ void home::HomeInfo_Refresh(){ } -void home::getwanv4() // 公网 IPv4(Public IPv4) +// 公网 IPv4 +void home::getwanv4() { - static QNetworkAccessManager *v4manager = new QNetworkAccessManager(this); // 设置新的QNAM QNetworkRequest request(QUrl("https://4.ipw.cn")); // 设置Request API为ipw.cn(TODO LIST - 支持多API,并研究出口API) - QNetworkReply *v4reply = v4manager->get(request); // 设置Manager操作为request + QNetworkReply *v4reply = sessionNet->get(request); // 设置Manager操作为request connect(v4reply, &QNetworkReply::finished, this, [this, v4reply]() { // 连接V4 Reply if (v4reply->error() == QNetworkReply::NoError) { // 判定是否有错误 this->ipv4 = QString(v4reply->readAll()).trimmed(); // 设置IPV4变量为v4返回信息 ui -> v4add -> setText(ipv4); // 显示在UI中 - if (!ipv4.isEmpty()) - getisp(); + if (!ipv4.isEmpty()){ + getisp(); // 异步执行 ISP + getASN(); // 异步执行 ASN + } } else { QString ipv4_error = v4reply->errorString(); qCritical() << "请求失败:" << v4reply->errorString(); // 输出错误信息 ui -> v4add -> setText("请求失败🐱,请检查日志🐱"); // 输出错误UI } - v4reply->abort(); // 终止 v4reply 函数,优化内存泄露 v4reply->deleteLater(); // 从我的内存滚出去 }); @@ -117,9 +122,8 @@ void home::getwanv4() // 公网 IPv4(Public IPv4) void home::getwanv6() { - static QNetworkAccessManager *v6manager = new QNetworkAccessManager(this); QNetworkRequest request(QUrl("https://6.ipw.cn")); - QNetworkReply *v6reply = v6manager->get(request); + QNetworkReply *v6reply = sessionNet->get(request); connect(v6reply, &QNetworkReply::finished, this, [this, v6reply]() { if (v6reply->error() == QNetworkReply::NoError) { @@ -129,21 +133,21 @@ void home::getwanv6() qCritical() << "请求失败:" << v6reply->errorString(); ui -> v6add -> setText("查询失败🐱看看右边有没有输出喵,如果没有请检查日志喵"); } - v6reply->abort(); v6reply->deleteLater(); - }); } // 获得 ISP void home::getisp() { if (ipv4.isEmpty()) - return; - static QNetworkAccessManager *ispget = new QNetworkAccessManager(this); // QNAM 静态化,ispget + return; // 如果 IPv4 返回空值为真则返回去 + QNetworkRequest request(QUrl("https://cip.cc/"+ ipv4)); //请求 QUrl 地址 - QNetworkReply *ispreply = ispget->get(request); // 设置 reply + QNetworkReply *ispreply = sessionNet->get(request); // 设置 reply + connect(ispreply, &QNetworkReply::finished, this, [this, ispreply]() { // 连接 ispreply + if (ispreply->error() == QNetworkReply::NoError) { // 如果返回无失败 qDebug()<<" ISP 一切正常 "; @@ -170,15 +174,12 @@ void home::getisp() { ispreply->abort(); // 退出 ISP Reply ispreply->deleteLater(); // 从内存里面删除 ISP Reply }); - } // 执行优先级获取 - -void home::getpriority(){ // 连接优先级 - static QNetworkAccessManager *priorityget = new QNetworkAccessManager(this); +void home::getpriority(){ QNetworkRequest request(QUrl("https://test.ipw.cn")); - QNetworkReply *priorityreply = priorityget->get(request); + QNetworkReply *priorityreply = sessionNet->get(request); connect(priorityreply, &QNetworkReply::finished, this, [this, priorityreply](){ if(priorityreply->error() == QNetworkReply::NoError){ @@ -268,20 +269,48 @@ void home::getlan(){ } } -/* 菜单栏业务相关定义 */ -/* 工具实现 */ +// ASN +void home::getASN(){ + if (ipv4.isEmpty()) + return; -/* 多出口在线版 - 使用 Qt 桌面服务 -void home::Tools_MOWeb_Trigger(){ - qInfo()<<"muti_out_website_trigger"; + QNetworkRequest request(QUrl("https://ipinfo.io/" + ipv4 + "/json/")); + QNetworkReply *asnreply = sessionNet->get(request); - QUrl MowebUrl("https://raw.githack.com/yumeyo23/netinfochecker/main/checker-web.html"); - QDesktopServices::openUrl(MowebUrl); + connect(asnreply, &QNetworkReply::finished, this, [this, asnreply]() { - qDebug() << "桌面服务信号已发出,请检查浏览器 MutiOutWeb"; + if (asnreply->error() == QNetworkReply::NoError) { + + qDebug()<<" ASN 一切正常 "; + QByteArray data = asnreply->readAll(); //保存原始数据 + QJsonDocument doc = QJsonDocument::fromJson(data);// 读取原始 json 数据 + if (!doc.isNull() && doc.isObject()) { // doc 非空且 json 是对象的话 + QJsonObject obj = doc.object(); // QtJson 对象 = doc 的对象 + if (obj.contains("org") && obj["org"].isString()) { //如果包含 org + QString org = obj["org"].toString(); // 将对象的 org 字符串提出 + ui->asn->setText(org); // 输出前端 + } else { + qWarning() << "JSON 中无 org 字段! 响应内容:" << data; // 警告出错 + ui->asn->setText("查询不到喵🐱,请检查日志🐱"); // 前端报错 + } + } else { + qWarning() << "JSON 解析失败! 响应内容:" << data; // 警告出错 + ui->asn->setText("JSON 解析失败"); // 前端报错 + } + }else{ + qCritical() << "请求失败喵:" <errorString(); // reply 出错报错 + ui -> asn -> setText("请求失败喵,请检查日志🐱"); // 输出前端 + } + asnreply->abort(); // 退出 ISP Reply + asnreply->deleteLater(); // 从内存里面删除 ISP Reply + }); } -*/ + + +/* 菜单栏业务相关定义 */ + +/* 工具实现 */ /* 多出口在线版 - 使用 Qt Web Engine */ void home::Tools_MOWeb_Trigger(){ diff --git a/src/Home.h b/src/Home.h index b758bc4..2879065 100755 --- a/src/Home.h +++ b/src/Home.h @@ -25,6 +25,7 @@ #include // 网卡信息支持 #include // 动态数组支持 #include // 正则表达式支持 +#include // Json 解析支持 #pragma once @@ -46,6 +47,7 @@ class home : public QMainWindow void getisp(); // 获取ISP void getlan(); // 获取LAN相关 void getpriority();// 查询IP优先级 + void getASN(); // 自治系统 private slots: /* Help */ @@ -70,15 +72,14 @@ private slots: /* 主页 */ void HomeInfo_Refresh(); // 刷新按钮信号槽 - // void HomeInfo_Settings(); // 设置按钮信号槽 + // void HomeInfo_Settings(); // 设置按钮信号槽,由于设置没做完暂不启用 /* Tools */ void Tools_MOWeb_Trigger(); // 在线版多出口信号槽 - //void Tools_MOQt_Trigger(); /* 工具 */ void Tools_USTCspd_Trigger(); // 在线打开 USTC 测速 - void Tools_NJUspd_Trigger(); // 在线打开 USTC 测速 + void Tools_NJUspd_Trigger(); // 在线打开 NJU 测速 private: Ui::home *ui; QNetworkAccessManager *sessionNet; diff --git a/src/Home.ui b/src/Home.ui index c986516..eefdc8d 100755 --- a/src/Home.ui +++ b/src/Home.ui @@ -31,7 +31,7 @@ - 私隐模式 + 私隐模式 (&P) @@ -47,7 +47,7 @@ - 设定 + 设定 (&S) @@ -74,10 +74,10 @@ 20 20 351 - 87 + 91 - + @@ -125,10 +125,10 @@ 20 110 351 - 71 + 81 - + @@ -140,7 +140,7 @@ - ISP + ISP与自治系统 @@ -159,6 +159,13 @@ + + + + Loading...... + + + @@ -167,10 +174,10 @@ 390 20 351 - 81 + 91 - + @@ -215,10 +222,10 @@ 390 110 351 - 71 + 81 - + @@ -258,7 +265,7 @@ - 刷新 + 刷新 (&R) @@ -351,7 +358,7 @@ - 帮助中心 + 帮助中心 (&H) @@ -386,21 +393,21 @@ false - 工具 + 工具 (&T) false - 延迟检测 + 延迟检测 (&P) - 测速 + 测速 (&S) @@ -421,7 +428,7 @@ false - 局域网唤醒 + 局域网唤醒 (&W) @@ -429,7 +436,7 @@ false - 路由检测 + 路由检测 (&R) @@ -437,7 +444,7 @@ false - NAT 检测 + NAT 检测 (&N) @@ -508,7 +515,7 @@ - 多出口 + 多出口 (&M) @@ -516,7 +523,7 @@ false - 设备信息 + 设备信息 (&D) diff --git a/src/main.cpp b/src/main.cpp index 466dfbd..e123bd1 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,8 +14,8 @@ #include "version.h" // 统一输出版本号 // 版本号 -QString AK_VERSION = "CIPHER.rana.alpha_snapshot.20260106"; //主程序版本号 -QString BUILDDATE="20260106"; +QString AK_VERSION = "CIPHER.rana.alpha_snapshot.20260108"; //主程序版本号 +QString BUILDDATE="20260108"; QString AKT_VERSION = "RANATOOLKIT.astra.prototype"; //该程序版本号请根据 Ne0W0r1d/Rana_Toolkit 进行编写,目前 Prototype 是因为工具箱并没有实现