向子网上的每个 IP 发送 ping

问题描述 投票:0回答:15

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

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

强制arp解析?

networking shell ping arp
15个回答
128
投票

并非所有机器都有

nmap
可用,但它对于任何网络发现来说都是一个很棒的工具,并且肯定比通过独立的
ping
命令进行迭代更好。

$ nmap -n -sP 10.0.0.0/24

于 2009-02-02 07:41 CST 启动 Nmap 4.20 ( http://insecure.org )
主机 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 个主机)

79
投票

我建议使用 fping 和 mask 选项,因为你不会限制自己的 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 的不同之处在于您可以指定任意数量的目标 在命令行上,或指定包含目标列表的文件 平。而不是发送到一个目标直到超时或 回复,fping将发送一个 ping 数据包并继续下一个 以循环方式确定目标。

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


49
投票

广播 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
选项)


20
投票

我刚刚提出这个问题,但答案并不令我满意。 所以我自己推出了:

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
  • 优点1:无需安装任何额外工具
  • 优点二:速度快。它并行执行所有操作,并为每个 1 秒 ping 超时(“
    -W 1
    ”)。所以它会在 1 秒内完成:)
  • 优点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

18
投票

在 Bash shell 中:

#!/bin/sh

COUNTER=1

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

10
投票

命令行实用程序 nmap 也可以执行此操作:

nmap -sP 192.168.1.*

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

添加

-t 1
只需等待一秒钟即可退出。如果您只有一些设备连接到该子网,这会大大提高速度。


6
投票
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

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

3
投票

在linux下,我认为 ping -b 192.168.1.255 可以工作(192.168.1.255是192.168.1.*的广播地址),但是IIRC在windows下不起作用。


1
投票

我来晚了,但这里有一个我为此目的制作的小脚本,我在 Windows PowerShell 中运行。您应该能够将其复制并粘贴到 ISE 中。然后,这将运行 arp 命令并将结果保存到 .txt 文件中并在记事本中打开它。

# Declare Variables
$MyIpAddress
$MyIpAddressLast

# Declare Variable And Get User Inputs
$IpFirstThree=Read-Host 'What is the first three octects of you IP addresses please include the last period?'
$IpStart=Read-Host 'Which IP Address do you want to start with? Include NO periods.'
$IpEnd=Read-Host 'Which IP Address do you want to end with? Include NO periods.'
$SaveMyFilePath=Read-Host 'Enter the file path and name you want for the text file results.'
$PingTries=Read-Host 'Enter the number of times you want to try pinging each address.'

#Run from start ip and ping
#Run the arp -a and output the results to a text file
#Then launch notepad and open the results file
Foreach($MyIpAddressLast in $IpStart..$IpEnd)
{$MyIpAddress=$IpFirstThree+$MyIpAddressLast
    Test-Connection -computername $MyIpAddress -Count $PingTries}
arp -a | Out-File $SaveMyFilePath
notepad.exe $SaveMyFilePath

0
投票
#!/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

0
投票

此脚本在 OpenWRT

中运行良好

在一个新文件中放入此代码,

#!/bin/sh
echo "Online IPs" > out.txt
COUNTER=1

while [ $COUNTER -lt 255 ]
do
 ping $1.$COUNTER -c 1 -w 400 | grep "time" >> out.txt &
 COUNTER=$(( $COUNTER + 1 ))
done
killall ping

设置执行权限并启动

root@r1:/# nping 192.168.1

然后在out.txt文件中查看所有连接的主机


0
投票

要 ping 子网中的所有 IP,请在终端中使用此命令(预安装 nmap,如果需要,可使用brew install nmap):

sudo nmap -sn -PE 192.168.N.0/24

其中192.168.N.0/24, 必须设置 N - 其中您将数字放在 0 'n 255 之间, 如果您的子网中有 IP,例如 192.168.110.20 -> 使用此:

sudo nmap -sn -PE 192.168.110.0/24

-3
投票
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done
© www.soinside.com 2019 - 2024. All rights reserved.