IP herausbekommen
-
Hi Dr. C++, du hast folgendes geschrieben:
connectedSocket = accept(acceptSocket, (SOCKADDR *) &saddr, NULL);Der dritte Parameter darf allerdings nicht NULL sein, sondern muss der Größe des Structs SOCKADDR entsprechen, wobei ein Pointer erwartet wird:
int length = sizeof(SOCKADDR); connectedSocket = accept(acceptSocket, (SOCKADDR *) &saddr, &length);Gruß
chan95
-
Dr. C++ schrieb:
Wie ermittelt man seine Internet-IP, wenn man hinter einem Router steht oder in einem Netzwerk ist? Es gibt zwar sehr viele Beispiele dazu, da bekomme ich aber immer nur meine LAN-IP.
Einfach folgende Seite aufrufen: http://checkip.dyndns.org/ und IP-Adresse extrahieren.
mfg.
-
Hier ein Beispielcode:
#include <iostream> #include <string> #include <winsock2.h> std::string GetInternetIP() { WSADATA w; WSAStartup(MAKEWORD(2,2), &w); SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); const std::string Adresse = "checkip.dyndns.org"; sockaddr_in clientService; clientService.sin_family = AF_INET; clientService.sin_port = htons(80); hostent *phe = gethostbyname(Adresse.c_str()); clientService.sin_addr.s_addr = *(reinterpret_cast<u_long*>(phe->h_addr_list[0])); connect(s, reinterpret_cast<SOCKADDR*>(&clientService), sizeof(clientService)); std::string SendData = "GET / HTTP/1.1\n"; SendData += "Host: " + Adresse + "\n\n"; send(s, SendData.c_str(), SendData.size(), 0); char Buffer[256]; recv(s, Buffer, sizeof(Buffer), 0); closesocket(s); std::string Temp(Buffer); const std::string Suchtext = "Current IP Address: "; int Anfang = Temp.find(Suchtext, 0); Anfang += Suchtext.size(); int Ende = Temp.find("<", Anfang); return Temp.substr(Anfang, Ende - Anfang); } int main() { try { std::cout << GetInternetIP(); } catch(...) { std::cout << "Fehlgeschlagen!" << std::endl; } return 0; }mfg.
-
Schlecht! Du rufst nur einmal recv auf. Da kann auch nur ein Byte empfangen worden sein.
-
-------- schrieb:
Schlecht! Du rufst nur einmal recv auf. Da kann auch nur ein Byte empfangen worden sein.
Dann poste du doch was besseres!
-
Geile Einstellung -.-
-
-------- schrieb:
Geile Einstellung -.-
Erklär mir mal warum das schlecht sein sollte, nur einmal recv aufzurufen? Da ich ja als Buffersize 256 übergeben, empfängt der doch eigentlich genug oder?
mfg.
-
@--------: lol, das ich nicht lache. Deine Einstellung darf ich dann ja wohl auch als "genial" Bezeichnen. Der Code von joomoo geht doch. Dann kommst du an und sagst da kann das und das nicht gehen, was ja scheinbar nicht stimmt, es geht ja...
kleiner Tip: sag den Leuten einfach mal a) was sie falsch machen b) wie man es besser machen kann und c) fang nicht gleich mit einer Bewertung ihres Könnens den ersten Satz in deinem Post an.
-
ok ich halte mich raus ihr seid über mein niveau drüber.
-
Der Code von joomoo funktioniert nur wenn man Glück hat. Er ist nicht zuverlässig. Es werden maximal sizeof(Buffer) Bytes gelesen. Aber recv kann auch zurückkehren und zum Beispiel nur 1 Byte im Puffer abgelegt haben.
-
Das ist zum überprüfen der IP auch nicht notwendig, wenn der Text der Seite zu lang wird, funktioniert das herrausfiltern der IP sowieso nicht mehr. Die Aufgabe ist es ja nicht einen Browser zu programmieren, sondern nur ein Funktion der die Ausgabe genau dieser Seite filtert...
-
Am besten mit WinInet API arbeiten.
-
IP schrieb:
Am besten mit WinInet API arbeiten.
Warum?
-
Damit man das HTTP nicht selbst implementieren muss.

-
IP schrieb:
Damit man das HTTP nicht selbst implementieren muss.

hui... ja, das war ja auch voll schwer. Ich würde eher sagen: Weil man dann das HTTP selber implementieren DARF. So lernste mehr und dein Code wird leichter auf andere System portierbar.
mfg.
-
Das was du gemacht hast war nicht die Implementierung des HTTP sondern einfach nur Schrott.
-
IP schrieb:
Das was du gemacht hast war nicht die Implementierung des HTTP sondern einfach nur Schrott.
Aber es funktioniert.
mfg.
-
Es ist einfach nur undefiniert was da passiert.
-
IP schrieb:
Es ist einfach nur undefiniert was da passiert.
Wieso? Bei mir passiert jedesmal exakt dasselbe: Ich bekomme die IP!
mfg.
-
Ich glaube, das von joomoo ist die einzige Möglichkeit für den Server die IP des Clienten heraus zu bekommen.
Also, thx @ all.
