サブネット内の各コンピューターにpingを送信するコマンドラインベースの方法はありますか?好む
for(int i = 1; i < 254; i++)
ping(192.168.1.i);
arp解決を強制するには?
Pingで自分自身を制限していないので、maskオプションでfpingを使用することをお勧めします。
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するターゲットのリストを含むファイルを指定します。タイムアウトするか応答するまで1つのターゲットに送信する代わりに、fpingはpingパケットを送信し、ラウンドロビンで次のターゲットに移動しますファッション。
すべてのマシンにnmap
が用意されているわけではありませんが、ネットワーク検出には素晴らしいツールであり、独立したping
コマンドを繰り返すよりも確かに優れています。
$ nmap -n -sP 10.0.0.0/24 開始Nmap 4.20(http://insecure.org)at 2009-02-02 07:41 CST Host 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終了:256個のIPアドレス(6ホストが稼働中)が2.365秒でスキャンされました
ブロードキャスト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].*?:"
-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
編集:そして、これはスクリプトと同じです。openwrtの場合のように、xargsに-Pフラグがない場合です(見つけたばかりです)
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
を追加すると、終了するまで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
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