Ich geh mal davon aus, es ist die Rede von der globalen
IP Adresse, denn für die lokale gibts hier genug Sourcen.
Versuch mal whatismyipaddress.com in cmd anzupingen.
Falls das funktioniert, schreibe dir die
IP dieser Seite auf und mache folgendes:
1. telnet <
ip> 80
2. Nach Verbindungsaufbau folgendes tippen:
Code:
GET / HTTP/1.1<enter>
Host: <IrgendEineIP><enter>
<enter>
<enter>
Genau diesen Vorgang kannst du auch "automatisieren" / "programmieren".
Folgender Code dürfte solch eine Verbindung aufbauen, denn HTTP Request senden, Rückgabe-String parsen und dir deine globale
IP Adresse als String zurückgeben.
Delphi-Quellcode:
uses WinSock2;
function GetWANIP(): String;
// whatismyipaddress.com -- 140.239.191.10
var
WSAD: TWSAData;
Sock: TSocket;
Addr: TSockAddrIn;
Timo: Cardinal;
GetMsg: String;
Buffer: Array[0..$400-1] of Char;
begin
if WSAStartup( $202, WSAD ) = 0 then
begin
Sock := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if Sock <> SOCKET_ERROR then
begin
Timo := $1000;
setsockopt( Sock, SOL_SOCKET, SO_SNDTIMEO, pChar( @Timo ), SizeOf( Timo ) );
with Addr do
begin
sin_family := AF_INET;
sin_port := htons( 80 );
sin_addr.S_addr := inet_addr( '140.239.191.10' );
end;
if connect( Sock, @Addr, SizeOf( Addr ) ) = 0 then
begin
GetMsg := 'GET / HTTP/1.1'#13#10+
'Host: 140.239.191.10'#13#10#13#10;
Timo := Length( GetMsg );
if send( Sock, GetMsg[1], Timo, 0 ) = Timo then
begin
FillChar( Buffer[0], $400, 0 );
if recv( Sock, Buffer[0], $400, 0 ) > 0 then
begin
Result := Buffer;
Timo := Pos( #13#10#13#10, Result );
if Timo > 0 then
Result := Copy( Result, Timo+4, 15 );
end;
end;
end;
closesocket( Sock );
end;
WSACleanup();
end;
end;
MfG