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 @@