ScanIP verbessert

Mo, 21. März 2022, Ralf Hersel

Vor einem Jahr habe ich in einem Artikel beschrieben, wie man die Geräte im heimischen Netzwerk scannt und übersichtlich darstellt. Die Ausgabe listet alle Geräte mit Namen und IP-Adresse (siehe Screenshot). Nun hat Leser Dieter eine verbesserte Version vorgeschlagen, die einfacher und schneller ist.

Sorry für den grossen Screenshot, aber der Frosch musste mit darauf.

Hier seht ihr den Code der alten und neuen Version im Vergleich:

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

Wie die alte Version funktioniert, könnt ihr hier nachlesen. Dieters verbesserte Variante macht sich die Such- und Ausgabe-Funktionen von awk zu Nutzen. Awk ist eine Skriptsprache zur Auswertung von Textdaten und erhielt ihren Namen 1977 von den drei Entwicklern: Alfred Aho, Peter Weinberger, und Brian Kernighan. Das Werkzeug ist Bestandteil jeder GNU/Linux-Distribution und muss daher nicht extra installiert werden. Wer eine einfache Einführung in awk sucht, wird zum Beispiel hier fündig.

Die Originalausgaben von 'nmap' sieht so aus:

ralf@ralf-laptop:~$ nmap -sn 192.168.1.0/24
Starting Nmap 7.80 ( https://nmap.org ) at 2022-03-20 17:51 CET
Nmap scan report for _gateway (192.168.1.1)
Host is up (0.014s latency).
Nmap scan report for raspi4 (192.168.1.49)
Host is up (0.0049s latency).
Nmap scan report for ralf-laptop (192.168.1.64)
Host is up (0.00019s latency).
Nmap scan report for devolo-860 (192.168.1.97)
Host is up (0.050s latency).
Nmap scan report for raspi3 (192.168.1.174)
Host is up (0.054s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 2.47 seconds

Diese Ausgabe ist unübersichtlich und enthält viele uninteressante Details. Was wir sehen wollen, sind die Zeilen in denen das Wort 'for' vorkommt, und zwar nur den Text, der hinter dem 'for' steht. Die alte Version verwendet 'grep' für die Suche, 'tail' für die Ausgabe der relevanten Zeilen und 'awk', um die ersten 22 Zeichen einer Zeile zu unterdrücken.

Wie Dieters Code zeigt, kann die Ausgabe von 'nmap' komplett mit 'awk' bearbeitet werden. Awk sucht nach den Zeilen, in denen 'for' erscheint, und gibt dann den Text ab Position 22 aus. Im Unterschied zur alten Variante gibt die neue Version auch die IP des Routers aus, was vorher bewusst unterdrückt wurde (tail -n +2). Da in Dieters Version nur zwei Befehle (statt vier) zum Einsatz kommen, läuft sie ein wenig schneller.

Herzlichen Dank an Dieter, für diese kleine aber feine Verbesserung.

Nachtrag:

Nach dem Erscheinen des Artikels, lieferte Dieter eine Erweiterung des Befehls nach, mit dem unerwünschte Zeilen am Anfang ausgeblendet werden können:

nmap -sn 192.168.1.0/24 | awk '/for/ {if (NR > 2) print substr($0,22)}'

Tags

Version, Awk, Ausgabe, Zeilen, Dieter, Zeile, Nmap