【问题标题】:Ping all addresses in network, windowsping 网络、windows 中的所有地址
【发布时间】:2020-03-26 15:55:01
【问题描述】:

是否可以在 windows cmd 行中检查所有网络地址(使用 ping 或类似方法)以查看哪些网络地址已被占用/是否有活动设备:

即。执行如下操作:

for i = 0 to 255
    ping 192.168.1.i //Print this
end

这显然是伪代码。我想知道是否可以在 windows cmd 中执行类似的操作。如果您不需要批处理文件,那就太好了,但我知道这是否不可能。

附言。另外请提及是否有程序可以执行此操作,但最好在 cmd 中执行此操作。

【问题讨论】:

  • 我一无所知,只是想知道...ping 192.168.1.255 会得到子网中所有设备的响应吗?

标签: windows batch-file cmd


【解决方案1】:

打开命令提示符并输入以下内容:

FOR /L %i IN (1,1,254) DO ping -n 1 192.168.10.%i | FIND /i "Reply">>c:\ipaddresses.txt

更改 192.168.10 以匹配您自己的网络。

通过使用 -n 1,您只要求向每台计算机发送 1 个数据包,而不是通常的 4 个数据包。

上述命令将 ping 192.168.10.0 网络上的所有 IP 地址,并在 C:\ 驱动器中创建一个名为 ipaddresses.txt 的文本文档。此文本文档应仅包含回复 ping 请求的 IP 地址。

虽然完成需要相当长的时间,但您也可以通过在 ping 命令中添加 -a 来将 IP 地址解析为主机名称。

FOR /L %i IN (1,1,254) DO ping -a -n 1 192.168.10.%i | FIND /i "Reply">>c:\ipaddresses.txt

这是来自Here

希望对你有帮助

【讨论】:

  • 我已编辑帖子以修复智能引号。现在应该可以工作了。 :-)
  • 请注意,根据您的 Windows 配置,c:\ipaddresses.txt 对于非管理员用户可能无法写入,请将路径更改为当前用户可写入的文件夹
  • 为了提高这个脚本的运行速度,添加-w参数设置一个比较低的超时时间来等待每个回复。在我快速的本地网络上,我将其设置为 10,它将运行脚本的时间缩短了不到一半。
  • 如果在批处理文件中使用它,应该使用%%i 而不是%i
  • 在德语 Windows 安装中,使用“Antwort”而不是“Reply”:FOR /L %i IN (1,1,254) DO ping -a -n 1 192.168.10.%i | FIND /i "Antwort">>d:\ipaddresses.txt
【解决方案2】:

我知道这是一个迟到的响应,但一个巧妙的方法是 ping 填充本地 arp 缓存的广播地址。

这可以通过运行 arp -a 来显示,这将列出你本地 arp 表中的所有地址。

ping 192.168.1.255
arp -a

希望这是人们可以使用的一个不错的简洁选项。

【讨论】:

  • 在我的设置中,ping 192.168.1.255; arp -a 单独没有显示动态 IP,但是:0..255 | ForEach-Object {ping 192.168.1.$_} 后跟 arp -a 确实(powershell)。
  • 请注意,并非所有设备都会在广播地址上回复 ping
  • 请注意,在具有 VLAN 的网络中,这将不起作用,因为您只能对本地子网中的设备进行 ARP。
  • 有时目标机器上的管理员/用户可能会配置为忽略 ping 请求,即不发送 ping 回复。那么你有什么建议来识别那些现有的设备,但没有使用ping 识别?
【解决方案3】:

就速度而言,最佳实用程序是 Nmap

写@cmd提示符:

Nmap -sn -oG ip.txt 192.168.1.1-255

这只会 ping 给定范围内的所有 IP 地址并将其存储在简单的文本文件中

使用 Nmap 扫描 255 个主机只需 2 秒。

【讨论】:

  • 在我的机器上花费的时间略长于 2 秒(可能是 10 秒?);但是,上面的批处理文件大约需要十分钟,而且我需要运行很多范围搜索,所以这对我来说是最好的路线。
【解决方案4】:

如果 windows 框在同一个子网中:

for /L %a in (1,1,254) do start ping 192.168.0.%a

这将在 15 秒内完成,并且

arp -a 

将返回任何活着的主机。

我所知道的 Windows 中最快的本地方式。

【讨论】:

  • 更快:for /L %a in (1,1,254) do @start /b ping 146.254.179.%a -w 100 -n 2 >nul。你应该arp -d 之前删除任何旧条目以获得活着的主机。
  • @Stephan 但这也会将输出顺序更改为不连续。
  • @NetMage 它不必是连续的 - 它只是为了填充 arp 数据库,它无论如何都会按顺序显示其条目。
  • @Stephan 我明白你的意思 - 这对我不起作用我在一个繁重的 VLAN 网络上 :)
【解决方案5】:

这篇文章提出了同样的问题,但对于 linux - 您可能会发现它很有帮助。 Send a ping to each IP on a subnet

nmap 可能是最好的工具,因为它可以帮助识别主机操作系统并且速度更快。在 nmap.org 网站上可用于 windows 平台

【讨论】:

  • 是的,我在 Linux 中做过很多次,但在 windows 中没有。
【解决方案6】:

egmackenzie 针对 Windows 的“arp -a”解决方案的扩展和有用的补充 -

在 WiFi 网络上搜索我的 iPhone 的 Windows 示例

(之前:iPhone WiFi 已禁用)

请看下面的例子:

如果有兴趣,这里有一篇关于“arp -d”使用的不错的文章 -

【讨论】:

    【解决方案7】:

    您要做的就是查看计算机是否已连接到网络并收集它们的 IP 地址。您可以使用angerousIP 扫描器:http://angryip.org/ 查看特定子网或子网组上正在使用的IP 地址。

    当我尝试查看正在使用的 IP 不在我的 DHCP 中时,我发现这个工具非常有用。

    【讨论】:

    • 您提供的链接是 404。angryip.org 工作正常,但不需要子路径
    【解决方案8】:

    Windows 8 上的批处理脚本似乎发生了一些变化,DGG 的上述解决方案现在导致命令提示符崩溃。

    以下解决方案对我有用:

    @echo off
    set /a n=0
    :repeat
    set /a n+=1
    echo 192.168.1.%n%
    ping -n 1 -w 500 192.168.1.%n% | FIND /i "Reply">>ipaddresses.txt
    if %n% lss 254 goto repeat
    type ipaddresses.txt
    

    【讨论】:

      【解决方案9】:

      aping 可以提供主机列表以及每个主机是否响应 ping。

       aping -show all 192.168.1.*
      

      【讨论】:

        【解决方案10】:
        @ECHO OFF
        
        IF "%SUBNET%"=="" SET SUBNET=10
        
        :ARGUMENTS
        ECHO SUBNET=%SUBNET%
        ECHO ARGUMENT %1 
        IF "%1"=="SUM" GOTO SUM
        IF "%1"=="SLOW" GOTO SLOW
        IF "%1"=="ARP" GOTO ARP
        IF "%1"=="FAST" GOTO FAST
        
        REM PRINT ARP TABLE BY DEFAULT
        :DEFAULT
        ARP -a
        GOTO END
        
        REM METHOD 1 ADDRESS AT A TIME
        :SLOW
        ECHO START SCAN
        ECHO %0 > ipaddresses.txt
        DATE /T >> ipaddresses.txt
        TIME /T >> ipaddresses.txt
        FOR /L %%i IN (1,1,254) DO ping -a -n 2 192.168.%SUBNET%.%%i | FIND /i "TTL="  >> ipaddresses.txt
        GOTO END
        
        REM METHOD 2 MULTITASKING ALL ADDRESS AT SAME TIME
        :FAST
        ECHO START FAST SCANNING 192.168.%SUBNET%.X
        set /a n=0
        :FASTLOOP
        set /a n+=1
        ECHO 192.168.%SUBNET%.%n%
        START CMD.exe /c call ipaddress.bat 192.168.%SUBNET%.%n% 
        IF %n% lss 254 GOTO FASTLOOP
        GOTO END
        
        :SUM
        ECHO START SUM
        ECHO %0 > ipaddresses.txt
        DATE /T >> ipaddresses.txt
        TIME /T >> ipaddresses.txt
        FOR /L %%i IN (1,1,254) DO TYPE ip192.168.%SUBNET%.%%i.txt | FIND /i "TTL=" >> ipaddresses.txt
        FOR /L %%i IN (1,1,254) DO DEL ip192.168.%SUBNET%.%%i.txt
        type ipaddresses.txt
        GOTO END
        
        :ARP
        ARP -a >> ipaddresses.txt
        type ipaddresses.txt
        GOTO END
        
        
        :END
        ECHO DONE WITH IP SCANNING
        ECHO OPTION "%0 SLOW" FOR SCANNING 1 AT A TIME
        ECHO OPTION "%0 SUM" FOR COMBINE ALL TO FILE
        ECHO OPTION "%0 ARP" FOR ADD ARP - IP LIST
        ECHO PARAMETER "SET SUBNET=X" FOR SUBNET
        ECHO.
        

        【讨论】:

        • 欢迎来到 SO!正如 Math 指出的那样,如果没有上下文,您的答案并不是非常有用。请编辑您的答案以添加其作用的描述。
        【解决方案11】:
        for /l %%a in (254, -1, 1) do ( 
            for /l %%b in (1, 1, 254) do (
                for %%c in (20, 168) do (
                    for %%e in (172, 192) do (
                        ping /n 1 %%e.%%c.%%b.%%a>>ping.txt
                    )
                )
            )
        )
        pause>nul
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-06
          • 1970-01-01
          • 2011-12-02
          • 2016-07-26
          相关资源
          最近更新 更多