我正在尝试获取默认网关,并自动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
答案 0 :(得分:1)
如何自动获取网关,然后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,并且字节32仅在主机的实际答复中存在。
提示!!根据您的网络质量和局域网上PC的距离,并且非常取决于路由器和交换机的繁忙程度,我建议改为增加到-w 1500
。当前,如果设备处于活动状态,并且响应时间超过1000毫秒,则会将其发送到DOWN.txt文件。原因是ICMP
是诊断协议,不不会获得优先级。一台设备可能相距一跳,但是如果它正忙于处理优先级流量,它将丢弃您的ICMP数据包,或导致大量的答复延迟。