批处理脚本文件获取默认网关和 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?看到您同时拥有 IPv4IPv6 网关,我们使用 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 数据包,或造成大量的回复延迟。