From 8a327f1b8a35aa736838cf5f7c9767f2ff22c657 Mon Sep 17 00:00:00 2001 From: BrettonYe Date: Thu, 11 Jul 2024 18:45:40 +0800 Subject: [PATCH] Remove ping testing --- app/Http/Controllers/Admin/NodeController.php | 22 - app/Utils/NetworkDetection.php | 87 +-- database/seeders/RBACSeeder.php | 1 - resources/views/admin/node/index.blade.php | 670 +++++++++--------- routes/admin.php | 1 - 5 files changed, 339 insertions(+), 442 deletions(-) diff --git a/app/Http/Controllers/Admin/NodeController.php b/app/Http/Controllers/Admin/NodeController.php index 31527138..b01da879 100644 --- a/app/Http/Controllers/Admin/NodeController.php +++ b/app/Http/Controllers/Admin/NodeController.php @@ -255,26 +255,4 @@ class NodeController extends Controller { // 节点流量监控 return view('admin.node.monitor', array_merge(['nodeName' => $node->name, 'nodeServer' => $node->server], $this->DataFlowChart($node->id, true))); } - - public function pingNode(Node $node): JsonResponse - { // Ping节点延迟 - if ($node->is_ddns) { - if ($result = (new NetworkDetection)->ping($node->server)) { - return Response::json(['status' => 'success', 'message' => $result]); - } - } else { - $msg = null; - foreach ($node->ips() as $ip) { - $ret = (new NetworkDetection)->ping($ip); - if ($ret !== false) { - $msg .= $ret.'
'; - } - } - if (isset($msg)) { - return Response::json(['status' => 'success', 'message' => $msg]); - } - } - - return Response::json(['status' => 'fail', 'message' => 'Ping访问失败']); - } } diff --git a/app/Utils/NetworkDetection.php b/app/Utils/NetworkDetection.php index 67c884a7..e43bbe6e 100644 --- a/app/Utils/NetworkDetection.php +++ b/app/Utils/NetworkDetection.php @@ -11,29 +11,6 @@ class NetworkDetection { private static PendingRequest $basicRequest; - public function ping(string $ip): ?string - { // 用外部API进行Ping检测. TODO: 无权威外部API,功能缺失 - $testers = ['oiowebPing', 'xiaoapiPing', 'yum6Ping']; - self::$basicRequest = Http::timeout(20)->withOptions(['http_errors' => false])->withUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'); - - foreach ($testers as $tester) { - try { - if (method_exists(self::class, $tester)) { - $result = $this->$tester($ip); - if ($result !== null) { - return $result; - } - } - } catch (Exception $e) { - Log::error("[$tester] 网络延迟测试报错: ".$e->getMessage()); - - continue; - } - } - - return null; - } - public function networkStatus(string $ip, int $port): ?array { $status = $this->networkCheck($ip, $port); @@ -84,66 +61,10 @@ class NetworkDetection return null; } - private function oiowebPing(string $ip) - { - $msg = null; - foreach ([1, 6, 14] as $line) { - $response = self::$basicRequest->get("https://api.oioweb.cn/api/hostping.php?host=$ip&node=$line"); // https://api.iiwl.cc/api/ping.php?host= - - // 发送成功 - if ($response->ok()) { - $message = $response->json(); - if ($message && $message['code']) { - $msg .= "{$message['node']}:{$message['data']['Time']}
"; - } - } else { - return false; - } - } - - if ($msg) { - return $msg; - } - Log::warning('【PING】检测'.$ip.'时,api.oioweb.cn无结果'); - - // 发送错误 - return false; - } - - private function xiaoapiPing(string $ip) - { // 开发依据 https://xiaoapi.cn/?action=doc&id=3 - $response = self::$basicRequest->get("https://xiaoapi.cn/API/sping.php?url=$ip"); - - // 发送成功 - if ($response->ok()) { - return $response->body(); - } - Log::warning("【PING】检测{$ip}时,xiaoapi.cn无结果"); - - // 发送错误 - return false; - } - - private function yum6Ping(string $ip) - { // 来源 https://api.yum6.cn/ping.php?host=api.yum6.cn - $response = self::$basicRequest->get("https://api.yum6.cn/ping.php?host=$ip"); - - // 发送成功 - if ($response->ok()) { - $msg = $response->json(); - if ($msg && $msg['state'] === '1000') { - return "

{$msg['ip']}

线路【{$msg['node']}】
最小值:{$msg['ping_time_min']}
平均值:{$msg['ping_time_avg']}
最大值:{$msg['ping_time_max']}"; - } - } - Log::warning('【PING】检测'.$ip.'时,api.yum6.cn无结果'); - - return false; // 发送错误 - } - private function toolsdaquan(string $ip, int $port): ?array { // 开发依据: https://www.toolsdaquan.com/ipcheck/ - $response_inner = self::$basicRequest->withHeaders(['Referer' => 'https://www.toolsdaquan.com/ipcheck/'])->get("https://www.toolsdaquan.com/toolapi/public/ipchecking/$ip/$port"); - $response_outer = self::$basicRequest->withHeaders(['Referer' => 'https://www.toolsdaquan.com/ipcheck/'])->get("https://www.toolsdaquan.com/toolapi/public/ipchecking2/$ip/$port"); + $response_inner = self::$basicRequest->withHeader('Referer', 'https://www.toolsdaquan.com/ipcheck/')->get("https://www.toolsdaquan.com/toolapi/public/ipchecking/$ip/$port"); + $response_outer = self::$basicRequest->withHeader('Referer', 'https://www.toolsdaquan.com/ipcheck/')->get("https://www.toolsdaquan.com/toolapi/public/ipchecking2/$ip/$port"); if ($response_inner->ok() && $response_outer->ok()) { return $this->common_detection($response_inner->json(), $response_outer->json(), $ip); @@ -343,7 +264,7 @@ class NetworkDetection private function vps1352(string $ip, int $port): ?array { // 开发依据: https://www.51vps.info/ipcheck.html https://www.vps1352.com/ipcheck.html 有缺陷api,查不了海外做判断 备用 - $response = self::$basicRequest->asForm()->withHeaders(['Referer' => 'https://www.51vps.info'])->post('https://www.vps1352.com/check.php', ['ip' => $ip, 'port' => $port]); + $response = self::$basicRequest->asForm()->withHeader('Referer', 'https://www.51vps.info')->post('https://www.vps1352.com/check.php', ['ip' => $ip, 'port' => $port]); if ($response->ok()) { $data = $response->json(); @@ -367,7 +288,7 @@ class NetworkDetection private function rss(string $ip, int $port): ?array { // https://ip.rss.ink/index/check - $client = self::$basicRequest->withHeaders(['X-Token' => '5AXfB1xVfuq5hxv4']); + $client = self::$basicRequest->withHeader('X-Token', '5AXfB1xVfuq5hxv4'); foreach (['in', 'out'] as $type) { foreach (['icmp', 'tcp'] as $protocol) { diff --git a/database/seeders/RBACSeeder.php b/database/seeders/RBACSeeder.php index 7339315a..676b22f7 100644 --- a/database/seeders/RBACSeeder.php +++ b/database/seeders/RBACSeeder.php @@ -56,7 +56,6 @@ class RBACSeeder extends Seeder 'admin.node.geo' => '【线路系统】更新地理', 'admin.node.index' => '【线路系统】线路列表', 'admin.node.monitor' => '【线路系统】流量监控', - 'admin.node.ping' => '【线路系统】测速', 'admin.node.reload' => '【线路系统】重载', 'admin.order' => '【商品系统】订单列表', 'admin.payment.callback' => '【日志系统】回调列表', diff --git a/resources/views/admin/node/index.blade.php b/resources/views/admin/node/index.blade.php index 8bf90bb8..29ecfa2a 100644 --- a/resources/views/admin/node/index.blade.php +++ b/resources/views/admin/node/index.blade.php @@ -19,19 +19,19 @@ @canany(['admin.node.geo', 'admin.node.create'])
@can('admin.node.reload') - @if($nodeList->where('type',4)->count()) - @endif @endcan @can('admin.node.geo') - @endcan @can('admin.node.create') - + {{ trans('common.add') }} @endcan @@ -41,201 +41,200 @@
- - - - - - - - - - - - - - + + + + + + + + + + + + + + - @foreach($nodeList as $node) - - - - - - - - - - - - + + + + + + + + + + - + - - @if (count($node->childNodes)) - @foreach($node->childNodes as $childNode) - - - - - - - - - + - - @endforeach - @endif - @endforeach + @endif + + @endcan + + + @if (count($node->childNodes)) + @foreach ($node->childNodes as $childNode) + + + + + + + + + + + @endforeach + @endif + @endforeach
ID {{ trans('model.common.type') }} {{ trans('model.node.name') }} {{ trans('model.node.domain') }} IP {{ trans('model.node.static') }} {{ trans('model.node.online_user') }} {{ trans('model.node.data_consume') }} {{ trans('model.node.data_rate') }} {{ trans('model.common.extend') }} {{ trans('common.status.attribute') }} {{ trans('common.action') }}
ID {{ trans('model.common.type') }} {{ trans('model.node.name') }} {{ trans('model.node.domain') }} IP {{ trans('model.node.static') }} {{ trans('model.node.online_user') }} {{ trans('model.node.data_consume') }} {{ trans('model.node.data_rate') }} {{ trans('model.common.extend') }} {{ trans('common.status.attribute') }} {{ trans('common.action') }}
{{$node->id}} {{$node->type_label}} {{$node->name}} {{$node->server}} {{$node->is_ddns ? trans('model.node.ddns') : $node->ip}} {{$node->uptime ?: '-'}} {{$node->online_users ?: '-'}} {{$node->transfer}} {{$node->traffic_rate}} - @isset($node->profile['passwd']) - {{-- 单端口 --}} - - @endisset - @if($node->is_display === 0) - {{-- 节点完全不可见 --}} - - @elseif($node->is_display === 1) - {{-- 节点只在页面中显示 --}} - - @elseif($node->is_display === 2) - {{-- 节点只可被订阅到 --}} - - @endif - @if($node->ip) - - @endif - @if($node->ipv6) - - @endif - - @if($node->isOnline) - @if ($node->status) - {{$node->load}} - @else - + @foreach ($nodeList as $node) +
{{ $node->id }} {{ $node->type_label }} {{ $node->name }} {{ $node->server }} {{ $node->is_ddns ? trans('model.node.ddns') : $node->ip }} {{ $node->uptime ?: '-' }} {{ $node->online_users ?: '-' }} {{ $node->transfer }} {{ $node->traffic_rate }} + @isset($node->profile['passwd']) + {{-- 单端口 --}} + + @endisset + @if ($node->is_display === 0) + {{-- 节点完全不可见 --}} + + @elseif($node->is_display === 1) + {{-- 节点只在页面中显示 --}} + + @elseif($node->is_display === 2) + {{-- 节点只可被订阅到 --}} + @endif - @else - @if ($node->status) - - @else - + @if ($node->ip) + @endif - @endif - - @canany(['admin.node.edit', 'admin.node.clone', 'admin.node.destroy', 'admin.node.monitor', 'admin.node.geo', 'admin.node.ping', 'admin.node - .check', 'admin.node.reload']) - - + @if ($node->isOnline) + @if ($node->status) + {{ $node->load }} + @else + @endif - - @endcan -
- {{ trans('model.node.transfer') }} {{ $childNode->name }} {{ $childNode->server }} {{ $childNode->is_ddns ? trans('model.node.ddns') : $childNode->ip }} - @if($childNode->is_display === 0) - {{-- 节点完全不可见 --}} - - @elseif($childNode->is_display === 1) - {{-- 节点只在页面中显示 --}} - - @elseif($childNode->is_display === 2) - {{-- 节点只可被订阅到 --}} - - @endif - - @if (!$childNode->status || !$node->status) + @else + @if ($node->status) + + @else @endif - - @canany(['admin.node.edit', 'admin.node.clone', 'admin.node.destroy', 'admin.node.monitor', 'admin.node.geo', 'admin.node.ping', 'admin.node.check']) - - + @canany(['admin.node.edit', 'admin.node.clone', 'admin.node.destroy', 'admin.node.monitor', 'admin.node.geo', + 'admin.node.check', 'admin.node.reload']) + + - @endcan -
+ {{ trans('model.node.transfer') }} + {{ $childNode->name }} {{ $childNode->server }} {{ $childNode->is_ddns ? trans('model.node.ddns') : $childNode->ip }} + @if ($childNode->is_display === 0) + {{-- 节点完全不可见 --}} + + @elseif($childNode->is_display === 1) + {{-- 节点只在页面中显示 --}} + + @elseif($childNode->is_display === 2) + {{-- 节点只可被订阅到 --}} + + @endif + + @if (!$childNode->status || !$node->status) + + @endif + + @canany(['admin.node.edit', 'admin.node.clone', 'admin.node.destroy', 'admin.node.monitor', 'admin.node.geo', + 'admin.node.check']) + + + @endcan +
@@ -246,7 +245,7 @@
@@ -259,160 +258,161 @@ @endsection diff --git a/routes/admin.php b/routes/admin.php index cb48e9ef..bde7545c 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -75,7 +75,6 @@ Route::prefix('admin')->name('admin.')->group(function () { Route::get('clone/{node}', 'clone')->name('clone'); // 节点流量监控 Route::get('monitor/{node}', 'nodeMonitor')->name('monitor'); // 节点流量监控 Route::post('check/{node}', 'checkNode')->name('check'); // 节点阻断检测 - Route::post('ping/{node}', 'pingNode')->name('ping'); // 节点ping测速 Route::get('refreshGeo/{id}', 'refreshGeo')->name('geo'); // 更新节点 Route::post('reload/{id}', 'reload')->name('reload'); // 更新节点 Route::resource('auth', NodeAuthController::class)->except(['create', 'show', 'edit']); // 节点授权相关