关于 TIdIPWatch 控件,获取本机IP问题!~~~~~~~~~~~~~~~~~~~~~~~~~

woyun01 2010-03-14 06:43:37
TIdIPWatch控件可以很简单的获取本机IP
IdIPWatch1.LocalIP 就是本机IP了
但是获取的不正确

本机IP如下

Ethernet adapter 本地连接:

Connection-specific DNS Suffix . :
Autoconfiguration IP Address. . . : 169.254.112.198
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :

PPP adapter 宽带连接:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 123.123.123.123
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 123.123.123.123


使用 IdIPWatch1.LocalIP 总是获得169.254.112.198 , 但是我想获得的是 宽带连接IP 也就是 外网IP.

请教这该怎么做?
...全文
365 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Harryfin 2010-03-15
  • 打赏
  • 举报
回复
疑问,楼上拿的是外网IP么?
SQLDebug_Fan 2010-03-14
  • 打赏
  • 举报
回复

Function LocalIP: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
result:='';
wsastartup($101,ginitdata);
try
gethostname(buffer,sizeof(buffer));
phe:=gethostbyname(buffer);
if phe<>nil then
begin
pptr:=papinaddr(phe^.h_addr_list);
I:=0;
while pptr^[i]<>nil do
begin
result:=strpas(inet_ntoa(pptr^[i]^));
inc(i);
end;
end;
finally
wsacleanup;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=localIP; //取出IP
end;
woyun01 2010-03-14
  • 打赏
  • 举报
回复
没有别的办法了???????????
Harryfin 2010-03-14
  • 打赏
  • 举报
回复
有个取巧的方法就是去那些有显示外网IP的网站截取HTML来分析,不过最好找个稳定点的。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧