IP-Adresse
-
Hi ich suche eine Funktion mit der ich etwas anpingen kann und dadurch die IP-Adresse rauskriege (von mir aus auch ohne ping, Hauptsache IP-Adresse)...
wenn man unter cmd zb "ping www.xyz.de" ausührt, dann kriegt man die IP_Adresse von www.xyz.de, wie kann ich das in nem Programm rauskriegen?
-
schau mal auf http://www.c-worker.ch/
-
bool HosttoIP(char *pszHost, char *pszIP) { struct hostent *h = gethostbyname(pszHost); if(h) { lstrcpy(pszIP, inet_ntoa(*(in_addr*)h->h_addr_list[0])); return true; } return false; }
MfG
-
hmm...diese Funktion liefert immer false zurück
-
WSAStartup gemacht?
-
Njed!
muß ich nur WSAStartup machen oder noch was?
Ich bin ich Sachen Netzwerk n Noob
-
Ok, habs jetzt hingekriegt...danke für die Hilfe
-
hi,
"Njed!"
Ti gawarisch pa-russki ?lw
-
Für jeden WSAStartup()-Aufruf sollte man auch WSACleanup() aufrufen.
-
Achtung! gethostbyname ist zwar schön einfach, aber laut platform sdk als deprecated eingestuft.
Man soll besser getaddrinfo verwenden. Das ist auch nicht viel komplizierter:int ResolveToIP(const char* szServerName, int iPort, int& IP) { IP = 0; // Die IP bekommen wir mit Hilfe der Funktion getaddrinfo. addrinfo* pAddrInfo = new addrinfo; ZeroMemory(pAddrInfo, sizeof(addrinfo)); // getaddrinfo erwartet die Portnummer als ASCII-String char szPort[16]; itoa(iPort, szPort, 10); int iResult = getaddrinfo(szServerName, szPort, NULL, &pAddrInfo); if(iResult != 0) { delete pAddrInfo; return iResult; } // Die IP als DWORD auslesen: IP = reinterpret_cast<sockaddr_in*>(pAddrInfo->ai_addr)->sin_addr.s_addr; delete pAddrInfo; return 0; }
[ Dieser Beitrag wurde am 30.11.2002 um 21:26 Uhr von cd9000 editiert. ]
-
warum legst du pAddrInfo auf dem heap an? hat das irgendeinen sinn? das wär doch ideal auf'm stack.
-
Naja. Das wäre auch keine große Ersparnis:
int ResolveToIP(const char* szServerName, int iPort, int& IP) { IP = 0; // Die IP bekommen wir mit Hilfe der Funktion getaddrinfo. addrinfo addrinfo_auf_dem_stack; addrinfo* pAddrInfo = &addrinfo_auf_dem_stack; ZeroMemory(pAddrInfo, sizeof(addrinfo)); // getaddrinfo erwartet die Portnummer als ASCII-String char szPort[16]; itoa(iPort, szPort, 10); int iResult = getaddrinfo(szServerName, szPort, NULL, &pAddrInfo); if(iResult != 0) return iResult; // Die IP als DWORD auslesen: IP = reinterpret_cast<sockaddr_in*>(pAddrInfo->ai_addr)->sin_addr.s_addr; return 0; }
getaddrinfo erwartet einen Zeiger auf einen Zeiger. Und man kann nicht einfach &&addrinfo_auf_dem_stack schreiben.
-
ok, danke! aber ich denke mal da gibt's auch eine möglichkeit das direkt zu machen. &&addrinfo_auf_dem_stack schreiben
vielleicht mit klammern und sowas
-
Das geht ziemlich sicher nicht. Und zwar weil du damit die Adresse einer lokalen Variablen bekommen würdest. Das geht aber IMHO nicht.
-
Ich hab das zwar noch nie verwendet, aber trotzdem: Wenn ich in die Doku schaue, dann steht da, daß die Funktion selbst allokiert. Richtig müßte es dann eigentlich so aussehen:
addrinfo* pAddrInfo = NULL; getaddrinfo(szServerName, szPort, NULL, &pAddrInfo); freeaddrinfo(pAddrInfo);
Oder sehe ich das falsch?
-
getaddrinfo
-----------Windows NT/2000/XP: Included in Windows XP and Windows .NET Server.
Windows 95/98/Me: Unsupported.Also da würd ich noch ein paar Jahre warten, bis man die Funktion wirklich einsetzen sollte, bis 95 und Co endlich vom Fenster sind.
-
-King-:
Nein. Du hast Recht.Unsupported:
das wundert mich aber.
Bei mir läuft das tadellos, und ich verwende Windows 98.[ Dieser Beitrag wurde am 30.11.2002 um 21:53 Uhr von cd9000 editiert. ]
-
-King-:
Nein. Du hast Recht.Wie immer!
-
vielleicht hast du dir zufällig die DLL eingefangen wo das drin ist
-
<Immer das...>:
Mir scheint du bist nicht sehr häufig hier.Vielleicht hab ich die DLL bei der Installation vom Internet Explorer erhalten. Der installiert immer so viel...
[ Dieser Beitrag wurde am 30.11.2002 um 22:00 Uhr von cd9000 editiert. ]