是否有基于命令行的方式将ping发送到子网中的每台计算机?喜欢
for(int i = 1; i < 254; i++) ping(192.168.1.i);
执行arp决议?
并非所有机器都nmap
可用,但它是任何网络发现的绝佳工具,当然比迭代独立ping
命令更好.
$ nmap -n -sP 10.0.0.0/24 Starting Nmap 4.20 ( http://insecure.org ) at 2009-02-02 07:41 CST Host 10.0.0.1 appears to be up. Host 10.0.0.10 appears to be up. Host 10.0.0.104 appears to be up. Host 10.0.0.124 appears to be up. Host 10.0.0.125 appears to be up. Host 10.0.0.129 appears to be up. Nmap finished: 256 IP addresses (6 hosts up) scanned in 2.365 seconds
我建议使用带有掩码选项的fping,因为你没有限制自己ping.
fping -g 192.168.1.0/24
响应将很容易在脚本中解析:
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/
广播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!) ...
(-b
在Linux上添加一个选项)
在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.*
我刚刚解决了这个问题,但答案并不能让我满意.所以我自己动手:
echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
优点1:您无需安装任何其他工具
优势2:速度很快.它以并行方式执行所有操作,每次ping 1(" -W 1
").所以它将在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
这是对上面的@ 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
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done
-t 1
在退出之前添加等待仅一秒钟.如果您只有少量设备连接到该子网,这可以大大提高速度.