2009-02-02 3 views
37

Gibt es eine Befehlszeilenmethode, um Pings an jeden Computer in einem Subnetz zu senden? WieEinen Ping an jede IP in einem Subnetz senden

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

arp Auflösung zu erzwingen?

+1

'für i in $ (Seq 1 254); tue ping -c1 -t 1 192.168.11. $ i; done' - seine Native, ohne Drittanbieter-Tools. – YumYumYum

Antwort

26

Ich würde die Verwendung von vorschlagen mit der Maske Option fping, da Sie sich nicht in Ping beschränken werden.

fping -g 192.168.1.0/24 

Die Antwort wird einfach in einem Skript zu analysieren:

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

Hinweis: -a das Argument verwendet, wird der Ausgang erreichbar IP-Adressen beschränken, können Sie es sonst fping wird auch nutzen wollen Druck unerreichbare Adressen:

fping -a -g 192.168.1.0/24 

Von Mann:

fping unterscheidet sich von ping, dass Sie eine beliebige Anzahl von Zielen auf der Kommandozeile angeben können, oder eine Datei angeben, die Listen von Zielen enthält ping. Anstatt an ein Ziel zu senden, bis es Timeout oder Antworten, sendet fping senden Sie ein Ping-Paket und weiter zum nächsten Ziel in einer Round-Robin-Mode.

Weitere Informationen: http://fping.org/

+1

Auch fping ist viel leichter als nmap – urnenfeld

37

Broadcast-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!) 
... 

(eine -b Option auf Linux Add)

+1

Hinweis: Abhängig von der Version/Plattform –

+2

müssen Sie möglicherweise ein "-b" hinzufügen. Außerdem reagieren nicht alle Betriebssysteme auf einen Broadcast-Ping (standardmäßig). –

+2

In IPv6 verwenden Sie "ff02 :: 1". – Keltia

14

In Bash-Shell:

#!/bin/sh 

COUNTER=1 

while [ $COUNTER -lt 254 ] 
do 
    ping 192.168.1.$COUNTER -c 1 
    COUNTER=$(($COUNTER + 1)) 
done 
+2

möchten Sie vielleicht eine "-c 1" -Option zu dem Ping-Befehl dort hinzufügen ... –

2

unter Linux, denke ich ping -b 192.168.1.255 funktioniert (192.168.1.255 ist die Broadcast-Adresse für 192.168.1. *) aber IIRC, die nicht unter Windows funktioniert.

7

Das Kommandozeilenprogramm nmap kann dies auch tun:

nmap -sP 192.168.1.* 
96

Nicht alle Maschinen haben nmap zur Verfügung, aber es ist ein wunderbares Werkzeug für jeden Netzwerk-Discovery, und sicherlich besser als durch unabhängige ping Befehle laufen.

 
$ nmap -n -sP 10.0.0.0/24 

Starting Nmap 4.20 (http://insecure.org) at 2009-02-02 07:41 CST 
Host 10.0.0.1 appears to be up. 
Host 10.0.0.10 appears to be up. 
Host 10.0.0.104 appears to be up. 
Host 10.0.0.124 appears to be up. 
Host 10.0.0.125 appears to be up. 
Host 10.0.0.129 appears to be up. 
Nmap finished: 256 IP addresses (6 hosts up) scanned in 2.365 seconds 
+0

Beste Antwort auf dem neuesten Stand, weil es die erste ist kompatibel mit der Realität, dass nicht alle Subnetze die gleiche Größe haben, und die Verwendung der/Die 24-Notation kann auf Subnetze beliebiger Größe verallgemeinert werden. –

+0

Dies ist die bessere Antwort als die Ausnahme, da sie flexibler ist und sich an verschiedene Netzwerke anpasst. – charmoniumQ

+0

Das sollte wirklich die akzeptierte Antwort sein. Es ist sauberer und viel flexibler. – Routhinator

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 
3
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 
6

Dies ist eine Modifikation von @ david-rodríguez-dribeas beantworten oben, die parallel alle Pings läuft (viel schneller) und zeigt nur die Ausgabe für IP-Adressen, die die Ping-Rückkehr .

export COUNTER=1 
while [ $COUNTER -lt 255 ] 
do 
    ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" & 
    COUNTER=$(($COUNTER + 1)) 
done 
-2
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done 
5

Ich kam gerade um diese Frage, aber die Antworten befriedigte mich nicht. Also rollte ich meine eigene:

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:" 
  • Vorteil 1: Sie benötigen kein zusätzliches Werkzeug
  • Vorteil 2 zu installieren: Es ist schnell. Es macht alles parallel mit einem Zeitlimit für jeden Ping von 1s ("-W 1"). So wird es in 1s fertig :)
  • Vorteil 3: Die Ausgabe ist wie dieser
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 

Edit: Und hier ist das gleiche wie Skript, denn wenn Ihr xargs nicht über der -P-flag, wie es der Fall in openwrt ist (i gerade herausgefunden)

for i in $(seq 255); 
do 
ping -W 1 -c 1 10.0.0.$i | grep 'from' & 
done 
1

for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

Ein -t 1 hinzufügen wartet nur eine Sekunde vor dem Beenden. Dies verbessert die Geschwindigkeit sehr, wenn Sie nur ein paar Geräte mit diesem Subnetz verbunden haben.

+0

Ausgezeichnet. 1) Seine Native 2) Ich muss nicht alle diese Mist-Tools in Arduino installieren. – YumYumYum

0

Ich kam spät, aber hier ist ein kleines Skript, das ich für diesen Zweck gemacht habe, dass ich in Windows PowerShell laufen. Sie sollten in der Lage sein, es in die ISE zu kopieren und einzufügen. Dies führt dann den Befehl arp aus und speichert die Ergebnisse in einer TXT-Datei und öffnet sie im Editor.

# 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 
Verwandte Themen