//试试返回本机 Ip :uses WinSock ;function GetIpAddressLIP: string; type TaPInAddr = array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe: PHostEnt; pptr: PaPInAddr; Buffer: array[0..63] of char; I: Integer; GInitData: TWSADATA; begin try WSAStartup($101, GInitData); Result := ''; GetHostName(Buffer, SizeOf(Buffer)); phe := GetHostByName(buffer); if phe = nil then Exit; pptr := PaPInAddr(Phe^.h_addr_list); I := 0; while pptr^[I] <> nil do begin result := StrPas(inet_ntoa(pptr^[I]^)); Inc(I); end; WSACleanup; except on Exception do begin Beep; end; end; end;
Function GetComputerIP:String; Var HostName: ARRAY[1..255] OF Char; WSData: TWSAData; MyHost: PHostEnt; BEGIN Result:='0.0.0.0'; WSAstartup(2,WSData); gethostname(@HostName[1],SizeOf(HostName)); MyHost:=GetHostByName(@HostName[1]); IF MyHost<>NIL THEN Result:=Format('%d.%d.%d.%d',[Ord(MyHost.h_addr^[0]),Ord(MyHost.h_addr^[1]),Ord(MyHost.h_addr^[2]),Ord(MyHost.h_addr^[3])]);
// 从网页取得 procedure TForm1.Button1Click(Sender: TObject); var StrAddr,StrBody, StrIP,StrSearch : String; Ts : TStrings ; i : Integer ; begin Ts := TStringList.Create ; StrAddr := 'http://www.iligia.com/dtc/index.asp'; StrSearch := '本机地址: '; NMHTTP1.Get(strAddr); StrBody := NMHTTP1.Body; Ts.Text := StrBody ; for i := 0 to Ts.Count - 1 do begin if Pos(StrSearch,Ts.Strings[i]) > 0 then Break ; end ; StrIP := Copy(Ts.Strings[i],Pos('mono',Ts.Strings[i]) + 6,16) ; if Pos('>',StrIP) > 0 then Delete(StrIp,Pos('>',StrIp),1) ; // 删除无效字符,还有其他 ShowMessage(StrIP) ; end ;
但,如果你通过代理服务器上网,你得到的也是一个局域网内IP地址,你对外是:(服务器地址):(端口号).
procedure tform1.button1click(.....)
begin
showmessage('你的主机IP地址是'+idipwatch1.localip);
end;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of char;
I: Integer;
GInitData: TWSADATA;
begin
try
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do
begin
result := StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
except
on Exception do
begin
Beep;
end;
end;
end;
或者上到某些论坛那里会显示你的IP地址,如果你是通过代理服务器上网,当然就只能看到代理服务器的IP地址啦。
http://www.lucn.net/bbs/ip.php
这是水晶动网论坛的ip查询地址,很准确,速度也很快,但是别干“坏事”,人家知道你从哪来,去看看啦!
Var HostName: ARRAY[1..255] OF Char;
WSData: TWSAData;
MyHost: PHostEnt;
BEGIN
Result:='0.0.0.0';
WSAstartup(2,WSData);
gethostname(@HostName[1],SizeOf(HostName));
MyHost:=GetHostByName(@HostName[1]);
IF MyHost<>NIL THEN
Result:=Format('%d.%d.%d.%d',[Ord(MyHost.h_addr^[0]),Ord(MyHost.h_addr^[1]),Ord(MyHost.h_addr^[2]),Ord(MyHost.h_addr^[3])]);
var
StrAddr,StrBody, StrIP,StrSearch : String;
Ts : TStrings ;
i : Integer ;
begin
Ts := TStringList.Create ;
StrAddr := 'http://www.iligia.com/dtc/index.asp';
StrSearch := '本机地址: ';
NMHTTP1.Get(strAddr);
StrBody := NMHTTP1.Body;
Ts.Text := StrBody ;
for i := 0 to Ts.Count - 1 do
begin
if Pos(StrSearch,Ts.Strings[i]) > 0 then
Break ;
end ;
StrIP := Copy(Ts.Strings[i],Pos('mono',Ts.Strings[i]) + 6,16) ;
if Pos('>',StrIP) > 0 then
Delete(StrIp,Pos('>',StrIp),1) ; // 删除无效字符,还有其他
ShowMessage(StrIP) ;
end ;
另外你如果用代理服务器就用ioconfig,netshe 都可以得到
但是你如果用ADSL,而且是用路由器连接的话那么以上方法不能得到!
你用服务器连就可以得到
所以一办是你安装一个可以看IP的QQ,把自己添加为自己的好友
或者到论坛上去看也可以得到的拉