62

サブネット内の各コンピューターに ping を送信するコマンド ライン ベースの方法はありますか? お気に入り

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

arp解決を強制するには?

4

14 に答える 14

118

すべてのマシンが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 台のホスト)
于 2009-02-02T13:48:28.113 に答える
68

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 パケットを送信し、ラウンドロビン方式で次のターゲットに移動します。

詳細: http://fping.org/

于 2015-08-17T14:11:44.713 に答える
47

ブロードキャスト 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!)
...

( -bLinuxではオプションを追加)

于 2009-02-02T13:20:23.303 に答える
18

Bash シェルの場合:

#!/bin/sh

COUNTER=1

while [ $COUNTER -lt 254 ]
do
   ping 192.168.1.$COUNTER -c 1
   COUNTER=$(( $COUNTER + 1 ))
done
于 2009-02-02T13:21:19.760 に答える
15

私はこの質問にたどり着きましたが、答えは私を満足させませんでした. だから私は自分自身を転がしました:

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
  • 利点 1: 追加のツールをインストールする必要がない
  • メリット2:早い。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

編集: そして、これはスクリプトと同じです。openwrt の場合のように、xargs に -P フラグがない場合です (私はちょうど見つけました)。

for i in $(seq 255);
do
 ping -W 1 -c 1 10.0.0.$i | grep 'from' &
done
于 2016-02-23T14:11:50.137 に答える
10

コマンド ライン ユーティリティ nmap もこれを行うことができます。

nmap -sP 192.168.1.*
于 2009-02-02T13:48:19.113 に答える
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
于 2014-01-26T23:49:18.007 に答える
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
于 2014-01-23T21:47:48.260 に答える
3

Linux では ping -b 192.168.1.255 が動作すると思います (192.168.1.255 は 192.168.1.* のブロードキャスト アドレスです) が、IIRC は Windows では動作しません。

于 2009-02-02T13:25:06.290 に答える
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
于 2013-04-07T01:10:59.693 に答える
-3
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done
于 2015-10-21T12:53:41.040 に答える