Eigene IP auslesen
-
Hallo
ich suche eine Möglichkeit, meine eigene IP auszulesen. Praktisch die, die man mit ipconfig herausbekommt. Bisher hat nur das formatierte auslesen von 'ipconfig >> ip.txt' zum Erfolg geführt, wovon ich aber dringend weg möchte.
-
meiner meinung nach kann man die ip mit gethostbyname("") rausbekommen.
-
Schon richtig, aber mit gethostbyname bekommst du ja nur die IP des übergebenen Hosts (z.B. gethostbyname("localhost") -> returnes 127.0.0.1). Wenn es aber darum geht, welche IP der Computer gerade benutzt muss meines Wissens nach eine andere Funktion her, bzw. ein anderes "Funktionsgerüst".
Schau mal bei BytesAndMore unter C++-Builder -> Netzwerk -> Die IP-Addressen des Computers auslesen:
http://www.bytesandmore.de/rad/index.htm
-
@Reyx: mit gethostbyname("") bekommt man die verwendete IP, Horst2 hat also (wieder einmal) Recht.
@Horst2: Jetzt klappt es (komischerweise). Danke!
-
Die Adresse vom localhost bekommst du nur, wenn du auch "localhost" als parameter übergibst.
Übergibst du einen leeren String, so ist der eigene Rechner gemeint.
Übergibst du einen anderen Namen, wird der Rechner im Netzwerk gesucht
-
Stimmt, hab' ich verdreht, sorry

-
Hab noch nie was mit WinSock gemacht und fand's interessant.
Hab eben ein bisschen länger gebraucht...
#include <stdio.h> #include <winsock2.h> int main(void) { WORD Version; WSADATA Data; int err; Version = MAKEWORD( 2, 2 ); err = WSAStartup(Version, &Data); if (err!=0) { printf("No suitable WinSock DLL found!\n"); return 0; } if (LOBYTE(Data.wVersion)!=2||HIBYTE(Data.wVersion)!=2) { printf("No suitable WinSock DLL found!\n"); WSACleanup( ); return 0; } char Hostname[99]; if(gethostname(Hostname, 100)!=0) { printf("Buffer too small!\n"); return 0; } hostent *Hostinfo = gethostbyname(Hostname); if(!Hostinfo) { printf("Something went wrong...\n"); return 0; } printf("Hostname: %s\n", Hostinfo->h_name); for(int i = 0; Hostinfo->h_addr_list[i]!=NULL; i++) { printf(" IP %i: %03i.%03i.%03i.%03i\n", i+1, LOBYTE(Hostinfo->h_addr_list[i][0]), LOBYTE(Hostinfo->h_addr_list[i][1]), LOBYTE(Hostinfo->h_addr_list[i][2]), LOBYTE(Hostinfo->h_addr_list[i][3])); } return 0; }Ach ja, laut M$ ist die gethostname() nicht mehr das Wahre:
Microsoft schrieb:
Note The gethostbyname function has been deprecated by the introduction of the getaddrinfo function. Developers creating Windows Sockets 2 applications are urged to use the getaddrinfo function instead of gethostbyname.
Ich hoff' dieses Post interessiert noch irgendwen!? *verzweifeltdreinschau*
-
Wieso deklarierst Du Hostname mit Länge 99 und übergibst an gethostname() eine Länge von 100...
char Hostname[99]; if(gethostname(Hostname, 100)!=0)... und nur die Prüfung auf == WSAEFAULT bedeutet evtl. zu kleiner Buffer.
Nighthero