发送ping到子网上的每个IP

Max*_*ied 46 shell networking ping arp

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

for(int i = 1; i < 254; i++)
    ping(192.168.1.i);
Run Code Online (Sandbox Code Playgroud)

执行arp决议?

Tom*_*Tom 103

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


Kyr*_*Kyr 43

我建议使用带有掩码选项的fping,因为你没有限制自己ping.

fping -g 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)

响应将很容易在脚本中解析:

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
...
Run Code Online (Sandbox Code Playgroud)

注意:使用该参数-a会将输出限制为可访问的IP地址,您可能希望使用它,否则fping也会打印无法访问的地址:

fping -a -g 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)

来自男人:

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

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


Rya*_*ary 40

广播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!)
...
Run Code Online (Sandbox Code Playgroud)

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

  • 此外,并非所有操作系统都会响应广播ping(默认情况下). (3认同)
  • 注意:根据版本/平台,您可能需要在其中添加“-b” (2认同)
  • 在IPv6中使用"ff02 :: 1". (2认同)

Dav*_*eas 17

在Bash shell中:

#!/bin/sh

COUNTER=1

while [ $COUNTER -lt 254 ]
do
   ping 192.168.1.$COUNTER -c 1
   COUNTER=$(( $COUNTER + 1 ))
done
Run Code Online (Sandbox Code Playgroud)

  • 这不应该是“$COUNTER -lt 255”来测试“192.168.1.254”吗? (2认同)

Chr*_*der 10

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

nmap -sP 192.168.1.*
Run Code Online (Sandbox Code Playgroud)


zab*_*ech 9

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

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
Run Code Online (Sandbox Code Playgroud)
  • 优点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
Run Code Online (Sandbox Code Playgroud)

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

for i in $(seq 255);
do
 ping -W 1 -c 1 10.0.0.$i | grep 'from' &
done
Run Code Online (Sandbox Code Playgroud)


Ada*_*own 6

这是对上面的@ 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
Run Code Online (Sandbox Code Playgroud)


小智 5

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
Run Code Online (Sandbox Code Playgroud)


小智 5

for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done
Run Code Online (Sandbox Code Playgroud)

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