BenBE's humble thoughts Thoughts the world doesn't need yet …

24.03.2011

Spielen mit IPv6

Filed under: Server — Schlagwörter: , , — BenBE @ 13:49:37

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /var/www/virtual/benny-baumann.de/blog/htdocs/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /var/www/virtual/benny-baumann.de/blog/htdocs/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Möchte man gerne wissen, welche Rechner es in seinem lokalen Netz gibt, musste man hierfür früher noch einen Portscanner einsetzen und aufwändig danach suchen lassen. Dank IPv6 geht das aber inzwischen sehr einfach, indem man die Rechner einfach fragt:

ping6 -c 2 -I eth0 ff02::1 | grep 64 | cut '-d ' -f 4 | sort -g | uniq | sed -e 's/:$//g'

Der erste Teil ist hierbei der wichtigste, da er die ganze Arbeit macht. Alles andere ist lediglich, damit’s schön aussieht. Also schauen wir einmal im Detail auf den Befehl:

Wie zu vermuten, sendet ping6 genau zwei Pings in das Netzwerk. Da wir – und hier liegt der Trick – aber auf einer Multicast-Adresse pingen, müssen wir explizit angeben, auf welchem Interface wir diesen senden möchten. Soweit noch recht einfach. Nun könnte man aber meinen, warum steht da -c 2, wenn doch ein Ping auch ausreicht? Nunja: ping6 würde dann nach dem ersten empfangenen Host bereits aufhören und uns die weiteren nicht mehr liefern. Also einfach noch nen zweiten senden und die Duplikate mit einsammeln; die gehören nämlich auch zur Antwort …

Ungünstigerweise enthält die Ausgabe des Ping-Befehls an verschiedenen Stellen die IP-Adresse, u.a. auch da, wo wir sie nicht brauchen. Also mit grep uns alle unnötigen Fundstellen wegschneiden. Enthält die IPv6-Link-Local-Adresse zufällig auch die Zeichenfolge „64“ kann man im grep auch einfach nach ttl= suchen.

Nun ein wenig Magie: Wir wollen in unserer Liste nur die eigentlichen IPs stehen haben. Da diese Doppelpunkte auch selber enthalten, wäre es zu aufwändig nach diesen zu teilen; stattdessen teilen wir nach Leerzeichen, da deren Anzahl konstant ist. Dies hat jedoch den Nachteil, dass wir den abschließenden Doppelpunkt hinter der IP noch filtern müssen. Dazu aber gleich mehr.

Denn erstmal sortieren wir unsere so erhaltene Liste alphabetisch und numerisch,, was mit sort recht einfach gemacht ist. Anschließend filtern wir jegliche Duplikate und erhalten schon eine recht ansehnliche Liste, die wir im letzten Schritt nur noch von den Doppelpunkten befreien müssen.

Und hier kommt uns der Stream-Editor sed ganz gelegen, da dies mit Hilfe eines kurzen regulären Ausdrucks erledigt werden kann. Hierzu brauch man einfach nur nach Doppelpunkten am Zeilenende suchen und diese entfernen. Global angewendet und unsere Liste von Computern im Netzwerk ist fertig.

Flattr this!

Powered by WordPress