如何用delphi获取公网ip(100分)

  • 主题发起人 主题发起人 acheqi
  • 开始时间 开始时间
A

acheqi

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,请大家帮忙
 
uses
System,Winsock,Math;

function GetIP:string;
var
WSAData:TWSAData;
HostName:array[0..MAX_COMPUTERNAME_LENGTH] of Char;
HostEnt:PHostEnt;
LastIP:PInAddr;
IPList:^PInAddr;
begin
result:='';
if 0=WSAStartup(MAKEWORD(1,1), WSAData) then
try
if 0=gethostname(HostName, MAX_COMPUTERNAME_LENGTH+1) then
begin
HostEnt:=gethostbyname(HostName);
if HostEnt<>nil then
begin
IPList:=Pointer(HostEnt^.h_addr_list);
repeat
LastIP:=IPList^;
INC(IPList);
until IPList^=nil;
if LastIP<>nil then
result:=inet_ntoa(LastIP^);
end;
end;
finally
WSACleanup;
end;
end;
 
这个获取的是内网的呀,但是,我想获取,我们上网时的那个ip,请问怎么做呀
 
这个问题以前提过,似乎没有好的办法,其实你在共网的IP就是你的代理服务器的地址。
 
那代理服务器的地质又怎么获得呢
 
用idhttp 控件,好像是这个名子
加上此控件后使用 idhttp.remoteip就可以得到了
这是delphi6自带的
 
楼上的控件是哪家的,IdHTTP并没有remoteip这个成员!
 
来自:乡村月光, 时间:2003-12-6 20:10:00, ID:2338494
楼上的控件是哪家的,IdHTTP并没有remoteip这个成员!

呵呵!
第三方控件呀!
 
用API能实现吗?
 
这段代码是我在网上找得,
很好用。
uses winsock;
procedure TForm1.FormCreate(Sender: TObject);
type
TaPInAddr = Array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: Array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
IP: String;
begin
Screen.Cursor := crHourGlass;
try
WSAStartup($101, GInitData);
IP:='0.0.0.0';
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then
begin
label2.Caption:=ip;
exit;
end;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^ <> nil do
begin
IP := inet_ntoa(pptr^^);
Inc(I);
end;
WSACleanup;
//如果上网则为上网ip否则是网卡ip
label2.Caption:=ip;
finally
Screen.Cursor := crDefault;
end;
end;
 
在网上有些网站可以查IP地址,是怎样实现的啦?
请大哥们指教小弟一二!
 
来自:jewen, 时间:2003-12-8 22:41:00, ID:2342252
在网上有些网站可以查IP地址,是怎样实现的啦?
请大哥们指教小弟一二!

asp或者php什么的可以做这个的
 
to acheqi:
谢谢!不过ASP或者PHP不是很懂。
在网上查本机的IP地址和用楼上编程方式查出的IP地址是不同的,
这间有什么玄机?

 
zywcd的方法还是只能取内网IP。
 
zywcd的方法很好,我是过,加
 
听说IP-guard 是利用邮件通知局网内上网的公网IP,各位,
有知情者吗
 
怎么这么多人问这个问题,今天这是第三个了。
写段代码访问 http://checkip.dyndns.org/ 就可以了
 
后退
顶部