Welche Geräte sind im Netzwerk?

Fr, 19. März 2021, Ralf Hersel

Die Tendenz geht dahin, immer mehr Geräte im heimischen Netzwerk zu haben. Da gibt es die PCs und Notebooks, diverse Handys, den Server, das NAS und mindesten drei Raspis. So kommt es, dass man ab und zu die Adressen dieser Geräte abfragen möchte, um zum Beispiel per Remote Desktop oder ssh auf einen Raspberry Pi zuzugreifen.

GNU/Linux stellt dafür verschiedene Werkzeuge bereit; entweder als GUI-Anwendung oder als Kommandozeilen-Tool. Wer auf Fenster steht, kann z.B. Zenmap oder Angry IP verwenden, wobei Zenmap eine grafische Oberfläche ist um das CLI-Tool nmap zu bedienen. Der Network Mapper nmap ist eine Empfehlung für die Kommandozeile, so wie auch arp aus dem net-tools Paket. Als Beispiel für den oben genannten Zweck möchte ich nmap verwenden. Das Programm ist in den meisten Repositories enthalten und lässt sich z.B. bei Debian-basierten Distributionen mittels sudo apt install nmap installieren. Das Werkzeug leistet wesentlich mehr, als ich hier vorstellen möchte. Ziel ist es, eine möglichst einfache und gut lesbare Liste der Geräte im Netzwerk zu erhalten.

Der Befehl um das eigene Netzwerk zu scannen lautet wie folgt: (das Ergebnis steht direkt darunter)

nmap -sn 192.168.1.0/24

Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-19 16:01 CET
Nmap scan report for 192.168.1.1
Host is up (0.0058s latency).
Nmap scan report for DiskStation (192.168.1.3)
Host is up (0.0073s latency).
Nmap scan report for devolo-860 (192.168.1.97)
Host is up (0.0079s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 3.11 seconds

Tatsächlich sind in diesem Beispiel nur zwei Geräte enthalten, eine NAS (Synology Diskstation) und ein Powerline-Adapter (Devolo). Was man auch sofort erkennt, ist die Unübersichtlichkeit der Ausgabe. Doch das lässt sich ändern; zwar nicht mit dem nmap-Befehl selbst, wohl aber durch eine Pipe-Kette:

nmap -sn 192.168.1.0/24 | grep 'for' | tail -n +2 | awk '{print substr($0,22)}'

DiskStation (192.168.1.3)
devolo-860 (192.168.1.97)

Was passiert hier? Die Ausgabe von nmap wird an grep weitergereicht, um nur die Zeilen zu wählen, die das Wort 'for' enthalten. Im nächsten Schritt entfernt tail die erste Zeile der Auswahl (Nmap scan report for 192.168.1.1) weil diese uninteressant ist. Im letzten Schritt entfernt awk die ersten 22 Zeichen jeder Zeile (Nmap scan report for).

Da niemand diesen langen Befehl behalten oder eingeben möchte, kann man in der Datei .bashrc einen Alias anlegen. Damit das im Alias funktioniert, muss das $ bei awk escaped werden: \$

alias scanip="nmap -sn 192.168.1.0/24 | grep 'for' | tail -n +2 | awk '{print substr(\$0,22)}'"

Fortan kann die Geräteliste durch die Eingaben von scanip angezeigt werden. Der Alias-Name kann selbstverständlich frei gewählt werden, z.B.: alias zeigemirallegeraete=...