批处理脚本文件获取默认网关和 ping ip 地址
Batch script file get default gateway and ping ip address
我正在尝试获取默认网关并自动 ping 以下 IP 地址 192.168.1.(1-254),然后将活动或非活动 IP 地址保存到文本文件中。
从这段代码开始,它将扫描默认网关,用户必须手动输入 IP 地址。
示例:
我想做的是扫描默认网关并将其转换为一个变量,这样它就可以 +1/扫描默认网关并自动启动循环 +1
是否可以在不输入 IP 地址的情况下获得类似的内容?
(在其他网络中测试时默认网关可能不同(例如 10.1.180.0),因此尽量不要将其设置为静态并启动循环)
Detected Default Gateway :192.168.1.0
trying to ping 192.168.1.1
trying to ping 192.168.1.2
trying to ping 192.168.1.3
SET /a defaultipgateway=%count%+1 <-will change the result into 0.1 and stop.
完整代码:
@echo off
for /f "tokens=2,3 delims={,}" %%a in ('"WMIC NICConfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do echo Default IP Gateway : %%~a
SET count=0
SET /p subnet=Please enter IP address range (for example, 192.168.0) :
:start
SET /a count=%count%+1
ECHO.Trying %subnet%.%count% & ECHO.
ping -n 1 -w 1000 %subnet%.%count% >nul
IF %errorlevel%==0 echo %subnet%.%count% ACTIVE >> ACTIVE.txt
IF %errorlevel%==1 echo %subnet%.%count% DOWN >> DOWN.txt
IF %count%==254 goto :eof
GOTO start
如何自动获取网关,然后 ping 范围 1 到 254?看到您同时拥有 IPv4
和 IPv6
网关,我们使用 wmic
:
执行此操作
@echo off
type nul >up.txt
type nul >down.txt
for /f "tokens=2,3 delims={,}" %%a in ('"wmic nicconfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do (
for /f "tokens=1-3 delims=^." %%i in ("%%~a") do (
for /l %%l in (1,1,254) do (
ping -4 -w 1000 -n 1 %%i.%%j.%%k.%%l | findstr "bytes=32"
if errorlevel 1 (echo %%i.%%j.%%k.%%l DOWN >> DOWN.txt) else (echo %%i.%%j.%%k.%%l ACTIVE >> ACTIVE.txt)
)
)
)
我在 ping 命令中使用 findstr
来搜索 bytes=32
,因为这是唯一真正表明它得到回复的指标。这样做的原因是,如果您收到 Destination host unreachable
它仍然会给出 0 的数据包丢失并且 bytes-32 仅存在于主机的实际回复中。
提示!!根据您的网络质量和您的 PC 在 Lan/Wan 上的距离,并且非常依赖于您的路由器和交换机的繁忙程度,我建议改为增加到 -w 1500
。目前,如果设备处于活动状态并且响应时间超过 1000 毫秒,它将被发送到 DOWN.txt 文件。原因是 ICMP
是一个诊断协议并且 而不是 获得优先权。设备可能在 1 跳之外,但如果它非常忙于处理优先级流量,它会丢弃您的 ICMP 数据包,或造成大量的回复延迟。
我正在尝试获取默认网关并自动 ping 以下 IP 地址 192.168.1.(1-254),然后将活动或非活动 IP 地址保存到文本文件中。
从这段代码开始,它将扫描默认网关,用户必须手动输入 IP 地址。
示例:
我想做的是扫描默认网关并将其转换为一个变量,这样它就可以 +1/扫描默认网关并自动启动循环 +1
是否可以在不输入 IP 地址的情况下获得类似的内容?
(在其他网络中测试时默认网关可能不同(例如 10.1.180.0),因此尽量不要将其设置为静态并启动循环)
Detected Default Gateway :192.168.1.0
trying to ping 192.168.1.1
trying to ping 192.168.1.2
trying to ping 192.168.1.3
SET /a defaultipgateway=%count%+1 <-will change the result into 0.1 and stop.
完整代码:
@echo off
for /f "tokens=2,3 delims={,}" %%a in ('"WMIC NICConfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do echo Default IP Gateway : %%~a
SET count=0
SET /p subnet=Please enter IP address range (for example, 192.168.0) :
:start
SET /a count=%count%+1
ECHO.Trying %subnet%.%count% & ECHO.
ping -n 1 -w 1000 %subnet%.%count% >nul
IF %errorlevel%==0 echo %subnet%.%count% ACTIVE >> ACTIVE.txt
IF %errorlevel%==1 echo %subnet%.%count% DOWN >> DOWN.txt
IF %count%==254 goto :eof
GOTO start
如何自动获取网关,然后 ping 范围 1 到 254?看到您同时拥有 IPv4
和 IPv6
网关,我们使用 wmic
:
@echo off
type nul >up.txt
type nul >down.txt
for /f "tokens=2,3 delims={,}" %%a in ('"wmic nicconfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do (
for /f "tokens=1-3 delims=^." %%i in ("%%~a") do (
for /l %%l in (1,1,254) do (
ping -4 -w 1000 -n 1 %%i.%%j.%%k.%%l | findstr "bytes=32"
if errorlevel 1 (echo %%i.%%j.%%k.%%l DOWN >> DOWN.txt) else (echo %%i.%%j.%%k.%%l ACTIVE >> ACTIVE.txt)
)
)
)
我在 ping 命令中使用 findstr
来搜索 bytes=32
,因为这是唯一真正表明它得到回复的指标。这样做的原因是,如果您收到 Destination host unreachable
它仍然会给出 0 的数据包丢失并且 bytes-32 仅存在于主机的实际回复中。
提示!!根据您的网络质量和您的 PC 在 Lan/Wan 上的距离,并且非常依赖于您的路由器和交换机的繁忙程度,我建议改为增加到 -w 1500
。目前,如果设备处于活动状态并且响应时间超过 1000 毫秒,它将被发送到 DOWN.txt 文件。原因是 ICMP
是一个诊断协议并且 而不是 获得优先权。设备可能在 1 跳之外,但如果它非常忙于处理优先级流量,它会丢弃您的 ICMP 数据包,或造成大量的回复延迟。