2011-07-15 17:51:44 +0000 2011-07-15 17:51:44 +0000
65
65

Liste der Computer in einem LAN unter Linux anzeigen

Ich bin ein Web-Entwickler, der versucht, die Sicherheit besser in den Griff zu bekommen. Ich versuche, einen Weg (auf Linux/Debian-basierten Distributionen) zu finden, alle Computer im selben LAN aufzulisten, in dem sich mein Netbook befindet. Ich habe es mit “arp -n” versucht, aber ich habe nicht das Gefühl, dass es sich um eine vollständige Liste handelt, da mein iPhone am selben Wi-Fi-Router wie mein Netbook angeschlossen ist, und das hat sich nicht ergeben. Gibt es einen besseren Weg, um eine vollständige Liste der Rechner zu erhalten, die sich alle dasselbe Gateway teilen?

Antworten (11)

61
61
61
2011-07-15 17:55:50 +0000

Holen Sie nmap . Es handelt sich um das Programm Trinity, das in The Matrix verwendet wird, und Sie können einen Scan durchführen, um alle Geräte zu finden, die mit dem LAN, in dem Sie sich befinden, verbunden sind, und vieles mehr. Hier ist das Referenzhandbuch.

41
41
41
2014-12-09 15:56:20 +0000

Ich verwende nmap und eine Adresse mit CIDR-Blocknotation des Netzwerks, das Sie scannen möchten. Zuerst müssen Sie nmap installieren, da es möglicherweise nicht mit Ihrer Distribution vorinstalliert ist. Auf Ubuntu:

sudo apt-get install nmap

Finden Sie als nächstes Ihre Netzwerkadresse heraus, indem Sie ifconfig verwenden:

ifconfig

ifconfig-Ausgabe für die Schnittstelle, die ich scannen möchte:

wlan1 Link encap:Ethernet HWaddr 00:1f:3b:03:d2:bf  
          inet addr:192.168.1.104 Bcast:192.168.0.255 Mask:255.255.255.0
          inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
          ...

Verwenden Sie die inet addr und Mask, um die Netzwerkadresse in CIDR-Notation herauszufinden, mehr zu CIDR hier . Die Adresse lautet:

192.168.1.0/24

Führen Sie nmap mit dem Parameter -sP aus, der nicht weiter scannt, als zu prüfen, ob der Host online ist:

sudo nmap -sP 192.168.1.0/24

Die Ausgabe von nmap sieht etwa so aus:

Das war’s. Wenn Sie mehr Hilfe mit nmap benötigen, lesen Sie die offizielle Dokumentation von nmap , oder führen Sie aus:

Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds
18
18
18
2011-07-15 19:12:18 +0000

arp -n zeigt Ihnen nur Rechner in Ihrem LAN an, mit denen Ihr Rechner bereits gesprochen hat. Sie können diese Liste besser füllen, indem Sie die Broadcast- und All-Host-Multicast-Adressen anpingen:

Die “all ones” (in binärer Form) Broadcast-Adresse. Beachten Sie, dass die meisten IP-Stacks dies in die Subnetz-Broadcast-Adressen für alle Subnetze übersetzen, an die Sie angeschlossen sind:

ping 255.255.255.255

Die Subnetz-Broadcast-Adresse für Ihr aktuelles Subnetz. Angenommen, Sie befinden sich auf 192.168.1.0/24:

ping 192.168.1.255

Die Multicast-Adresse für “alle Hosts”. Mir gefällt diese Methode sehr gut, weil es wahrscheinlicher ist, Hosts zu finden, die für andere IP-Subnetze konfiguriert sind, die zufällig an dasselbe Ethernet-LAN wie Sie angeschlossen sind:

ping 224.0.0.1

Beachten Sie, daß diese Methode und die anderen Methoden, die ich bisher in anderen Antworten gesehen habe, nur nach IP-erreichbaren Hosts im aktuellen Netzwerk suchen. Das ist wahrscheinlich alles, worum Sie sich kümmern müssen, aber es ist für einen Angreifer möglich, in einem Netzwerk herumzuschnüffeln oder schlimme Dinge zu tun, ohne über IP sichtbar zu sein.

8
8
8
2017-04-03 21:54:39 +0000

ip neigh und hosts. NO nmap erforderlich / NO sudo erforderlich.

Darauf aufbauend können Sie ein Python-Skript erstellen:

#!/usr/bin/env python

"""List all hosts with their IP adress of the current network."""

import os

out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))

Download über

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py

(oder einfach arp … Das habe ich vorher nicht gesehen)

4
4
4
2016-05-10 08:21:24 +0000

Sie könnten versuchen, ein gegebenes Subnetz mit einem kleinen Linux-Shell-Skript anzupingen, zum Beispiel

$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [$? -eq 0] && echo "192.168.1.$ip UP" || : ; done
4
4
4
2013-12-18 01:44:36 +0000

Ich fand die vorhandenen Antworten nicht befriedigend genug, also dachte ich, ich versuche es mal. Schließlich schlägt die FAQ vor, Kontext für Links anzugeben.

nmap ist großartig, wenn auch etwas verwirrend zu benutzen. Hier ist etwas, das ich ausführe, um lokale Netzwerkgeräte zu entdecken, die sich meist durch Kopieren und Einfügen verwenden lassen. nmap -sP (oder nmap -sn) scannt durch pinging . Es gibt andere Optionen für die ‘Host-Erkennung’, wie bei nmap -sL oder nmap -Pn.

Weg #1.

ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
ehtesh@x200arch:~$ nmap -sP 172.18.72.0/24
Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST
Nmap scan report for 172.18.72.2
Host is up (0.017s latency).
<... 15 IP addresses snipped ...>
Nmap scan report for 172.18.72.253
Host is up (0.13s latency).
Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds
ehtesh@x200arch:~$ arp -a | sort -n -k 1,1                            
? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0
? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0
? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0
? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0
? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0
? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0
? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0
? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0
? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0
? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0
? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0
? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0
? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0
? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0
? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0

Weg #2. Ich weiß, dass das funktioniert, aber ich kann nicht sagen, ob dies der richtige Weg ist.

ehtesh@x200arch:~$ #ifconfig | grep broadcast
ehtesh@x200arch:~$ ip address show wlp3s0 | grep brd
    link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ ping -b -c 3 -i 20 172.18.75.255
<... similar output to above ...>

Ich wüsste gerne, ob es effektivere Wege gibt. Bis dahin bleibe ich dabei.

3
3
3
2011-07-15 18:16:48 +0000

Hunt ist ein Kommandozeilen-Tool, das in der Lage ist, eine Liste von Maschinen zu erstellen, während diese zur Information über das Netzwerk senden. Es verwendet TCP-, UDP-, ICMP- und ARP-Daten, um eine Liste der aktiven MAC-Adressen in einem Netzwerk zu erstellen. Es ist ein passives Werkzeug, das durch Abhören der Leitung funktioniert.

3
3
3
2019-05-23 17:18:32 +0000

Sie könnten fping sudo apt-get install fping (in debian-ähnlichen Betriebssystemen) verwenden.

fping ist ähnlich wie ping, aber viel besser, wenn mehrere Hosts gepingt werden. Die Flagge -r 1 weist fping an, nur eine Runde durchzuführen. Der 2>1-Teil erlaubt grep, die Ausgabe zu filtern.

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

Würde etwas anzeigen wie:

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

Es gibt auch ein interessantes Flag für nmap, das Sie den MAC-Anbieter sehen lassen würde - falls bekannt. Verwenden Sie es mit sudo, um die MAC-Adressen zu sehen.

$ sudo nmap -sP 192.168.1.0/24

Sie würden zum Beispiel erhalten:

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds
3
3
3
2017-11-08 13:22:31 +0000

1. Alternative Lösung, wenn Broadcasts und nmap nicht verfügbar sind:

seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time=
arp -a

2a. oder fragen Sie einfach Ihren Domänennamensserver :

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2b. ohne awk

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. pingt alle pingbaren Netzwerk-Geräte im 192.168.2.0/24 Subnetz parallel an (um die Laufzeit zu reduzieren). Danach sollte arp jedes Gerät anzeigen, das geantwortet hat.

  2. prüft nicht auf aktive oder aktuelle Verbindungen, sondern listet alle Verbindungen auf, die der lokale Domänendienst einen Eintrag behält, auch wirklich alte.

Ausführlichere Erklärung:

  • seq 254 erstellt alle Nummern von 1 bis 254 (für alle Nummern von 100 bis 150: seq 100 150)
  • xargs ruft ping an und ersetzt “IP” (-iIP) durch die Nummer sequence aus stdin, also 192. 168.2.IP ändert sich zu 192.168.2.1 für die erste seq-Nummer, -P gibt die Anzahl der gleichzeitigen ping-Prozesse an, die xargs starten soll, ich wähle die gleiche Anzahl +1 wie Adressen (=254) im interessiert.
  • ping mit der durch xargs modifizierten IP-Adresse (192.168.2.IP) und nur einmal pingen(-c1); Sie müssen den gleichen Bezeichner wie für xargs über dem Argument -i verwenden, in diesem Fall IP
  • grep time=, um jede Zeile mit überflüssigen Informationen zu entfernen, wir sind nur an Antworten interessiert, die eine Round-Trip-Zeit (=eine Antwort erhalten) liefern
  • arp -a, um gültige Namen(ip)-Paare anzuzeigen

Ich nenne dies meinen pingall-Befehl und habe ihn über einen Alias in ~/.bashrc verfügbar gemacht:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
3
3
3
2016-07-25 17:31:07 +0000

Um den Status eines Bereichs von IP-Adressen zu scannen, ist dies schön und einfach:

sudo nmap -sn 192.168.1.2-20

Wo:

-sn: Ping Scan - disable port scan

Hinweis:

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

bekannt. Ich habe dies unter Mac OS X (das auf BSD basiert) getan. Ich bin nicht sicher, ob die Linux-Version irgendwelche Unterschiede aufweist.

2
2
2
2016-10-20 10:28:47 +0000

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 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 der Klammer ( und der Ziffer 1 beginnen, filtern wir diese mit | grep \(1 (Backslash wird benötigt, um die Klammer zu umgehen)

Quirk Vorsicht, wenn zwei Geräte den gleichen Namen haben, zeigt nmap nur das eine an, das mit dem Router letzter verbunden war