ScanIP verbessert

  Ralf Hersel   Lesezeit: 3 Minuten  🗪 5 Kommentare

Alle Geräte im Netzwerk mit Namen und IP anzeigen.

scanip verbessert

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

dan
Geschrieben von dan am 21. März 2022 um 10:33

ARP-Scan oder netdiscover?

Jens T.
Geschrieben von Jens T. am 21. März 2022 um 14:27

Ein bisschen simplifiziert kann das nmap von Haus aus schon mit der Option grepable output: nmap -sn -oG - 192.168.1.0/24. Das spart noch ein bisschen Rechenzeit und der Output kann, bei Bedarf, ohne weiteres in einer Pipe weiterverwendet werden.

Sven
Geschrieben von Sven am 23. März 2022 um 13:34

Immer wieder frage ich mich, warum die "-oN/-oX/-oS/-oG/-oA"-Optionen (Output Normal, Xml, Scriptkiddie, Grepable, Allformats) von nmap scheinbar so wenigen bekannt ist?

# nmap -oG - -sn 192.168.1.0/24

gibt nur noch je eine zusätzliche Kopf- und Fußzeile aus - und die Option ist ja genau für "grep" gemacht worden ;)

tuxflo
Geschrieben von tuxflo am 23. März 2022 um 21:56

Was ich noch cool finden würde, wäre wenn eine Art Loading Indicator (Spinner oder ähnliches) angezeigt werden würde, während der nmap Befehl läuft. Nur damit man sehen kann, dass der Scan noch im Gange ist.

Sven
Geschrieben von Sven am 24. März 2022 um 13:03

Ich frage mich ja immer wieder, warum die Parameter "-oN/-oX/-oS/-oG/-oA" von nmap so wenigen bekannt sind? Damit hat man die Möglichkeit, die Ausgabe auf "Normal/Xml/Scriptkiddie/Grepable/Allformats" umzustellen... ergo reicht eigentlich ein

nmap -oG - -sn 192.168.1.0/24

vollkommen aus - ok, es gibt je eine Kopf- und Fußzeile dazu ;)

PS: Ich hatte den Kommentar gestern schon mal geschrieben, aber er tauchte hier nicht auf... 🤔