Mittwoch, 17. September 2014

Haiku - externe IP- Adresse ermitteln

Ab und an kann es vorkommen das man seine externe IP- Adresse, also die mit welcher man sich im Internet bewegt, herausbekommen muss/will. Um dies zu bewerkstelligen kann man sich z.B. einer der folgenden URL's bedienen und sich diese im Browser anzeigen lassen. Beispiele für solche Seiten sind:

  • http://www.wieistmeineip.de/
  • http://www.whatismyip.com/
  • http://centralops.net/co/
  • http://www.speedtest.net/

Hier kann man sich nun, aus den mehr oder weniger bunten Seiten, seine IP- Adresse heraussuchen. Dies ist im Prinzip auch schon alles. Doch was macht man wenn man diese IP- Adresse weiterverarbeiten will?

Ganz einfach, man bedient sich einiger weniger Systemfunktionen, welche man von der Kommandozeile aus aufrufen kann. Dazu bedient man sich zuerst des Befehls "wget" welcher mit ein paar Parametern verfeinert wird. Im folgenden Bespiel holt man sich eine der erforderlichen Seiten per "wget" und speichert diese temporär auf der Festplatte.


wget -o log -O dummy http://centralops.net/co/body


Mit dem Parameter "-o" wird eine Ausgabe der verschiedensten Meldungen am Bildschirm unterdrückt, diese wandern stattdessen in die Datei "log" (sehr hilfreich wenn man das Ganze in einem Script verwenden will).

Der Parameter "-O" erzeugt eine Datei mit dem viel sagenden Namen "dummy" in welcher der HTML- Code der angeforderten Seite gespeichert wird.

Zum Schluss muss natürlich noch die URL der entsprechenden Seite angegeben werden. In diesem Beispiel verwenden wir die Seite von "centralops".

Nachdem wir nun den HTML- Code temporär gespeichert haben, können wir uns diesen, z.B. mit "cat", ansehen. Mit der Eingabe von ...

cat dummy

wird der gesamte Inhalt der Datei am Bildschirm ausgegeben. In diesem, mehr oder weniger, grossem Wust an HTML- Code verbirgt sich irgendwo die Information auf die wir es abgesehen haben, aber wo?


An dieser Stelle hilft uns, wieder einmal, der befehl "grep" weiter. Mit diesem können wir unsere Suche nach der gewünschten Information schon einmal erheblich einschränken. Im angegebenen Beispiel, also der Seite von "centralops", steht vor der gesuchten Information z.B. ein "addr=". Dieser String taucht sonst nirgendwo weiter auf. Also machen wir uns dies zu nutze und filtern die Ausgabe mit "grep" und dem gesuchten String.


cat dummy | grep "addr="


In der Ausgabe können wir nun schon die gewünschte Information, relativ deutlich, erkennen. Aber das ist uns natürlich noch nicht genug. Wir müssen das Ergebnis noch weiter filtern um ausschließlich die benötigte IP- Adresse zu bekommen. Dies können wir mit dem Befehl "awk" bewerkstelligen und ergänzen die Kommando Zeile um folgende Befehle:


cat dummy | grep "addr=" | awk '{ print $4 }' | awk -F">" '{ print $1 }' | awk -F"=" '{ print $6 }' | grep -oE "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"


Das Ergebnis dieser, doch recht langen, Befehlskette ist die gesuchte Information und nur diese. Fragt mich bitte nicht wie das mit dem "Pattern" funktioniert, das habe ich selbst nur "gegoogled". Aber es funktioniert. Man muß das Rad ja nicht immer wieder neu erfinden.

Verwendet man eine andere Web- Seite, müssen die Befehle etwas angepasst werden. Man muss sich also die Seite wenigstens einmal als HTML- Code ansehen um Anhaltspunkte für das Filtern zu finden. Ich habe Euch noch zwei Bespiele mit angehängt, die ihren Dienst, zumindest bei mir, einwandfrei verrichten.

Es kann natürlich auch sein, dass eine Web- Seite die Informationen nicht so einfach preis gibt, das das Ganze z.B. mit Java- Script oder ähnlichen Sprachen umgesetzt wurde, oder man die richtige URL nicht finden kann. Das ist aber nicht weiter dramatisch, denn es gibt genügend Alternativen.


Beispiel 1 - "centralops.net"

#!/bin/sh

echo external ip address via "centralops.net"
echo --------------------------------------

# get centralops website
wget -o log -O dummy http://centralops.net/co/body

# grep information
cat dummy | grep "addr=" | awk '{ print $4 }' | awk -F">" '{ print $1 }' | awk -F"=" '{ print $6 }' | grep -oE "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25 [0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"

# delete temporary files
rm dummy
rm log


Beispiel 2 - "wieistmeineip.de"

#!/bin/sh

echo external ip address via "wieistmeineip.de"
echo ----------------------------------------

# get wieistmeineip.de website
wget -o log -O dummy http://www.wieistmeineip.de

# grep information
cat dummy | grep -A 2 "Ihre IP-Adresse lautet:" | awk '{ print $2 }' | awk -F">" '{ print $3 }' | grep -oE "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0- 5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"

# delete temporary files
rm dummy
rm log


Getestet wurde dies alles mit Haiku - 47865 und natürlich einer funktionierenden Internet- Verbindung. Bleibt mir an dieser Stelle noch Euch viel Spaß beim Experimentieren zu wünschen.

Bis bald.


Keine Kommentare:

Kommentar veröffentlichen