标题: [网络连接] [求助]批处理ping 多个ip各4次 取平均值最快的前3个 依次写入到3个dns里 [打印本页]
作者: 22123 时间: 2022-11-8 01:29 标题: [求助]批处理ping 多个ip各4次 取平均值最快的前3个 依次写入到3个dns里
本帖最后由 22123 于 2022-11-11 07:00 编辑
ping 5个ip 223.5.5.5 / 114.114.114.114 / 180.76.76.76 / 119.29.29.29 / 8.8.8.8 各4次
取平均值最快的前3个 依次加入到3个DNS里
比如 ping 223.5.5.5 会显示下面的结果↓
-----------------------------------------------------
正在 Ping 223.5.5.5 具有 32 字节的数据:
来自 223.5.5.5 的回复: 字节=32 时间=9ms TTL=118
来自 223.5.5.5 的回复: 字节=32 时间=9ms TTL=118
来自 223.5.5.5 的回复: 字节=32 时间=8ms TTL=118
来自 223.5.5.5 的回复: 字节=32 时间=8ms TTL=118
223.5.5.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 8ms,最长 = 9ms,平均 = 8ms
-----------------------------------------------------
正在 Ping 114.114.114.114 具有 32 字节的数据:
来自 114.114.114.114 的回复: 字节=32 时间=14ms TTL=75
来自 114.114.114.114 的回复: 字节=32 时间=14ms TTL=87
来自 114.114.114.114 的回复: 字节=32 时间=13ms TTL=79
来自 114.114.114.114 的回复: 字节=32 时间=14ms TTL=95
114.114.114.114 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 13ms,最长 = 14ms,平均 = 13ms
------------------------------------------------------
正在 Ping 180.76.76.76 具有 32 字节的数据:
来自 180.76.76.76 的回复: 字节=32 时间=11ms TTL=51
来自 180.76.76.76 的回复: 字节=32 时间=10ms TTL=51
来自 180.76.76.76 的回复: 字节=32 时间=11ms TTL=51
来自 180.76.76.76 的回复: 字节=32 时间=11ms TTL=51
180.76.76.76 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 10ms,最长 = 11ms,平均 = 10ms
最快依次为
223.5.5.5(8ms)
180.76.76.76(10ms)
114.114.114.114(13ms)
然后写入dns
netsh int ip add dns "WLAN" 223.5.5.5 index=1
netsh int ip add dns "WLAN" 114.114.114.114 index=2
netsh int ip add dns "WLAN" 180.76.76.76 index=3
哪位大大能提供个批处理 谢谢!!!!!
作者: Echo11 时间: 2022-11-8 08:45
本帖最后由 Echo11 于 2022-11-8 09:01 编辑
稍微改了下,增加了对4次全部丢失的情况的处理。- @ECHO off
- ECHO.提示:netsh 需要管理员权限,请以管理员权限运行本脚本.
- setlocal EnableDelayedExpansion
- SET "IP1="
- SET "IP2="
- SET "IP3="
- ECHO.请稍等...&ECHO.
- CALL :PingDNS 223.5.5.5
- CALL :PingDNS 114.114.114.114
- CALL :PingDNS 180.76.76.76
- CALL :PingDNS 119.29.29.29
- CALL :PingDNS 8.8.8.8
- ECHO.执行以下命令:
- IF defined IP1 netsh int ip add dns "WLAN" %IP1% index=1
- IF defined IP2 netsh int ip add dns "WLAN" %IP2% index=2
- IF defined IP3 netsh int ip add dns "WLAN" %IP3% index=3
- pause
- GOTO:EOF
-
- :PingDNS <dnsIP>
- for /f "tokens=1-9 delims==m " %%a in ('ping -n 4 %~1 ^| find "平均"') do ECHO.%~1 的平均时间:%%fms&SET %~1_time=%%f
- REM 对于4次全部丢失的,不显示平均时间,故直接丢弃
- IF not %errorlevel%==0 ECHO.%~1 全部丢失!&GOTO:EOF
- CALL :CMP %~1
- GOTO:EOF
-
- :CMP <IP>
- IF not defined IP1 SET "IP1=%~1"&EXIT /B 1
- IF not defined IP2 SET "IP2=%~1"&EXIT /B 2
- IF not defined IP3 SET "IP3=%~1"&EXIT /B 3
- IF !%~1_time! LSS !%IP1%_time! SET "IP3=%IP2%"&SET "IP2=%IP1%"&SET "IP1=%~1"&EXIT /B 1
- IF !%~1_time! LSS !%IP2%_time! SET "IP3=%IP2%"&SET "IP2=%~1"&EXIT /B 2
- IF !%~1_time! LSS !%IP3%_time! SET "IP3=%~1"&EXIT /B 3
- EXIT /B 0
复制代码
作者: 22123 时间: 2022-11-8 15:39
稍微改了下,增加了对4次全部丢失的情况的处理。
Echo11 发表于 2022-11-8 08:45
谢谢大大 您的代码真的非常非常棒,实在太感谢您了!
目前我使用您的代码后 发现一个问题 除了第一个ip能ping通 正常显示平均时间外 , 剩余的几个ip 也能显示平均时间 但还会显示全部丢失, 导致最后只会添加一个dns到设备.
这应该是您加了 增加了对4次全部丢失的情况的处理, 实际测试 这几个ip 没有丢包出现.但还是会被判断为丢包 导致 全部丢失. 如何修正这个问题. 谢谢!!!
---------------------------------------------------------------
提示:netsh 需要管理员权限,请以管理员权限运行本脚本.
请稍等...
223.5.5.5 的平均时间:8ms
114.114.114.114 的平均时间:13ms
114.114.114.114 全部丢失!
180.76.76.76 的平均时间:10ms
180.76.76.76 全部丢失!
119.29.29.29 的平均时间:7ms
119.29.29.29 全部丢失!
8.8.8.8 的平均时间:33ms
8.8.8.8 全部丢失!
执行以下命令:
文件名、目录名或卷标语法不正确。
请按任意键继续. . .
----------------------------------------
作者: 22123 时间: 2022-11-8 21:01
回复 2# Echo11
大大您好 ,我把 您的第23行 IF not %errorlevel%==0 改成了 IF %errorlevel%==4
不会出现除了第一个检测的dns外 其余全部丢失!的问题了, 但这样 如果dns有丢包出现 也不会丢失了吗?
作者: 22123 时间: 2022-11-9 21:27
目前还发现一个问题 二楼大大的代码 如果打乱PingDNS池 会导致结果错误
如果我按照
CALL ingDNS 119.29.29.29
CALL :PingDNS 223.5.5.5
CALL :PingDNS 192.168.0.1
CALL :PingDNS 114.114.114.114
CALL :PingDNS 180.76.76.76
CALL :PingDNS 8.8.8.8
CALL :PingDNS 1.1.1.1
CALL :PingDNS 114.114.115.115
CALL :PingDNS 8.8.4.4
来设置 最后的结果就是错误的↓
119.29.29.29 的平均时间:11ms
223.5.5.5 的平均时间:5ms
192.168.0.1 的平均时间:0ms
114.114.114.114 的平均时间:14ms
180.76.76.76 的平均时间:12ms
8.8.8.8 的平均时间:73ms
1.1.1.1 的平均时间:138ms
114.114.115.115 的平均时间:12ms
8.8.4.4 的平均时间:35ms
执行以下命令:
IPv4 地址 . . . . . . . . . . . . : 192.168.0.91(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.0.1
DHCP 服务器 . . . . . . . . . . . : 192.168.0.1
DNS 服务器 . . . . . . . . . . . : 119.29.29.29
223.5.5.5
192.168.0.1
--------------------------------------------------------
如果我按照这个pingdns设置 结果也是错误的
114.114.114.114 的平均时间:15ms
192.168.0.1 的平均时间:0ms
180.76.76.76 的平均时间:12ms
8.8.8.8 的平均时间:72ms
223.5.5.5 的平均时间:5ms
1.1.1.1 的平均时间:138ms
114.114.115.115 的平均时间:12ms
8.8.4.4 的平均时间:33ms
119.29.29.29 的平均时间:10ms
执行以下命令:
IPv4 地址 . . . . . . . . . . . . : 192.168.0.91(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.0.1
DHCP 服务器 . . . . . . . . . . . : 192.168.0.1
DNS 服务器 . . . . . . . . . . . : 223.5.5.5
119.29.29.29
114.114.115.115
------------------------------------------------------------
这样设置倒是对的
192.168.0.1 的平均时间:0ms
114.114.114.114 的平均时间:14ms
180.76.76.76 的平均时间:12ms
8.8.8.8 的平均时间:72ms
223.5.5.5 的平均时间:5ms
1.1.1.1 的平均时间:141ms
114.114.115.115 的平均时间:12ms
8.8.4.4 的平均时间:35ms
119.29.29.29 的平均时间:10ms
执行以下命令:
IPv4 地址 . . . . . . . . . . . . : 192.168.0.91(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.0.1
DHCP 服务器 . . . . . . . . . . . : 192.168.0.1
DNS 服务器 . . . . . . . . . . . : 192.168.0.1
223.5.5.5
119.29.29.29
--------------------------------------------------------------
这个是否二楼大大ms排序算法有错误? 哪位大大知道 如何修正 万望解答下 小白在这里谢谢了!!!
作者: Echo11 时间: 2023-2-6 08:57
本帖最后由 Echo11 于 2023-2-6 09:29 编辑
回复 5# 22123
不好意思,好久没来论坛了,刚看见回复。 之前排序确实没仔细验证。
已验证排序问题
已验证全部丢失提示问题。- @ECHO off
- ECHO.提示:netsh 需要管理员权限,请以管理员权限运行本脚本.
- setlocal EnableDelayedExpansion
- SET "IP1="
- SET "IP2="
- SET "IP3="
- ECHO.请稍等...&ECHO.
- CALL :PingDNS 223.5.5.5
- CALL :PingDNS 180.76.76.76
- CALL :PingDNS 119.29.29.29
- CALL :PingDNS 114.114.114.114
- CALL :PingDNS 8.8.8.8
- ECHO.&ECHO.前3名 dns 为:
- ECHO. 1. %IP1% !%IP1%_time!ms
- ECHO. 2. %IP2% !%IP2%_time!ms
- ECHO. 3. %IP3% !%IP3%_time!ms
- ECHO.&ECHO.执行dns设置命令...
- IF defined IP1 netsh int ip add dns "WLAN" %IP1% index=1
- IF defined IP2 netsh int ip add dns "WLAN" %IP2% index=2
- IF defined IP3 netsh int ip add dns "WLAN" %IP3% index=3
- pause
- GOTO:EOF
-
- :PingDNS <dnsIP>
- for /f "tokens=1-9 delims==m " %%a in ('ping -n 4 %~1 ^| find "平均"') do ECHO.%~1 的平均时间:%%fms&SET %~1_time=%%f
- REM 对于4次全部丢失的,不显示平均时间,故直接丢弃。(通过 find 函数的返回值判断)
- IF not %errorlevel%==0 ECHO.%~1 全部丢失!&GOTO:EOF
- CALL :CMP %~1
- GOTO:EOF
-
- :CMP <IP>
- IF not defined IP1 SET "IP1=%~1"&GOTO:EOF
- IF not defined IP2 (
- IF !%~1_time! LSS !%IP1%_time! SET "IP2=%IP1%"&SET "IP1=%~1"&GOTO:EOF
- SET "IP2=%~1"&GOTO:EOF
- )
- IF not defined IP3 (
- IF !%~1_time! LSS !%IP1%_time! SET "IP3=%IP2%"&SET "IP2=%IP1%"&SET "IP1=%~1"&GOTO:EOF
- IF !%~1_time! LSS !%IP2%_time! SET "IP3=%IP2%"&SET "IP2=%~1"&GOTO:EOF
- SET "IP3=%~1"&GOTO:EOF
- )
- IF !%~1_time! LSS !%IP1%_time! SET "IP3=%IP2%"&SET "IP2=%IP1%"&SET "IP1=%~1"&GOTO:EOF
- IF !%~1_time! LSS !%IP2%_time! SET "IP3=%IP2%"&SET "IP2=%~1"&GOTO:EOF
- IF !%~1_time! LSS !%IP3%_time! SET "IP3=%~1"&GOTO:EOF
- GOTO:EOF
复制代码
作者: 22123 时间: 2024-11-13 16:32
本帖最后由 22123 于 2024-11-13 17:00 编辑
回复 6# Echo11
谢谢大大的帮忙 非常赞的改进,,排序问题完美解决,
不过还是有个问题想求助大大一下, 目前ping不通的ip 会进入排名最前的问题还是存在
举例,比如ip列表里有 114.114.114.114 这个ip,现在因为114这个ip禁用了ICMP协议,导致无法响应ping命令,最后竟然排到了第一,
是否可以在这个基础上,把 丢失率不等于0,也就是丢失率大于0的 ip地址 不计算在排名内,否则遇到ping不通 或丢包的 ip会 有概率变成前3,尤其是4次不通的ip
如果类似的ip有好几个,会导致前3被ping不通的ip占据,这个有办法在此批处理基础上加以屏蔽吗?
比如我ping的ip里有 114.114.114.114 和 101.6.6.6 ,最后这2个成了前2.....
223.5.5.5 的平均时间:8ms
223.6.6.6 的平均时间:7ms
101.226.4.6 的平均时间:14ms
218.30.118.6 的平均时间:29ms
180.76.76.76 的平均时间:15ms
210.2.4.8 的平均时间:32ms
8.8.8.8 的平均时间:33ms
119.29.29.29 的平均时间:36ms
182.254.116.116 的平均时间:31ms
208.67.222.222 的平均时间:202ms
208.67.220.220 的平均时间:132ms
9.9.9.9 的平均时间:158ms
114.114.115.115 的平均时间:15ms
前3名 dns 为:
1. 114.114.114.114 ms
2. 101.6.6.6 ms
3. 223.5.5.5 8ms
作者: 22123 时间: 2024-11-13 16:42
本帖最后由 22123 于 2024-11-13 17:20 编辑
想不到这个帖子2年后大大还能回复 期盼现在大大能再次看到 期待奇迹
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |