Mit Delphi Internet-ip rausbekommen
lima-city → Forum → Programmiersprachen → Delphi & Pascal
all
benutzung
buffer
call
dependent
developer
exit
firewall
info
interface
ketchup
list
nil
not
po
portable
result
socket
window
zeile
-
Hallo,
Wie kann ich mit Delphi meine internet ip rausbekommen?
Ich habe mir schon überlegt das sich das mit einer PHP seite kopple ,welche die internet-ip angibt(-> http://ketchupfleck.lima-city.de/ip.php ).
1) Aber wie kann ich diese erste zeile auslesen??
2) lässt sich das nicht einfacher realisiern??
Info: Ich brauche die internet-ip um eine Verbindung mittels Winsocks herzustellen.
mfg Ketchup -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also: Hab mal auf CodeGear (Borland Developer Network) nachgeschaut:
The following code is not dependent on Windows 2000 or Active directory, will
list all IP addresses of the interfaces of the (IPV4) host it runs on, and
is portable to Linux as it uses standard socket calls:
uses WinSock;
....
{ lists all IP-address assigned to this host }
const
MAXHOSTNAMELEN = 256;
var
HostName: string;
pHE: PHostEnt;
pAddr: ^PChar;
begin
{ get hostname }
SetLength(HostName, MAXHOSTNAMELEN);
GetHostName(Pointer(HostName), MAXHOSTNAMELEN);
SetLength(HostName, StrLen(Pointer(HostName)));
{ host name }
ShowMessage(HostName);
{ get list of ip adresses }
pHE := GetHostByName(Pointer(HostName));
{ host name again}
ShowMessage(pHE.h_name);
{ lenght of an IP address, 4 = IPV4 }
ShowMessage(IntToStr(pHE.h_length));
{ list all adresses }
pAddr := Pointer(pHE.h_addr);
while PChar(pAddr^) <> Nil do
begin
ShowMessage(inet_ntoa(in_addr(pAddr^)));
inc(pAddr);
end;
end;
Und ein anderes Code Snippet:
Sollte lt. Author auch hinter einer Firewall funktionieren:
function GetWanIP(var WANIP: string): Boolean;
var
InitData : TWSADATA;
SockDes : TSocket;
SockAddr : TSockAddr;
NumRead,
TotalRead,
Size,
IPPos,
Len : Integer;
SktSet : TFDSet;
TV : TimeVal;
Buffer : string;
begin
Result := False;;
if WSAStartup($0101, InitData) <> 0 then
Exit;
try
try
SockDes := Socket(AF_INET, SOCK_STREAM, 6);
if SockDes = INVALID_SOCKET then
Exit;
SockAddr.sin_family := AF_INET;
SockAddr.sin_port := htons(80);
SockAddr.sin_addr.s_addr := inet_addr(PChar(GetIPAddress(
'www.whatismyip.com')));
if Connect(SockDes, SockAddr, SizeOf(SockAddr)) = SOCKET_ERROR then
Exit;
Buffer := 'GET / HTTP/1.0'#13#10'Host: www.whatismyip.com'#13#10#13#10;
if Send(SockDes, Buffer[1], Length(Buffer), 0) = SOCKET_ERROR then
Exit;
SetLength(WANIP, 10240);
TotalRead := 0;
FD_ZERO(SktSet);
FD_SET(SockDes, SktSet);
TV.tv_sec := 10;
TV.tv_usec := 0;
Size := SizeOf(SockAddr);
while Select(0, @SktSet, nil, nil, @TV) > 0 do
begin
NumRead := RecvFrom(SockDes, WANIP[1], Length(WANIP), 0,
SockAddr, Size);
if NumRead <= 0 then
Break;
SetLength(WANIP, 10240 + NumRead);
Inc(TotalRead, NumRead);
end;
SetLength(WANIP, TotalRead);
if TotalRead <> 0 then
begin
try
Len := (Pos('</TITLE>', WANIP)) - (Pos('<TITLE>', WANIP) + 24);
WANIP := Copy(WANIP, Pos('<TITLE>', WANIP) + 24, Len);
SetLength(Buffer, Len);
except
on E: Exception do
Exit;
end;
if WANIP <> '' then
Result := True;
end;
finally
CloseSocket(SockDes);
end;
finally
WSACleanup;
end;
end;
Benutzung in Delphi z.B:
if GetWanIP(MyIP) then
ShowMessage(MyIP);
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage