Wie kann ich alle IPs im verbundenen Netzwerk auflisten, vorzugsweise über Terminal?

219

Unter Ubuntu 10.10 habe ich mich gefragt, ob es einen Befehlszeilenbefehl gibt, der alle IP-Adressen von Geräten auflistet, die mit dem Netzwerk verbunden sind.

Ich würde dies zum Beispiel verwenden, um alle Computer aufzulisten, die mit meinem Heimnetzwerk verbunden sind. Im Idealfall muss es sich um eine Befehlszeile handeln, da ich sie in C ++ ausführen werde.

Irgendwelche Ideen?

Christopher Gwilliams
quelle

Antworten:

243

Schauen Sie sich den Befehl arp-scan an - Sie müssen ihn wahrscheinlich installieren, zB:

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

Und um es näher zu erläutern:

sudo arp-scan --interface=eth0 --localnet

Wobei eth0 dein Gerät ist. Sie finden Ihr Gerät mit:

ifconfig
Linker3000
quelle
Perfekt, danke. Gibt genau das Format zurück, das ich benötige.
Christopher Gwilliams
1
Funktioniert auch perfekt unter OSX! Installiert mit Brew und Interface war en0, anstatt eth0, funktioniert aber großartig.
nthonygreen
6
Wenn Sie über WLAN mit Ihrem Netzwerk verbunden sind, verwenden Sie wlan0statt eth0.
Neil
3
Können Sie damit Hostnamen und IP-Adressen auflisten?
user1527227
2
Es ist erwähnenswert, dass dies nicht den ARP-Cache verwendet: Es wird ein tatsächlicher Scan durchgeführt. Im Gegensatz zu den meisten nmap-Scans können hier keine Layer-3-Grenzen überschritten werden. Dies ist normalerweise in diesem Szenario erwünscht. (Mit anderen Worten, es ist auf Ihr Subnetz beschränkt.)
Zenexer
112

Verwenden Sie nmap. Beispiel: nmap -sn 10.10.10.0/24Der Arp-Cache zeigt nur diejenigen an, mit denen Sie in letzter Zeit Kontakt aufgenommen haben.

Keith
quelle
2
ist 10.10.10.0 meine angegebene IP? Was ist in diesem Fall 24? Vielen Dank.
Kolonel
4
@kolonel Das ist nur ein Beispiel. Sie sollten es durch Ihr Netzwerk ersetzen. Die 24 ist die "Schrägstrichnotation" der Subnetzmaske. Dies bedeutet, dass 24 Bit von links verwendet werden. Es entspricht 255.255.255.0.
Keith
2
@Keith weißt du, wie ich meine zu verwendende Netzwerkadresse herausfinden würde? Oder ist es nur meine IP mit 0/24 am Ende?
TMH
20

In Windows wäre dies arp -ameiner Meinung nach " " ein Äquivalent zu dem in Linux " arp -e".

Diese Informationen finden Sie auf der Manpage für arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).
David
quelle
Das sieht so aus, als ob es funktioniert (ich muss möglicherweise ein Stück spielen, da ich in einem öffentlichen Netzwerk bin, sodass es nur alle Server im Netzwerk
aufzulisten
Wenn ich mich in einem Heimnetzwerk befinde, werden dann nur die an meinen Router angeschlossenen Geräte aufgelistet? Vielen Dank!
Christopher Gwilliams
1
Dieser Befehl listet nur die Geräte im aktuellen Arp-Cache des Hosts auf, und dies sind nur die Geräte, mit denen der Host kürzlich Kontakt aufgenommen hat.
Linker3000
Beide funktionieren unter Linux, zeigen jedoch arp -a(alle) Hosts im alternativen BSD-Stil an. Das Ausführen von Simpy arpfunktioniert genauso wie das Ausführen von arp -eBeacuse, das die Standardeinstellung ist.
SimpleGamer
15

Wenn es 192.168.0.0/24sich um ein Netzwerk handelt , erstellen Sie eine ausführbare Datei mit dem folgenden Code. Wechseln Sie 192.168.0zu Ihrem tatsächlichen Netzwerk.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done
Anders Larsson
quelle
Hallo Anders ... Das Netzwerk des Benutzers ist möglicherweise nicht 192.168.0.0/24; Ich habe eine Notiz gemacht. Die Formatierung der Site mochte kein nacktes # !, und so wurde die Formatierung des Code-Snippets überlastet: Verwenden Sie bei der Codeeingabe die Schaltflächen blockquote oder vorformatierten Text und überprüfen Sie Ihre Antwort auf korrekte Formatierung, bevor Sie sie absenden, wie Zeilenumbrüche, Tabulatoren, und Leerzeichen könnten entfernt worden sein.
Nevin Williams
Wenn Sie ein Skript bereitstellen, das in eine Datei eingefügt und ausführbar gemacht werden muss, anstatt es einfach auszuschneiden und einzufügen, ist es wahrscheinlich das Beste, dies anzugeben. Für einige ist es möglicherweise nicht offensichtlich, was für die Implementierung Ihrer Lösung erforderlich ist.
Nevin Williams
12
Technisch werden nur Hosts zurückgegeben, die auf Ping antworten. Möglicherweise sind Hosts verbunden, die jedoch nicht auf ICMP-Echoanforderungen antworten. Sie können auch ein Paket an ein gesamtes Netzwerk senden, indem Sie die Sendeadresse angeben, die die letzte Adresse im IP-Netzwerk ist: ping -c 1 -W 1 192.168.0.255 würde dasselbe wie die for-Schleife ausführen.
Nevin Williams
@ NevinWilliams (erforderlich -b, entfernt -W, ​​um mehr zu warten) ping -b -c 1 192.168.0.255Ergebnis "1 Pakete gesendet, 0 empfangen, 100% Paketverlust, Zeit 0ms"
Aquarius Power
13

Versuchen Sie zu installieren nmap( sudo apt-get install nmap) und geben Sie das nmap 192.168.1.0/24Ersetzen 192.168.1mit den ersten drei Teilen Ihrer IP-Adresse ein (finden Sie es heraus mit ip addr).

Sie können auch eine (meiner Erfahrung nach) etwas ungenauere Karte eines Netzwerks durch Ausführen ping 192.168.1.255(erneutes Ersetzen 192.168.1) abrufen. Dies sollteping für jeden Computer im Netzwerk ein Problem darstellen , funktioniert jedoch nach meiner Erfahrung nicht immer ordnungsgemäß.

Samadi
quelle
Tatsächlich funktioniert keine der Antworten immer richtig. IP wurde nicht unter Berücksichtigung dieser Anforderung entwickelt, und es gibt Dinge wie private VLANs, die es unmöglich machen, andere Hosts im selben LAN zu finden.
Ron Maupin
2

Ist auf einem Nexus mit tmuxas auf Folgendes gestoßen, der arp-scannicht im Repository enthalten ist, aber nmapvorinstalliert ist und nur die IP-Adressen anzeigt:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'
zentek
quelle
1

Für eine kompaktere Liste der angeschlossenen Geräte:

nmap -sL 192.168.0.* | grep \(1

Erläuterung.

nmap -sL 192.168.0.* listet alle IPs im Subnetz auf und markiert diejenigen, die den Namen haben:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

Da alle interessanten Datensätze mit Klammern (und Ziffern beginnen 1, filtern wir danach mit | grep \(1(Backslash wird benötigt, um Klammern zu umgehen).

Quirk
Beachten Sie, dass , wenn zwei Geräte den gleichen Namen haben, nmapzeigen nur das eine, das war mit Router verbunden letzten

Alexander Malakhov
quelle
Wenn Sie für zwei Fragen genau die gleiche Antwort haben, ist es möglicherweise sinnvoll, die Fragen als doppelt zu kennzeichnen, anstatt doppelte Antworten zu veröffentlichen. Auf diese Weise kann Wissen ausgetauscht werden, wenn ähnliche Fragen miteinander verknüpft werden.
Mokubai
1
@ Mokubai Du hast recht, ich habe dem OP einen Kommentar hinzugefügt. Dies zeigt ein interessantes Problem. Bei einer Schnellsuche wurden 6 Duplikate (dieses Q und 5 Links) auf 4 Netzwerkseiten (SU, Ask Ubuntu, SF, Unix) gefunden. Klar gibt es noch viel mehr! Wie gehe ich damit um? Im Idealfall sollte jeder dieser 6 Posts mit 5 anderen Posts verknüpft sein. Das Hinzufügen all dieser Links von Hand ist eindeutig nicht skalierbar. Also, im Moment habe ich auf diesen Beitrag verlinkt (am besten bewertet). Ein weiteres Problem ist, dass es unmöglich ist, Q auf AskUbuntu als Duplikat des Q auf SU zu markieren. Hm ... Wahrscheinlich wurde das schon auf der Meta besprochen?
Alexander Malakhov
funktioniert bei Centos 7 nicht, listet nur jede mögliche IP-Adresse im Netzwerk ohne Namen auf. arp-scan hat bei mir funktioniert.
Jeff
0

Ausarbeitung der Antwort von Anders Larrson -

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi
Mathieu CAROFF
quelle