IP per Kommandozeile bestimmen

Hin und wieder möchte man im ganz normalen Informatiker-Alltag seine IP-Adresse herausfinden. Tools wie ip sind unter Linux das Mittel der Wahl:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether a0:88:b4:38:49:68 brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.131/24 brd 192.168.178.255 scope global dynamic wlp3s0
       valid_lft 851135sec preferred_lft 851135sec
    inet6 2001:4dd6:c6e9:0:1860:5ddc:f9c1:92e/64 scope global dynamic noprefixroute 
       valid_lft 6824sec preferred_lft 3224sec
    inet6 fe80::97e0:6e18:ff00:4a8d/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:21:cc:5d:73:ad brd ff:ff:ff:ff:ff:ff

In diesem Beispiel erkennt man drei Interfaces, also Schnittstellen für die Kommunikation: lo, wlp3s0, enp0s25. Das erste ist das sogenannte Loopback-Interface, welches dafür genutzt wird, um Nachrichten an den Computer selbst zu senden; beispielsweise über die IP 127.0.0.1. Der zweite Name wlp3s0 steht für das WLAN-Interface und der nicht minder kryptische Name enp0s25 bezeichnet das Ethernet-Interface, also LAN (ohne wireless, also mit Kabel). Da das Notebook in diesem Moment nur per WLAN verbunden war, sieht man hier nur eine IP beim WLAN-Interface, nicht aber beim Ethernet-Interface.

Auffällig ist, dass man nur private IP-Adressen angezeigt bekommt. IPv4-Adressen des Blocks 192.168.0.0/16 (die also mit 192.168.… beginnen) sind für private Netzwerke reserviert. Darüber erreichst du solche Geräte, die sich in deinem eigenen Heimnetz befinden, wie zum Beispiel deinen Fernseher oder deinen Drucker.

Diese IP-Adressen sehen die Server von z.B. Webseiten, auf denen wir surfen, aber nicht. Sie sehen die öffentliche IP-Adresse, welcher unser Router vom Provider zugewiesen bekommt. Das liegt daran, dass der Router alle Pakete umschreibt, die private IP-Adresse durch die öffentliche ersetzt und das Paket dann erst weiter an die Server schickt. Kommen die Antwortpakete, so macht er es umgekehrt. Die Technik dahinter heißt Netzwerkadressübersetzung, bekannter unter ihrer Abkürzung NAT (Network Address Translation). Der Grund des Einsatz dieser Technik liegt vor allem im Mangel an IPv4-Adressen. Da es davon nicht so viele gibt, können nicht jedem Rechner auf der Welt eine eigene Adresse zugewiesen werden, stattdessen bekommt meist jeder Anschluss nur eine IPv4-Adresse, die sich dann die verschiedenen Netzwerkteilnehmer (Notebooks, Desktop-PCs, Smartphones…) teilen müssen.

Wie komme ich an meine öffentliche IP?

Um an deine öffentliche IPv4-Adresse zu kommen, gibt es zahlreiche Dienste wie MeineIP.de oder WieIstMeineIP.de. Ich nutze ganz gerne MonIP.org, ein Service der ganz ohne Werbung und allzu viel Text und sonst irgendetwas auskommt.

Um seine öffentliche IPv4-Adresse herauszufinden, muss man allerdings nicht unbedingt den Browser bemühen. Dafür bietet sich das Kommadozeilentool curl an.

$ curl -s http://www.monip.org/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
<title>MonIP.org v1.0</title>
<META http-equiv="Content-type" content="text/html; charset=UTF-8">
</head>
<P ALIGN="center"><FONT size=8><BR>IP : 89.0.201.10<br></font><font size=3><i>xdsl-89-0-201-10.netcologne.de</i><br></font><font size=1><br><br>Pas de proxy détecté - No Proxy detected</font></html>%

Die Option s versteckt die Progress Bar, ansonsten lädt curl einfach die Webseite herunter und gibt sie im Terminal aus. Das könnte einem natürlich schon reichen, aber die ganzen HTML-Tags stören noch. Daher gibt es noch eine kurze Erweiterung, um nur die IP-Adresse anzuzeigen. Dafür nutze ich das Programm grep.

$ curl -s http://www.monip.org/ | grep -Po '(?<=IP : )[^<]*(?=<)'                                                                                       
89.0.215.9

Wir übergeben also dem Programm grep mithilfe des senkrechten Strichs (pipe) die Ausgabe von curl. Der Parameter P gibt an, dass der Ausdruck dahinter ein Perl-Regex ist. Ein Regex ist ein Ausdruck, mit dem man Zeichenketten auf Muster durchsuchen kann (so ganz grob erklärt). Die Option o weist grep schließlich an, nur das gefundene Muster auszugeben. In unserem Regex suchen wir nach allen Zeichen, die kein < sind ([^<]) und zwischen den Ausdrücken IP : und < stehen.

Das sieht ziemlich komplex aus und ist schwer zu merken, daher schreiben wir diesen Befehl noch in unsere .bashrc. Das ist die Konfigurationsdatei der Standard-Linux-Shell. Wenn du eine andere nutzt, musst du natürlich die entsprechende Konfigurationsdatei dieser Shell verwenden. Dann solltests du aber auch wissen, wie das geht. 😉

Dazu öffnen wir die Datei .bashrc, die sich als versteckte Datei in unserem Heimverzeichnis befindet. Du kannst sie zum Beispiel mittels Vim öffnen.

$ vim ~/.bashrc

Dort fügen wir dann am Ende der Datei folgende Zeile hinzu:

alias myip="curl -s http://www.monip.org/ | grep -Po '(?<=IP : )[^<]*(?=<)'"

Von nun an können wir unsere IPv4-Adresse im Terminal ganz einfach mit dem Befehl

$ myip

anzeigen lassen. Dafür musst du vorab nur noch ein neues Terminal öffnen, damit die Änderungen an der Konfiguration wirksam werden.

Was ist mit IPv6?

Bei IPv6 haben wir im normalen Setup eines Heimnetzes dieses Problem nicht. Da es weitaus mehr IPv6-Adressen als IPv4-Adressen gibt, bekommt jedes Netzwerkgerät im Heimnetz eine eigene globale IP-Adresse, mit welcher es aus dem Netzwerk heraus erreichbar ist (eingehende Verbindungen werden aber normalerweise vom Router blockiert). In unserem Beispiel surft der Rechner also unter der IPv6-Adresse 2001:4dd6:c6e9:0:1860:5ddc:f9c1:92e. Überprüfen lässt sich das zum Beispiel hier.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.