发送ping到子网上的每个IP

有没有一种基于命令行的方式向每个子网中的计算机发送ping命令? 喜欢

for(int i = 1; i < 254; i++) ping(192.168.1.i); 

执行arpparsing?

我会build议在屏蔽选项中使用fping ,因为你不会限制自己在ping中。

 fping -g 192.168.1.0/24 

回复将很容易在脚本中parsing:

 192.168.1.1 is alive 192.168.1.2 is alive 192.168.1.3 is alive 192.168.1.5 is alive ... 192.168.1.4 is unreachable 192.168.1.6 is unreachable 192.168.1.7 is unreachable ... 

注意:使用参数-a将限制输出到可达IP地址,您可能想要使用它,否则fping也将打印不可达地址:

 fping -a -g 192.168.1.0/24 

从男人:

fping不同于ping ,因为您可以在命令行上指定任意数量的目标,或者指定包含要ping的目标列表的文件。 而不是发送到一个目标,直到超时或回复, fping将发出一个ping数据包,并以循环方式移动到下一个目标。

更多信息: http : //fping.org/

并不是所有的机器都有nmap可用,但是它对于任何networking发现来说都是一个很好的工具,而且肯定比通过独立的ping命令迭代更好。

 $ nmap -n -sP 10.0.0.0/24

启动Nmap 4.20(http://insecure.org)在2009-02-02 07:41 CST
主机10.0.0.1似乎已经启动。
主机10.0.0.10似乎已经启动。
主机10.0.0.104似乎已经启动了。
主机10.0.0.124似乎已经启动了。
主机10.0.0.125似乎已经启动。
主机10.0.0.129似乎已经启动了。
 Nmap完成:在2.365秒内扫描256个IP地址(6个主机)

广播ping:

 $ ping 192.168.1.255 PING 192.168.1.255 (192.168.1.255): 56 data bytes 64 bytes from 192.168.1.154: icmp_seq=0 ttl=64 time=0.104 ms 64 bytes from 192.168.1.51: icmp_seq=0 ttl=64 time=2.058 ms (DUP!) 64 bytes from 192.168.1.151: icmp_seq=0 ttl=64 time=2.135 ms (DUP!) ... 

(在Linux上添加一个-b选项)

在Bash shell中:

 #!/bin/sh COUNTER=1 while [ $COUNTER -lt 254 ] do ping 192.168.1.$COUNTER -c 1 COUNTER=$(( $COUNTER + 1 )) done 

命令行工具nmap也可以这样做:

 nmap -sP 192.168.1.* 

这是@ david-rodríguez-dribeas上面的答案的修改,它并行运行所有的ping(更快),只显示返回ping的IP地址的输出。

 export COUNTER=1 while [ $COUNTER -lt 255 ] do ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" & COUNTER=$(( $COUNTER + 1 )) done 

我刚刚回答了这个问题,但答案并不满足我。 所以我推出了自己的:

 echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:" 
  • 优点1:您不需要安装任何额外的工具
  • 优势2:速度很快。 它以1s(“- -W 1 ”)的每个ping命令执行并行操作。 所以它会在1s完成:)
  • 优点3:输出是这样的
 64 bytes from 192.168.0.16: icmp_seq=1 ttl=64 time=0.019 ms 64 bytes from 192.168.0.12: icmp_seq=1 ttl=64 time=1.78 ms 64 bytes from 192.168.0.21: icmp_seq=1 ttl=64 time=2.43 ms 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.97 ms 64 bytes from 192.168.0.11: icmp_seq=1 ttl=64 time=619 ms 

编辑:这里是一样的脚本,因为当你的xargs没有-P标志,就像在openwrt(我刚刚发现)

 for i in $(seq 255); do ping -W 1 -c 1 10.0.0.$i | grep 'from' & done 
 FOR /L %i in (1,1,254) DO PING 192.168.1.%i -n 1 -w 100 | for /f "tokens=3 delims=: " %j in ('find /i "TTL="') do echo %j>>IPsOnline.txt 

在Linux下,我认为ping -b 192.168.1.255将工作(192.168.1.255是192.168.1。*的广播地址),但是在Windows下不起作用的IIRC。

检查这个博客文章是否有你所需要的。

for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

添加-t 1在退出前仅等待一秒钟。 如果您只有less数设备连接到该子网,这会提高速度。

 #!/bin/sh COUNTER=$1 while [ $COUNTER -lt 254 ] do echo $COUNTER ping -c 1 192.168.1.$COUNTER | grep 'ms' COUNTER=$(( $COUNTER + 1 )) done #specify start number like this: ./ping.sh 1 #then run another few instances to cover more ground #aka one at 1, another at 100, another at 200 #this just finds addresses quicker. will only print ttl info when an address resolves 
 for i in $(seq 1 254); do ping -c1 192.168.11.$i; done