IP-Adresse auslesen
- 
					
					
					
					
 Hallo zusammen, wie bekomme ich unter Linux die IP-Adresse über eine API raus? 
 Die HW-Adresse habe ich mittlerweile.
 Allerdigs verstehe ich einfach nciht, wie ich die IP abfragen kann.Hat da jemand enen funktionierenden Code-Schnippsel? Für die HW Adresse mache ich das wie folgt: void print_networking() { int sock_fd = socket( AF_INET , SOCK_DGRAM , 0 ); if( sock_fd == -1 ) { printf("Error: creating socket.\n"); } struct ifreq ifr; strcpy( ifr.ifr_name , "eth0" ); if( ioctl( sock_fd , SIOCGIFHWADDR , &ifr ) == -1 ) { printf("problems with ioctl.\n"); } printf("Netzwerk wlan0: %s\n" , ether_ntoa( (struct ether_addr*) ifr.ifr_hwaddr.sa_data ) ); close( sock_fd ); }Nur wie gehts für die IP-Adresse? Google konnte mir da auch nicht wirklich helfen.. Wie bekomme ich eigentlich einen Überblick über verfügbare APIs unter Linux? MSDN for Linux? :p 
 
- 
					
					
					
					
 z.B. http://checkip.dyndns.org/ benutzen. 
 
- 
					
					
					
					
 Wenn du die interne willst, dann z.B. so: void print_networking() { int sock_fd = socket( AF_INET , SOCK_DGRAM , 0 ); if( sock_fd == -1 ) { printf("Error: creating socket.\n"); } struct ifreq ifr; strcpy( ifr.ifr_name , "eth1" ); if( ioctl( sock_fd , SIOCGIFADDR , &ifr ) == -1 ) { printf("problems with ioctl.\n"); } printf("Netzwerk eth1: %s\n" , inet_ntoa( ((struct sockaddr_in *) (&ifr.ifr_addr))->sin_addr )); close( sock_fd ); }Steht doch sogar schon hier, wo dein Beispiel ja anscheinend auch herkommt. 
 
- 
					
					
					
					
 
 
- 
					
					
					
					
 Edwart schrieb: Wie bekomme ich eigentlich einen Überblick über verfügbare APIs unter Linux? MSDN for Linux? :p Mittels manpages und glibc Doku. 
 
- 
					
					
					
					
 Ja, das Beispiel lief bei mir leider nicht, daher habe ich mir mittlerweile eine alternative gesucht. 
 Die Infos über Netzwerk-Devices liegt ja auch in systemdateien, die während der laufzeit aktualisiert werden.diese lese ich einfach aus  
 sehr unsauber, aber besser las nüchts.
 
- 
					
					
					
					
 welche headerdateien brauch man alles dafür um das kompilieren zu können? 
 
- 
					
					
					
					
 Das oben geschriebene und auch das, was im FAQ-Beitrag steht, klappt aber natürlich nur bei ziemlich einfach konfigurierten Systemen. Zum einen kann es mehrere Interfaces mit unterschiedlichen IPs geben, zum anderen kann ein einzelnes Interface (auch ohne alias-Interfaces) mehr als eine IP-Adresse besitzen. Mehrere Interfaces werden immerhin beim FAQ-Eintrag berücksichtigt, aber mehrere IP-Adressen auf einem Interface nicht. Das ist auch keine theoretische Spielerei, für redundante Server wird das auch so eingesetzt, da kann ein einzelner Server mehr als eine internet-gültige IP besitzen. Im Terminal "ip address show" eingeben zeigt die aktuell vorhandenen IP-Adressen an, auch mehrere pro Interface. Fazit ist normalerweise, dass man als Client einfach direkt sendet, was man möchte, ohne vorher die eigene IP-Adresse abzufragen. Wenn man die eigene IP-Adresse braucht, muss man die Gegenstelle fragen, was die sieht. Ein Server bindet oft an 0.0.0.0 und damit an alle lokalen IP-Adressen gleichzeitig, oder er ist konfigurierbar und es ist die Aufgabe des Users die IP-Adresse für bind() korrekt einzutragen.