Extenal IP herauslesen
-
hallo,
ich weiß, das thema wurde schon x-mal aufgewärmt, aber so richtig konnten mir die beiträge nicht weiterhelfen.
kennt jemand einen QUELLTEXT, der die i-net-ip auslesen kann ???
oder wie das funktioniert ???
lg
-
waas meinst du? wenn du hinter einem router bist, und du die ip erkenenn willst, mit der der router am internet hängt? da brauchst du hilfe von einem server im internet, der dir die adresse deiner anrage zurücksendet. direkt im programm geht das nicht. is so wie bei den dyndns programmen
-
ja, das mein ich...
gibts dazu irgendwelchen tutorials ???
-
ich kann dir sagen wie du es machen kannst, wenn du im internet einen server stehen hast, auf dem du beliebige programme starten darfst, und ports nutzen kannst. hast du das? dann is recht einfach. Falls nicht gibts noch die möglichkeit dass du dir einen mini-http-client bastelst und auf einem webserver eine php-seite installierst. ich denk mit php kann man auch die ip des anfragenden rauskriegen, aber das ist ziemlich unsicher, falls da ein proxy dazwischen ist.
Die grundsätzliche Problematik deiner Frage ist dir klar, oder? Es gibt keine einfache Funktion extIP = ZeigeIP(). Das problem ist etwas komplexer.
-
Auf einem Webserver mit PHP kopierst du eine ip.php mit folgendem Inhalt:
<?=getenv("REMOTE_ADDR")?>
Folgendes schreibst du in deinen C++-Code:
// Include #include "afxinet.h" // Deklaration der Funktion CString LeseURLQuelltext(CString strUrl); // Definition der Funktion CString LeseURLQuelltext(CString strUrl) { CString somecode, s; CInternetSession session("IP_LESEN",1,INTERNET_OPEN_TYPE_PRECONFIG); CStdioFile* pFile = NULL; try { pFile = session.OpenURL(strUrl,1,INTERNET_FLAG_TRANSFER_BINARY,NULL,0); if(pFile) { while (pFile->ReadString(somecode) != NULL) { s = s + somecode; } pFile->Close(); } else { return "Keine IP gefunden..."; } } catch (CInternetException* e) { e->Delete(); session.Close(); CloseHandle(session); } return s; }
Anschließend kannst du mit folgendem Befehl die IP auslesen:
CString strIP = LeseURLQuelltext("http://www.deinehomepage.de/ip.php");
Gruß, Ellek.
-
nur mal so als frage, weil ich wie gesagt nur linux mache:
macht die cinternetsession schon http anfragen oder is das eine allgemeine verbindung zu nem server, ohne das daten übertragen werden?
nur mit proxies hat man immernoch probleme, aber die werden sich nur vermeiden lassen, wenn man einen proprietären server selber aufsetzt.
-
Erstell mal ein neues Projekt und setz einen Haken bei Windows-Sockets. Mit dem Code hier müsste es dann klappen:
CString str_ip; AfxSocketInit(NULL); hostent *hHost = 0; char hostName[15]; gethostname(hostName, 15); hHost = gethostbyname( hostName ); str_ip = inet_ntoa( *(LPIN_ADDR)*hHost->h_addr_list ); MessageBox(str_ip);
-
THX @ Ellek, funzt wunderbar
-
ohh thx für alles...
ich werds gleich mal ausprobieren
-
Grundsätzlich geht es auch ohne Server. Man macht ein Tracert und die erste IP welche keine Interne ist sollte die externe sein.
-
Noch eine Kleinigkeit. Ich sehe bei Ellek, keine Print oder echo Ausgabe.
Die PHP Datei sollte beispielweise so aussehen:<?php $ip = getenv("REMOTE_ADDR"); print "$ip"; ?>
-
Der Syntax, den ich benutzt habe, braucht kein Echo oder Print.