批处理脚本文件获取默认网关和ping IP地址

时间:2018-08-30 06:25:14

标签: batch-file command-line-interface command-prompt ip-address

我正在尝试获取默认网关,并自动ping以下IP地址192.168.1。(1-254),然后将活动或非活动IP地址保存到文本文件中。

通过此代码,它将扫描默认网关,并且用户必须手动插入IP地址。

示例:

enter image description here

我想做的是扫描默认网关并将其转换为变量,以便它可以+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

1 个答案:

答案 0 :(得分:1)

如何自动获取网关,然后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,并且字节32仅在主机的实际答复中存在。

提示!!根据您的网络质量和局域网上PC的距离,并且非常取决于路由器和交换机的繁忙程度,我建议改为增加到-w 1500。当前,如果设备处于活动状态,并且响应时间超过1000毫秒,则会将其发送到DOWN.txt文件。原因是ICMP是诊断协议,不会获得优先级。一台设备可能相距一跳,但是如果它正忙于处理优先级流量,它将丢弃您的ICMP数据包,或导致大量的答复延迟。