是否有基于命令行的方式向子网中的每台计算机发送 ping? 喜欢
for(int i = 1; i < 254; i++)
ping(192.168.1.i);
强制arp解析?
并非所有机器都有
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 个主机)
我建议使用 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
来自男人:
fping 与 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!)
...
(在 Linux 上添加
-b
选项)
我刚刚提出这个问题,但答案并不令我满意。 所以我自己推出了:
echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
-W 1
”)。所以它会在 1 秒内完成:)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
在 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.*
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done
添加
-t 1
只需等待一秒钟即可退出。如果您只有一些设备连接到该子网,这会大大提高速度。
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
这是对上面 @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
在linux下,我认为 ping -b 192.168.1.255 可以工作(192.168.1.255是192.168.1.*的广播地址),但是IIRC在windows下不起作用。
我来晚了,但这里有一个我为此目的制作的小脚本,我在 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
#!/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
此脚本在 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文件中查看所有连接的主机
要 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
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done