IP herausbekommen
-
Jochen Kalmbach schrieb:
Hmmm.... und was enthält die "struct sockaddr"?
http://msdn.microsoft.com/library/en-us/winsock/winsock/accept_2.asp
http://msdn.microsoft.com/library/en-us/winsock/winsock/sockaddr_2.aspPS: Wer nicht in der Lage ist aus einer "sockaddr" eine "lesbare" IP zu machen, sollte mit dem Programmieren aufhören...
Tönst ja auch immer ganz schön rum....bist bestimmt schon Millionär...
-
Jochen Kalmbach schrieb:
Der Kommentar war nicht auf Dich bezogen... sondern auf die Behauptung, dass "accept" die Adresse nicht zurückliefert...
Das Beispiel zur Umwandlung von sockaddr in einen String ist aber hier drin:
http://msdn.microsoft.com/library/en-us/winsock/winsock/sockaddr_2.asp
(inet_ntoa)noch besser...
voll debil der Typ...
aber auch hier nur unmaßgebliche,satirische Anmerkungen ohne die Absicht der Beleidigung!
-
Ich würde getnameinfo benutzen. Das funktioniert nämlich auch mit IPv6.
-
getnameinfo liefert in den ersten der out-parameter den Namen des Computers, der Zugriff verlangt und im zweiten den Zugriffsport. Mehr aber auch nicht!
-
NI_NUMERICHOST
-
Das funktioniert auch mit NI_NUMERICHOST nicht. Aber könnte es nicht sein, dass das ganze überhaupt nicht funktionieren kann?? Bei PHP auf Websiten, funktioniert das, glaube ich, nur, weil da der Server ein Request an den Browser sendet. Dann wäre es ja nur möglich, dass der Client seine eigene IP ermittelt und an den Server sendet
.Und jetzt noch eine andere Frage und diese wurde schon sehr oft falsch beanwortet oder ich habe noch keine richtige Antwort gefunden:
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.
-
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.
