Wie die eigene IP-Adresse herauslesen?
-
Hallo!
Gibt es einen Befehl(nicht bash-Befehl), mit dem ich die IP-Adresse eine Rechners herauslesen kann?
Ich möchte nämlich einen Socket an diese Adresse binden und dazu würde ich sie gerne stets automatisch auslesen.
-
Vor kurzem gab es einen sehr ähnlichen Thread:
http://www.c-plusplus.net/forum/p1986265#1986265Letztendlich ist es so, dass das Konzept "eigene IP-Adresse" gar nicht existiert. Ein PC hat oft mehrere IP-Adressen, sogar ein einzelnes Interface kann mehr als eine IP-Adresse besitzen. Schon eine Standardinstallation von Ubuntu legt mehr als eine "eigene IP-Adresse" an, wenn man WLAN aktiv hat und gleichzeitig das Ethernet-Kabel eingesteckt ist.
Bei einem Socket ist es aber einfach: Binde es an die Adresse 0.0.0.0, dann sorgt der Kernel dafür, dass das Socket an alle vorhandenen IP-Adressen gebunden wird.
-
Christoph schrieb:
sogar ein einzelnes Interface kann mehr als eine IP-Adresse besitzen.
Wie das? (Außer es ist natürlich ein Trunk Port.)
-
blubbi der fünzehnte schrieb:
Christoph schrieb:
sogar ein einzelnes Interface kann mehr als eine IP-Adresse besitzen.
Wie das?
Dokumentiert ist das in der manpage ip(8).
Der Befehl, einem existierenden Interface eine weitere IP-Adresse zu geben, sieht so aus:
# ip addr add dev eth0 local 192.168.0.2/24 broadcast 192.168.0.255Das fügt dem Interface eth0 die Adresse 192.168.0.2 hinzu mit passender Subnetz-Maske und Broadcast-Adresse.
In ifconfig wird die Adresse 192.168.0.2 allerdings nicht auftauchen, weil ifconfig pro Interface nur die erste IP-Adresse anzeigt. Um alle konfigurierten IP-Adressen zu sehen, gibt es den Befehl "ip addr show".
-
Christoph schrieb:
Vor kurzem gab es einen sehr ähnlichen Thread:
http://www.c-plusplus.net/forum/p1986265#1986265Letztendlich ist es so, dass das Konzept "eigene IP-Adresse" gar nicht existiert. Ein PC hat oft mehrere IP-Adressen, sogar ein einzelnes Interface kann mehr als eine IP-Adresse besitzen. Schon eine Standardinstallation von Ubuntu legt mehr als eine "eigene IP-Adresse" an, wenn man WLAN aktiv hat und gleichzeitig das Ethernet-Kabel eingesteckt ist.
Bei einem Socket ist es aber einfach: Binde es an die Adresse 0.0.0.0, dann sorgt der Kernel dafür, dass das Socket an alle vorhandenen IP-Adressen gebunden wird.
Die Adresse 0.0.0.0 bedeutet nicht "alle vorhandenen IP-Adressen" sondern nur die IPv4-Adressen. So langsam müssen wir uns daran gewöhnen, dass es neben IPv4 noch was anderes gibt. Für wirklich alle Adressen gibt es die Konstante INADDR_ANY.
Noch besser ist, wenn Du getaddrinfo verwendest und gegen alle Adressen bindest, die Du bekommst. In dem Zusammenhang sollte noch die Socket-Option IPV6_V6ONLY erwähnt werden. Für IPv6-Adressen solltest Du diese Option setzen. Sonst wird auch auf IPv4 gelauscht und das Binden auf 0.0.0.0 schlägt dann fehl (oder auf IPv6, wenn 0.0.0.0 schon dran war).
Im übrigen kannst Du mit dem Kommando "ip addr add" weitere IP-Adressen einem Netzwerkinterface zuordnen.