サブネット内の各コンピューターに ping を送信するコマンド ライン ベースの方法はありますか? お気に入り
for(int i = 1; i < 254; i++)
ping(192.168.1.i);
arp解決を強制するには?
サブネット内の各コンピューターに 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 台のホスト)
ping で自分自身を制限していないため、マスク オプションで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 パケットを送信し、ラウンドロビン方式で次のターゲットに移動します。
ブロードキャスト 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 シェルの場合:
#!/bin/sh
COUNTER=1
while [ $COUNTER -lt 254 ]
do
ping 192.168.1.$COUNTER -c 1
COUNTER=$(( $COUNTER + 1 ))
done
私はこの質問にたどり着きましたが、答えは私を満足させませんでした. だから私は自分自身を転がしました:
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
コマンド ライン ユーティリティ nmap もこれを行うことができます。
nmap -sP 192.168.1.*
これは、上記の @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 /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 では動作しません。
#!/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
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done