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


Mit Ubuntu 10.10 habe ich mich gefragt, ob es einen Befehlszeilenbefehl gibt, der alle IPs von Geräten auflisten kann, die mit dem Netzwerk verbunden sind.

Ich würde dies zum Beispiel verwenden, um alle Computer aufzulisten, die mit meinem Heimnetzwerk verbunden sind. Idealerweise muss es eine Befehlszeile sein, da ich es von C ++ aus ausführen werde.

Irgendwelche Ideen?


195
2018-03-24 13:27


Ursprung


askubuntu.com/questions/82480/... || serverfault.com/questions/72380/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
Weitere Duplikate: 1.  Erhalten aller IPs von Geräten, die mit demselben Router verbunden sind. 2.  Zeigt die Liste der Computer in einem LAN unter Linux an - Alexander Malakhov
3.  Beste Methode und Werkzeuge für lokales IP-Scannen - Alexander Malakhov


Antworten:


Besuche die Arp-Scan Befehl - Sie müssen es wahrscheinlich installieren, zB:

sudo apt-get install arp-scan

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

Und um weitere Details zu geben:

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

Wo eth0 ist dein Gerät. Sie können Ihr Gerät finden mit:

ifconfig

217
2018-03-24 13:37



Perfekt, danke. Gibt genau das Format zurück, das ich brauche. - Christopher Gwilliams
Funktioniert perfekt auf OSX! Installiert mit Brew, und Schnittstelle war en0, anstatt eth0, aber funktioniert gut. - nthonygreen
Wenn Sie über WLAN mit Ihrem Netzwerk verbunden sind wlan0 Anstatt von eth0. - Neil
Können Sie damit sowohl Hostnamen als auch IP-Adressen auflisten? - user1527227
Es ist erwähnenswert, dass dies nicht den ARP-Cache verwendet: Es führt einen tatsächlichen Scan durch. Im Gegensatz zu den meisten nmap-Scans kann dies nicht die Grenzen von Layer 3 überschreiten, was normalerweise in diesem Szenario der Fall ist. (Mit anderen Worten, es ist auf Ihr Subnetz beschränkt.) - Zenexer


Verwenden Sie nmap. Beispiel: nmap -sn 10.10.10.0/24 Der ARP-Cache teilt Ihnen nur diejenigen mit, mit denen Sie kürzlich Kontakt aufgenommen haben.


104
2018-03-24 13:38



ist 10.10.10.0 meine gegebene IP? Was ist 24 in diesem Fall? Vielen Dank. - kolonel
@kolonel Das ist nur ein Beispiel. Sie sollten es durch Ihr Netzwerk ersetzen. Die 24 ist "Schrägstrichnotation" der Subnetzmaske. Es bedeutet 24 Bits von links zu benutzen. Es entspricht 255.255.255.0. - Keith
@Keith weißt du wie ich herausfinden würde meine Netzwerkadresse zu benutzen? Oder ist es nur meine IP mit 0/24 am Ende? - TMH
@ Kolonel:en.wikipedia.org/wiki/Classless_Inter-Domain_Routing - arkod


In Windows wäre das "arp -a"Ich glaube, dass ein Äquivalent von dem in Linux wäre"arp -e".

Diese Information kann von der man-Seite für arp gefunden werden:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).

19
2018-03-24 13:33



Das sieht so aus, als ob es funktioniert (muss möglicherweise eine Wiedergabe haben, da ich in einem öffentlichen Netzwerk bin, so scheint es nur alle Server im Netzwerk aufzulisten. - Christopher Gwilliams
Wenn ich in einem Heimnetzwerk bin, werden nur die an meinen Router angeschlossenen Geräte aufgelistet? Vielen Dank! - Christopher Gwilliams
Dieser Befehl listet nur die Geräte im aktuellen Arp-Cache des Hosts auf und dies sind nur diejenigen, mit denen der Host zuletzt Kontakt aufgenommen hat. - Linker3000
Beide arbeiten unter Linux, aber arp -a zeigt (alle) Hosts im alternativen (BSD) Stil an. Simpler läuft arp macht dasselbe wie Laufen arp -e weil das der Standard ist. - simplegamer


Wenn Ihr Netzwerk ist 192.168.0.0/24Erstellen Sie eine ausführbare Datei mit dem folgenden Code; Ändere das 192.168.0 zu 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

13
2018-05-17 18:45



Hallo Anders ... Das Netzwerk des Benutzers ist möglicherweise nicht 192.168.0.0/24; Ich habe eine Notiz gemacht. Die Formatierung der Seite mochte keine blanke # !, so dass die Formatierung des Code-Snippets nicht mehr funktionierte: Wenn Sie Code eingeben, verwenden Sie die blockquote- oder vorformatierten Textschaltflächen und überprüfen Sie Ihre Antwort auf korrekte Formatierung, bevor Sie sie abschicken. und Räume 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 am besten, dass Sie dies angeben. Es mag für einige nicht offensichtlich sein, was alles erforderlich ist, um Ihre Lösung zu implementieren. - Nevin Williams
Technisch gibt dies nur Hosts zurück, die auf Ping reagieren. Es kann Hosts geben, die verbunden sind, aber ICMP-Echoanforderungen nicht beantworten. Ebenso kann man ein Paket an ein gesamtes Netzwerk senden, indem man die Broadcast-Adresse angibt, die die letzte Adresse im IP-Netzwerk ist: ping -c 1 -W1 192.168.0.255 würde dasselbe wie die for-Schleife erreichen. - Nevin Williams
@NevinWilliams (erforderlich -b, entfernt -W warten mehr) ping -b -c 1 192.168.0.255 Ergebnis "1 Pakete gesendet, 0 empfangen, 100% Paketverlust, Zeit 0 ms" - Aquarius Power


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

Sie können auch eine etwas weniger genaue (in meiner Erfahrung) Karte eines Netzwerks bekommen, indem Sie laufen ping 192.168.1.255 (wieder substituierend 192.168.1), welche sollte a ping zu jeder Maschine im Netzwerk, funktioniert aber meiner Erfahrung nach nicht immer korrekt.


10
2017-09-08 18:56



Tatsächlich wird keine der Antworten immer korrekt funktionieren. IP wurde nicht mit dieser Anforderung entworfen, und es gibt Dinge wie Private VLANs, die es unmöglich machen, andere Hosts in demselben LAN zu finden. - Ron Maupin


Kam mit dem folgenden auf einem Nexus mit tmux wie arp-scan ist nicht im Repo aber nmap kam vorinstalliert, zeigt nur die IP-Adressen an:

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

2
2017-10-30 20:33





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

nmap -sL 192.168.0.* | grep \(1

Erläuterung.

nmap -sL 192.168.0.* listet alle IPs im Subnetzwerk auf und markiert diejenigen, die einen 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 beginnen ( und Ziffer 1Wir filtern dafür mit | grep \(1 (Backslash wird benötigt, um die Klammern zu entfernen)

Marotte
Vorsicht, wenn zwei Geräte denselben Namen haben, nmap zeigt nur den an, der mit dem Router verbunden war letzte


0
2017-10-20 10:32



Wenn Sie die gleiche Antwort für zwei Fragen haben, kann es sich lohnen, die Fragen als doppelt zu markieren, anstatt doppelte Antworten zu posten. Auf diese Weise kann Wissen geteilt werden, wenn ähnliche Fragen miteinander verknüpft werden. - Mokubai♦
@Mokubai Du hast Recht, ich habe dem OP einen Kommentar hinzugefügt. Dies zeigt ein interessantes Problem. EIN schnell Suche entdeckt 6 Duplikate (diese Q und 5 Links) über 4 Netzwerk-Sites (SU, Ask Ubuntu, SF, Unix). Sicher gibt es viel mehr! Wie gehe ich damit um? Im Idealfall sollte jeder dieser 6 Beiträge mit 5 anderen verknüpft werden. Das Hinzufügen all dieser Links von Hand ist nicht skalierbar. Also, für jetzt habe ich auf diesen Beitrag (am meisten Upvoted) verlinkt. Ein weiteres Problem ist, dass es unmöglich ist, Q auf AskUbuntu als ein Duplikat des Q auf SU zu markieren. Hm ... Wahrscheinlich wurde das schon auf der Meta besprochen? - Alexander Malakhov
funktioniert nicht auf Centos 7, listet nur jede mögliche IP-Adresse im Netzwerk ohne Namen auf. Arp-Scan hat für mich funktioniert. - Jeff


Ich antworte auf Anders Larrsons Antwort -

#!/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

0
2017-07-06 10:04