web-dev-qa-db-ja.com

サブネット上の各IPにpingを送信します

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

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

arp解決を強制するには?

46
Max Ried

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

男から:

fpingpingと異なり、任意の数のターゲットを指定できますコマンドライン、またはpingするターゲットのリストを含むファイルを指定します。タイムアウトするか応答するまで1つのターゲットに送信する代わりに、fpingはpingパケットを送信し、ラウンドロビンで次のターゲットに移動しますファッション。

詳細: http://fping.org/

43
Kyr

すべてのマシンに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秒でスキャンされました
102
Tom

ブロードキャスト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の場合)

40
Ryan McGeary

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.*
10

私はちょうどこの質問に答えましたが、答えは私を満足させませんでした。だから私は自分で転がしました:

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
9
zabeltech

これは、上記の@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
6
Adam Brown
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

-t 1を追加すると、終了するまで1秒だけ待機します。そのサブネットに接続されているデバイスが数台しかない場合、これにより速度が大幅に向上します。

6
JKalok
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
4
PCFixerGuy

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

3
Axelle Ziegler

遅くなりましたが、この目的のために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
1
cxp cxd
#!/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