Wie finde ich unter Linux nicht verwendete IP-Adressen in meinem Netzwerk?

28

Ich habe Zugriff auf zwei Computer (A und B) in einem Netzwerk. Beide haben eine statische IP-Adresse mit einer Subnetzmaske von 255.255.255.128 (ich habe überprüft, dass kein DHCP-Server verwendet wird). Ich möchte mehrere IP-Adressen auf demselben Computer konfigurieren und daher wissen, welche IP-Adressen bereits im Subnetz verwendet werden.

Aus einer früheren Frage habe ich versucht, einen nmap -sP -PR 172.16.128.*Befehl zu verwenden, aber ich bin skeptisch, was das Ergebnis betrifft, da derselbe Befehl auf meinen beiden Computern (A und B) unterschiedliche Ergebnisse liefert. Auf A, das Ergebnis zeigt, eine Liste von IP - Adressen , 8, die (angeblich) bereits verwendet, einschließlich der von A und B .

Nmap done: 256 IP addresses (8 hosts up) scanned in 1.23 seconds

Aber auf B ist das Ergebnis anders, dh

Nmap done: 256 IP addresses (0 hosts up) scanned in 0.00 seconds

Das Ergebnis auf B zeigt nicht einmal die eigene IP-Adresse sowie die IP-Adresse von A an!

Was genau mache ich hier falsch? Gibt es in Red Hat Linux (RHEL) eine idiotensichere Möglichkeit, alle IP-Adressen zu ermitteln, die in dem Subnetz verwendet werden, zu dem mein Computer gehört?

RHEL: 6.5
Nmap version: 5.51
Vishal Sharma
quelle
9
Wer verwaltet das Netzwerk? Haben Sie die Erlaubnis, Ihren Hosts beliebige IP-Adressen zuzuweisen?
Roger Lipscombe
4
Ja, ich habe die Erlaubnis. Das ist eine gute Frage.
Vishal Sharma
11
Die einzige Möglichkeit, eine richtige Antwort zu erhalten, besteht darin, Ihren Netzwerkadministrator zu fragen. Alles, was Sie tun, kann ungenau sein, da Geräte möglicherweise ausgeschaltet sind, neu gestartet werden, nicht mehr reagieren usw.
Jon Bentley
7
Um Rogers und Jons Kommentare zu vervollständigen, sollte es, wenn IPs in Ihrem Netzwerk manuell und ohne DHCP zugewiesen werden, irgendwo ein Register geben (sei es eine Datenbank, eine Excel-Tabelle oder ein altes Papierverzeichnis), in dem jede IP-Zuweisung und Personen aufgezeichnet werden Die Verwaltung des Netzwerks muss über diese Informationen verfügen und diese verwenden. Keine technische Lösung stellt sicher, dass die IP-Adresse eines anderen Computers nicht widerwillig gestohlen wird (sei es ein ausgefallener Server oder ein Laptop für Remotebenutzer). Wenn dieses Register verloren geht oder nicht existiert, ist eine vollständige Bestandsaufnahme erforderlich.
Zakinster
Sie sollten die mit Wildcards versehenen IP-Adressen in Anführungszeichen setzen, um sicherzustellen, dass Ihre Shell nicht versucht, sie als möglichen Dateinamen zu erweitern. Zum Beispielnmap -sP -PR '172.16.128.*'
roaima

Antworten:

39

Jedes gut erzogene Gerät in einem Ethernet-LAN ​​kann fast jeden Datenverkehr ignorieren, sodass PINGs, Port-Scans und dergleichen unzuverlässig sind. Geräte können ARP-Anfragen jedoch nicht ignorieren . Unter der Voraussetzung, dass Sie angeben, dass Sie ein lokales Netzwerk scannen, besteht die am wenigsten anfällige Methode darin, eine Verbindung zu einer Remoteadresse herzustellen und dann in meinem ARP-Cache nachzuschlagen.

Hier ist ein einfaches Gerät ohne Filterung (dh eines, das nicht zum Ignorieren einiger Klassen von IP-Verkehr konfiguriert ist):

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=0.351 ms
[...]
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.1
? (192.168.3.1) at b8:27:eb:05:f5:71 [ether] on p1p1

Hier ist ein Filtergerät (eines, das mit einer einzigen Zeile konfiguriert wurde iptables, um den gesamten Datenverkehr zu ignorieren ):

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.31
[...]
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.31
? (192.168.3.31) at b8:27:eb:02:e4:46 [ether] on p1p1

Hier ist ein Gerät, das gerade außer Betrieb ist. Beachten Sie das Fehlen einer MAC-Adresse:

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.241
[...]
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.241
? (192.168.3.241) at <incomplete> on p1p1

Diese Methode ist nicht unfehlbar - sie vermisst zum einen Geräte, die ausgeschaltet sind -, aber es ist die am wenigsten schreckliche Methode, die ich bisher ausprobiert habe.

Edit : Eric Duminil, ja, es funktioniert nur in einem lokalen Netzwerk; siehe Absatz eins.

Vishal, die Methoden sind funktional identisch. Beachten Sie den in Leos Antwort zitierten Text über nmap:

Wenn ein privilegierter Benutzer versucht, Ziele in einem lokalen Ethernet-Netzwerk zu scannen, werden ARP-Anforderungen verwendet, sofern nichts --send-ipanderes angegeben wurde.

Seine Methode beinhaltet weniger Tippen. Meins kann ohne Privileg durchgeführt werden und kann Ihnen ein besseres Verständnis dafür geben, was tatsächlich passiert. Aber in beiden Fällen wird das Gleiche am Draht gemacht.

MadHatter unterstützt Monica
quelle
2
Dies funktioniert nur mit Geräten im selben lokalen Netzwerk, oder? Ich habe es auf einem meiner Server versucht, Ping-Anfragen werden irgendwo dazwischen abgelegt und ich kann keine relevante Zeile mit finden arp.
Eric Duminil
Danke für die Antwort. Ich wollte nur wissen, wie sich Ihre Methode mit der von @Leo vergleichen lässt. Ist es in irgendeiner Weise besser als das (weil es sonst einfacher ist, nur einen Befehl zu verwenden)?
Vishal Sharma
2
@VishalSharma, EricDuminil: siehe oben bearbeiten.
MadHatter unterstützt Monica
Bedeutet das, dass die @ Leo-Methode nur dann Ihrer ähnelt, wenn sie von einem privilegierten Benutzer verwendet wird und wenn sie daher von einem unterprivilegierten Benutzer verwendet wird, ist das Ergebnis nicht vollständig / falsch? Mit privilegiertem Benutzer ist auch ein Benutzer gemeint, der sudo-Zugriff hat.
Vishal Sharma
1
@VishalSharma Der erste Teil Ihres Kommentars ist korrekt. Privilegierter Benutzer beinhaltet, dass er etwas unter sudo -u root(oft abgekürzt sudo) tut , aber auch einfach als root eingeloggt ist oder getan hat /bin/su, daher der Überbegriff.
MadHatter unterstützt Monica
20

Da ein Gerät ARP-Anfragen nicht ignorieren kann, verwende ich gerne ein Tool mit dem Namen arp-scan. Es ist in den meisten Repositories verfügbar.

Wenn Sie den Befehl mit dem --localnetSwitch ausführen , erhalten Sie einen Überblick über Ihr gesamtes internes Netzwerk.

sudo arp-scan --localnet

Gibt mir eine Liste aller IP- und MAC-Adressen in meinem Netzwerk. Es ist auch möglich, einen zu scannenden Netzwerkbereich anzugeben.

sudo arp-scan 172.16.128.0/25

Wenn Sie mehrere Netzwerkschnittstellen konfiguriert haben, können Sie diejenige angeben, die Sie mit dem Switch verwenden möchten -I.

sudo arp-scan -I eth0 172.16.128.0/25

Weitere Informationen zu möglichen Switches finden Sie unter https://linux.die.net/man/1/arp-scan oder indem Sie ausführen man arp-scan.

Thorchy
quelle
Sieht aus wie ein vielversprechendes Tool, kommt aber nicht mit RHEL 6.5 (in meinem Fall fehlt es zumindest).
Vishal Sharma
@VishalSharma Das ist bedauerlich. Es ist für CentOS verfügbar, daher hätte ich gedacht, dass es auch für RHEL verfügbar sein sollte.
Thorchy
4
Es ist in EPEL, Fedoras Extra Packages für Enterprise Linux, enthalten.
Mattdm
Funktioniert nicht, wenn LaBrea ausgeführt wird.
Joshudson
@joshudson Ich bin mir ziemlich sicher, dass kein Tool / keine Software das Netzwerk nach nicht verwendeten IP-Adressen durchsuchen kann, wenn LaBrea ausgeführt wird.
Thorchy
11

Ich weiß nicht, welche Version von nmap Sie in Ihrem Red Hat 6.5 ausführen, aber für neuere Releases denke ich, dass dies die richtige (und schnellere) Art ist:

nmap -sn -n 172.16.128.0/25

Dadurch werden alle Hosts in Ihrem Netzwerk aufgelistet (Sie können also jede andere IP-Adresse aus diesem Subnetz verwenden, die verfügbar sein sollte).

Bearbeiten und beachten: Das von Ihnen erwähnte Subnetz ist 255.255.255.128, aber dann wird die Ausgabe als Scannen von 254 Hosts angezeigt. Es sei denn, ich vermisse etwas, das eine / 25-Maske und 126 verfügbare Hosts sein sollte. Wenn Sie eine / 24 scannen möchten, ändern Sie den obigen Befehl, um alle 254 Hosts abzufragen.

Aus dem nmap-Buch -sPwird eingestellt und ersetzt durch -sn:

-sn (kein Port-Scan)

Diese Option weist Nmap an, nach der Hosterkennung keinen Port-Scan durchzuführen und nur die verfügbaren Hosts auszudrucken, die auf die Hosterkennungsprüfungen geantwortet haben. Dies wird häufig als "Ping-Scan" bezeichnet. Sie können jedoch auch die Ausführung von Traceroute- und NSE-Hostskripten anfordern. Dies ist standardmäßig einen Schritt aufdringlicher als der Listenscan und kann häufig für dieselben Zwecke verwendet werden. Es ermöglicht die leichte Aufklärung eines Zielnetzwerks, ohne viel Aufmerksamkeit auf sich zu ziehen. Zu wissen, wie viele Hosts verfügbar sind, ist für Angreifer wertvoller als die Liste, die durch den Listenscan jeder einzelnen IP-Adresse und jedes einzelnen Hostnamens bereitgestellt wird.

Systemadministratoren finden diese Option häufig ebenfalls nützlich. Es kann leicht verwendet werden, um verfügbare Maschinen in einem Netzwerk zu zählen oder die Serververfügbarkeit zu überwachen. Dies wird oft als Ping-Sweep bezeichnet und ist zuverlässiger als das Pingen der Broadcast-Adresse, da viele Hosts auf Broadcast-Anfragen nicht antworten.

Die mit -sn durchgeführte Standardhosterkennung besteht standardmäßig aus einer ICMP-Echoanforderung, TCP-SYN an Port 443, TCP-ACK an Port 80 und einer ICMP-Zeitstempelanforderung. Bei Ausführung durch einen nicht privilegierten Benutzer werden nur SYN-Pakete (unter Verwendung eines Verbindungsaufrufs) an die Ports 80 und 443 des Ziels gesendet. Wenn ein privilegierter Benutzer versucht, Ziele in einem lokalen Ethernet-Netzwerk zu scannen, werden ARP-Anforderungen verwendet, sofern nicht --send-ip angegeben wurde. Die Option -sn kann mit jedem der Discovery-Sondentypen (die Option -P *, außer -Pn) kombiniert werden, um die Flexibilität zu erhöhen. Wenn eine dieser Optionen für Sondentyp und Portnummer verwendet wird, werden die Standard-Sondentypen überschrieben. Wenn zwischen dem Quellhost, auf dem Nmap ausgeführt wird, und dem Zielnetzwerk strenge Firewalls vorhanden sind, wird die Verwendung dieser erweiterten Techniken empfohlen.

In früheren Versionen von Nmap war -sn als -sP bekannt.

Das -nsoll die DNS-Auflösung der Clients vermeiden (macht den Scan schneller):

-n (keine DNS-Auflösung)

Weist Nmap an, die DNS-Auflösung für die gefundenen aktiven IP-Adressen niemals umzukehren. Da DNS auch mit dem integrierten Parallel-Stub-Resolver von Nmap langsam sein kann, kann diese Option die Scan-Zeiten verkürzen.

Sie können andere Kombinationen verwenden, um den Scan oder die Dienste zu vertiefen. Dies sollte jedoch für das, wonach Sie suchen, ausreichen, es sei denn, die Hosts maskieren sich selbst oder löschen alles.

Quelle: https://nmap.org/book/man-host-discovery.html

Löwe
quelle
Die Ausgabe, die ich erwähnt habe, stammt aus dem Befehl nmap -sP -PR 172.16.128. * Aus diesem Grund werden 254 Hosts gescannt.
Vishal Sharma
In meinem Fall lautet die Netzwerk-ID 172.16.128.128. Daher musste ich den von Ihnen vorgeschlagenen Befehl ändern. Ich habe nmap -sn -n 172.16.128.128/25 verwendet.
Vishal Sharma
Ich bin nicht sicher, was Sie mit Netzwerk-ID gemeint haben, aber wenn Ihr Gerät diese Adresse hat und Sie möchten, dass alle 254 Hosts in Ihrem Subnetz gescannt werden, sollten Sie nmap -sn -n 172.16.128.1/24stattdessen ausführen (wie in der obigen Antwort angegeben, wird ein 255.255 gescannt. 255,0 Maske)
Leo
Mit Netzwerk-ID hatte ich die Zeichenfolge gemeint, die durch Ausführen des logischen Und von IP_Adresse und Subnetzmaske erhalten wurde.
Vishal Sharma
Aha. Beantwortet der von mir gepostete Befehl nmap Ihre Frage? Werden auf beiden Geräten die gleichen Adressen verwendet?
Leo
8

Teil 1 - fping

Dieses Tool pingt alles in dem angegebenen Netzwerkbereich und zeigt diejenigen an, die über ICMP antworten.

root@thionite:~# fping -a -g 10.28.1.0/24
10.28.1.1
10.28.1.2
10.28.1.3
10.28.1.4
10.28.1.5
10.28.1.12.....

Teil 2 - Arp

Da fping mit allem im LAN gesprochen hat, wurde ein Eintrag zur ARP-Tabelle des Systems hinzugefügt. Lesen Sie es innerhalb weniger Minuten vor, da die Arp-Tabelle alte Einträge löscht.

root@thionite:~# arp -a | grep -v incomplete
? (10.28.1.1) at 00:0d:b9:35:29:c4 [ether] on eth0
? (10.28.1.2) at 68:05:ca:10:53:5f [ether] on eth0
? (10.28.1.3) at d2:f1:6e:54:05:22 [ether] on eth0
? (10.28.1.4) at 00:1a:4d:26:85:ee [ether] on eth0
? (10.28.1.5) at 6e:a6:e5:78:da:ca [ether] on eth0
? (10.28.1.12) at 3c:4a:92:76:85:d8 [ether] on eth0

Beachten Sie auch, dass die ARP-Tabelle eine maximale Größe hat und der Kernel alte Einträge mit geringer Nutzung entfernt.

Alles zusammen mit

 fping -a -g 10.28.1.0/24 && arp -a | grep -v incomplete > arp.txt

Stöbern Sie dann in der Datei arp.txt.

Criggie
quelle
5

IPv6

Gehen Sie nicht davon aus, dass IPv4 Ihre einzige Option ist. Viele moderne Betriebssysteme unterstützen IPv6 ohne Probleme, auch wenn Ihr ISP keine V6-Konnektivität bietet.

Es kann sogar Geräte geben, die nur über IPv6 oder andere Protokolle erreichbar sind.

In https://en.wikipedia.org/wiki/Multicast_address#IPv6 sind eine Reihe praktischer Multicast-Adressen dokumentiert. Die für Sie interessante ist jedoch ff02 :: 1

root@thionite:~# ping6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80::4261:86ff:fec4:cbaa%eth0 eth0: 56 data bytes
64 bytes from fe80::4261:86ff:fec4:cbaa%eth0: icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from fe80::21a:4dff:fe26:85ee%eth0: icmp_seq=1 ttl=64 time=0.215 ms (DUP!)
64 bytes from fe80::6a05:caff:fe10:535f%eth0: icmp_seq=1 ttl=64 time=0.233 ms (DUP!)
64 bytes from fe80::226:55ff:feda:299c%eth0: icmp_seq=1 ttl=64 time=0.334 ms (DUP!)
64 bytes from fe80::20d:b9ff:fe35:29c4%eth0: icmp_seq=1 ttl=64 time=0.501 ms (DUP!)
64 bytes from fe80::21e:c2ff:fe13:36bf%eth0: icmp_seq=1 ttl=64 time=0.512 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:85d8%eth0: icmp_seq=1 ttl=1 time=0.518 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:8506%eth0: icmp_seq=1 ttl=1 time=0.757 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:e550%eth0: icmp_seq=1 ttl=1 time=0.772 ms (DUP!)
64 bytes from fe80::60cc:69ff:fe4f:7db0%eth0: icmp_seq=1 ttl=64 time=0.992 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe32:3232%eth0: icmp_seq=1 ttl=64 time=1.00 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe30:3030%eth0: icmp_seq=1 ttl=64 time=1.24 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe31:3131%eth0: icmp_seq=1 ttl=64 time=1.34 ms (DUP!)
64 bytes from fe80::6ca6:e5ff:fe78:daca%eth0: icmp_seq=1 ttl=64 time=2.35 ms (DUP!)
64 bytes from fe80::b639:d6ff:feab:1000%eth0: icmp_seq=1 ttl=64 time=7.04 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:85d8%eth0: icmp_seq=1 ttl=1 time=8.02 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:8506%eth0: icmp_seq=1 ttl=1 time=8.03 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:e550%eth0: icmp_seq=1 ttl=1 time=8.06 ms (DUP!)
64 bytes from fe80::212:12ff:fef7:8044%eth0: icmp_seq=1 ttl=64 time=8.24 ms (DUP!)
64 bytes from fe80::8edc:d4ff:fef2:67e0%eth0: icmp_seq=1 ttl=64 time=18.3 ms (DUP!)
64 bytes from fe80::21e:c2ff:fea9:6d71%eth0: icmp_seq=1 ttl=64 time=295 ms (DUP!)
...repeats
Criggie
quelle
3

Eine schlechte Antwort ist, die Broadcast-Adresse mit zu pingen

root@thionite:~# ping -b 10.28.255.255
WARNING: pinging broadcast address
PING 10.28.255.255 (10.28.255.255) 56(84) bytes of data.
64 bytes from 10.28.2.7: icmp_seq=1 ttl=64 time=0.220 ms
64 bytes from 10.28.3.12: icmp_seq=1 ttl=255 time=0.594 ms (DUP!)
64 bytes from 10.28.9.4: icmp_seq=1 ttl=64 time=1.03 ms (DUP!)
64 bytes from 10.28.1.151: icmp_seq=1 ttl=255 time=1.04 ms (DUP!)
64 bytes from 10.28.3.13: icmp_seq=1 ttl=255 time=2.22 ms (DUP!)
64 bytes from 10.28.3.11: icmp_seq=1 ttl=255 time=2.43 ms (DUP!)

In diesem Netzwerk gibt es ~ 50 IP-Adressen mit einer / 16-Netzmaske, und nur sieben haben geantwortet. Das ist also keine gute Lösung.

Criggie
quelle
1
Warum andere Antwort? Du kannst post
daisy
3
@daisy, weil sie unterschiedliche Antworten sind. Eine monolithische Antwort mag gut sein, wird aber von einem Teil niedergehalten. Durch getrennte Antworten funktioniert der Abstimmungsmechanismus nach oben / unten ordnungsgemäß. Diese Antwort war wirklich nur der Vollständigkeit halber nicht sehr nützlich in der Praxis.
Criggie
1
Ping testet nur, ob ein Gerät so konfiguriert ist, dass es auf Pings reagiert.
Rob Moir
@RobMoir true - Der Hauptgrund dafür ist, dass die Broadcast-Adresse vorhanden ist und für IPv4 entwickelt wurde.
Criggie
3

Zusätzlich zur Antwort von MadHatter gibt es ein Tool, das die Arp-Suche durchführt, ohne zuerst ein Netzwerkpaket zu senden: Arping .

Es scheint zwei Implementierungen zu geben:

Für Ihren Zweck würde ich nur das Paket aus Ihrer Linux-Distribution nehmen, da die Unterschiede wahrscheinlich nur in den Details liegen.

allo
quelle
1

Damals, als Dinosaurier die Erde durchstreiften, verwendeten Proto-Nerds Arpwatch

arpwatch ist ein Computersoftwaretool zur Überwachung des Adressauflösungsprotokollverkehrs in einem Computernetzwerk. [1] Es wird ein Protokoll der beobachteten Paarung von IP-Adressen mit MAC-Adressen zusammen mit einem Zeitstempel erstellt, als die Paarung im Netzwerk angezeigt wurde. Es besteht auch die Möglichkeit, eine E-Mail an einen Administrator zu senden, wenn sich eine Kopplung ändert oder hinzugefügt wird.

arpwatch man page

RedGrittyBrick
quelle
0

Melden Sie sich bei Ihren Switches an und geben Sie show mac-address oder ähnliche Befehle aus (je nach Marke und Modell). Dadurch erhalten Sie alle MAC-Adressen der aktiven Geräte (außer Ihnen selbst). Wenn einer dieser MACs unter den MACs, die mit einem der Ping- oder anderen Methoden in den anderen Antworten gefunden wurden, nicht vorkommt, möchten Sie möglicherweise genauer untersuchen, um welches Gerät es sich handelt. Vielleicht spielt es keine Rolle, weil es nicht einmal IP spricht oder zu einem anderen VLAN gehört, aber zumindest können Sie sich einen Überblick verschaffen, ob Ihre anderen Sonden korrekt sind.

Hagen von Eitzen
quelle