求获取IP的方法 ( 积分: 100 )

  • 主题发起人 主题发起人 wjshh
  • 开始时间 开始时间
W

wjshh

Unregistered / Unconfirmed
GUEST, unregistred user!
求能在局域网中获取外网IP的方法
 
通过网站获取公网IP的小程序,使用IdHTTP。(http://www.2ccc.com/article.asp?articleid=4076 这里下载的)
主要代码:


function GetLocalIP(FIdHTTP : TIdHTTP;DealType : TDealType) : string;
var
IPSTR , IPSTR1 : String;
iPos : Integer;
begin
Result := '';
Case DealType Of
GuoNei : Begin
IPSTR := FIdHTTP.Get('http://www.ip138.com') ;
iPos := Pos('您的IP地址是',IPSTR);
if iPos <> 0 then
IPSTR1 := Copy(IPSTR,iPos+12,20);
iPos := Pos(':',IPSTR1);
if iPos <> 0 Then
Result := Trim(Copy(IPSTR1,iPos+2,15));
End;
GuoWai : Begin
IPSTR := FIdHTTP.Get('http://vbnet.mvps.org/resources/tools/getpublicip.shtml');
iPos := Pos('var',IPSTR);
if iPos <> 0 Then
IPSTR1 := Trim(Copy(IPSTR,iPos+3,30));
iPos := Pos('ip',IPSTR1);
if iPos <> 0 Then
Result := Trim(Copy(IPSTR1,iPos + 6,15));
End;
End;
end;
 
不行嗎?
 
应该可以吧
 
我试了,有时不能获取,而且时间很慢。
有其它的吗?
 
这个没有简便的办法,因为局域网网关可能是一台pc机,也可能是一个路由器或者类似的设备。因此只能首先连接外网,然后通过外网来返回本地的公网ip。
有如下方法可供参考:
1。申请动态域名,然后通过dns即可获取ip,您可以看看花生壳的网站,好像有嵌入式客户端可用。
2。访问某个能显示ip的网站,这个方法不稳定,说不定什么时候人家改了网页版面了这个方法就失灵了。
3。你自己设置公网服务器,比如租用虚拟主机,然后写一个返回ip的asp页面,在程序内调用此页面获取公网ip。
 
这是DFW老前辈留的,你看看,我用这个挺好

uses winsock;


function GetDynIP(HostName: string = ''): string;
type
TaPInAddr = Array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
IP: string;
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
IP := '0.0.0.0';
if HostName = '' then
GetHostName(Buffer, SizeOf(Buffer))
else
StrPCopy(Buffer, HostName);
phe := GetHostByName(buffer);
if phe = nil then
begin
Result := IP;
Exit;
end;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^<> nil do
begin
IP := inet_ntoa(pptr^^);
Inc(I);
end;
WSACleanup;
Result := IP; //如果上网则为上网ip否则是网卡ip
end;
 
哥们,你这个是获取本机网卡ip或者是猫拨号时获得的ip的,楼主是要获取网关的公网ip,不一样的。
 
后退
顶部