当前位置:  开发笔记 > 编程语言 > 正文

发送ping到子网上的每个IP

如何解决《发送ping到子网上的每个IP》经验,为你挑选了8个好方法。

是否有基于命令行的方式将ping发送到子网中的每台计算机?喜欢

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

执行arp决议?



1> Tom..:

并非所有机器都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



2> Kyr..:

我建议使用带有掩码选项的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

来自男人:

fpingping的不同之处在于,您可以在命令行上指定任意数量的目标,或指定包含要ping的目标列表的文件.fping将发送ping数据包并以循环方式转移到下一个目标,而不是在超时或回复之前发送到一个目标.

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



3> Ryan McGeary..:

广播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上添加一个选项)


此外,并非所有操作系统都会响应广播ping(默认情况下).
在IPv6中使用"ff02 :: 1".

4> David Rodríg..:

在Bash shell中:

#!/bin/sh

COUNTER=1

while [ $COUNTER -lt 254 ]
do
   ping 192.168.1.$COUNTER -c 1
   COUNTER=$(( $COUNTER + 1 ))
done



5> Christian St..:

命令行实用程序nmap也可以这样做:

nmap -sP 192.168.1.*



6> zabeltech..:

我刚刚解决了这个问题,但答案并不能让我满意.所以我自己动手:

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



7> Adam Brown..:

这是对上面的@ 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



8> 小智..:
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

-t 1在退出之前添加等待仅一秒钟.如果您只有少量设备连接到该子网,这可以大大提高速度.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有