gethostbyname()
-
Hi!
Ich will mit deht hostbyname() erreichen, dass ich die zu einem Hostnamen gehörge IPv4 - Addresse herausfinden.
So weit so gut: jetzt hab ich mir den Hostnamen Geholt (muss der Benutzer eingeben.. is ja klar :D) und die Funktion gethostbyname() aufegrufen. Dann bekomme ich auch einen Pointer auf meine hostent - Struktur zurück. Wie bekomme ich jetzt aber die IP?
Ich hab schon versucht den Wert von h_addr_list[0] in ein Fenster zu schreiben, da bekomm ich aber nur den Hoatnamen mit ein paar anderen Zeichen vorne dran raus.
Kann es sein, dass diese "Zeichen" die IP als integer sind? Wenn ja, wie bekomme ich die von dem Hostnamen weg und die Punkte rein?
Wenn nein würde es mich sehr freuen, wenn mir jemand sagen könnte, wie ich an die IP komme!Schonmal Danke für die Hilfe von euch!
MFG
Xe
-
Probier mal sowas...
char ip[20]; wsprintf(ip,"%u.%u.%u.%u",hostent->h_addr_list[0][0],hostent->h_addr_list[0][1],hostent->h_addr_list[0][2],hostent->h_addr_list[0][3]); MessageBox(0,ip,"Die IP",0);
-
... oder schau mal in die FAQ
-
Hi!
Vielen Dank für die Hilfe!
Leider funktionierts nicht immer und manchmal verursacht das auch Abstürze des programms..!
-
und die FAQ haben auch nicht weitergeholfen?
- http://www.c-plusplus.net/forum/viewtopic.php?t=39385
- http://www.c-plusplus.net/forum/viewtopic.php?p=284696Also z.B. so:
lstrcpy(pszIP, inet_ntoa(*(in_addr*)m_hostent->h_addr_list[m_iLocalIPPos]));Wenn es einen Absturz gab: bist du sicher, dass der Aufruf von hostbyname erfolgreich war?
-
Hi!
Ja, ich bin mir sicher, dass der Aufruf erfolgreich war... Ich bekomme auch immer was zurück, diese "IPs" sind aber meist viel größer, als sie sein sollten.
Da kommt zum Besipiel sowas raus:
4294967257.72.4294967235.42 -> Angeblich ist das die IP des web.de - Servers! ...MFG
Xe
-
Das sieht nach einer Bereichsüberschreitung aus - hast du es mal mit %d (anstelle von %u) wie in dem einen FAQ Beitrag versucht?!
-
Hi!
Ja, habe ich... in dem Fall kommt dabei -39.72.-61.42 raus. Ich habe auch mal das Programm ping verwendet, und da web.de eingegeben. Das spuckt die IP 217.72.195.42 aus. Diese ist auch korrekt. Wenn ich die in den Inetexplorer eingebe komme ich auch auf die web.de Startseite.
MFG
Xe2X
-
Hallo,
das sieht doch schon gut aus, wenn man sich die negativen Werte ansieht, erkennt man, daß es sich um die Zweier-Komplemente der richtigen Werte handelt, so daß der Fehler leicht erkennbar ist. Deshalb geht es so:
char ip[20]; wsprintf(ip,"%d.%d.%d.%d",(unsigned char)hostent->h_addr_list[0][0],(unsigned char)hostent->h_addr_list[0][1],(unsigned char)hostent->h_addr_list[0][2],(unsigned char)hostent->h_addr_list[0][3]); MessageBox(0,ip,"Die IP",0);MfG
-
Hi!
Vielen Dank! Es funktioniert jetzt!
MFG