如何得到ADSL的动态IP地址 ( 积分: 200 )

  • 主题发起人 主题发起人 liu77924
  • 开始时间 开始时间
L

liu77924

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使用动态库得到ADSL的动态IP地址
 
如何使用动态库得到ADSL的动态IP地址
 
简单,发Email到xiaoshixiong@hotmail.com,我发一个Demo给你。
 
没有的话用QQ给我留言:393983394
 
uses 加入winsock单元.

function LocalIP:string;//获得本机的ip地址
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
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^ <> nil do BEGIN
result:=StrPas(inet_ntoa(pptr^^));
Inc(I);
END;
WSACleanup;
END;
 
如果通过路由的方式连接的话,楼上的绝对不行。
可考虑通过用程序访问其它网站的取IP的小程序取得
getip.asp之类的
 
通过路由的IP确实在本机取不到,同意楼上的说法
 
好像有个网站,给它发个邮件,然后它会把你的动态IP地址发mail给你,顺便看到的,找找吧[:D]
 
就是吗,我就在想,这两百分真的这么容易拿呀。

我前年就在想这个问题,到现在还没解决。

到现在还是用fei_l的方法实现的。
 
哎,我想很久啦.没办法啊
 
我有办法,不用外面网站的支持,那个不稳定

只要能上internet就行,不过现在太忙了,大家多凑些分我就写code,不要砸我,200分的诱惑太小了,上次有人出2000分,我花了一个晚上研究出结果,人家最后关帖子了,:-S

基本思路,例如tracer协议,嘿嘿,知道的都知道了,不知道的凑分给我要code吧

那个谁谁谁,你们捡砖头干什么?
 
unit Ughcx;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,winsock, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


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;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=GetDynIP('');
end;

end.
 
楼上的和我的差不多啦,按他们(非楼主)的说法比如说在局域网内通过路由器上网,而外网ip地址是在路由器上的,所以这些代码都不行的.

to 盘古*伙计 tracert协议未必行的通哦,我在家里通过宽带路由器上网
C:/Documents and Settings/Administrator>tracert www.google.com

Tracing route to www.google.akadns.net [66.102.9.104]
over a maximum of 30 hops:
1 * * * Request timed out.
2 * * * Request timed out.
3 * * * Request timed out.
.........................................
你如果能够做的出的话,我愿意出1000分,不过货到付款哦
 
怎么会? tracert是标准协议啊

C:/>tracert -d -h 4 -w 10000 sina.com

Tracing route to sina.com [66.77.9.79]
over a maximum of 4 hops:

1 <10 ms <10 ms <10 ms 192.168.0.1
2 15 ms <10 ms 16 ms 10.99.16.1
3 16 ms <10 ms <10 ms 66.32.10.34
4 15 ms 16 ms 16 ms 66.32.8.228

Trace complete.

C:>
感兴趣的弟兄们不妨贴一下你们的测试结果。

实际上还有其他的方法,用自己的ip和其他网站建立一个连接,在收到的数据包中有自己真实internet IP的信息,不过那个太麻烦了,我在我能测试的环境中都用的tracert,真的很奇怪wrl_001的结果。
 
怎么都没人发表意见了啊?
盘古*伙计呢?分数太低没兴趣研究?
 
如果是拨号上网
function RasEnumConnections( var lprasconn : RASCONN ;var lpcb: DWORD;
var lpcConnections : DWORD) : DWORD; stdcall external 'Rasapi32.dll'name 'RasEnumConnectionsA';

//获取指定活动的拨号连接的动态IP信息
//指定活动连接的句柄 //RAS连接类型 //接收动态IP信息的缓冲区 //接收缓冲区的大小
function RasGetProjectionInfo(hrasconn : HRasConn;rasprojection : DWORD;
var lpprojection : TRASPPPIP;var lpcb : DWord) : DWORD;stdcall external'Rasapi32.dll' name 'RasGetProjectionInfoA';
用这两个函数就可以了
如果是猫硬拨号,就只有两个程序,由别人发给你了
 
我的测试结果和wrl_001一样,呵呵。

我还换了好几个域名试了。

我也给一千分。
 
我也和wrl_001一样
 
盘古*伙计 有没有看贴啊,现在分数够多了吧?
环境:windows2k server,双网卡,一卡连接ADSL猫,一卡连接公司内部局域网交换机,安装了WinGate,测

试结果如下:
C:/Documents and Settings/Administrator>tracert www.google.com

Tracing route to www.google.akadns.net [216.239.63.104]
over a maximum of 30 hops:

1 * * * Request timed out.
2 * * * Request timed out.
3 50 ms 40 ms 40 ms 61.131.9.177
4 41 ms 40 ms 40 ms 61.154.8.49
5 40 ms 50 ms 40 ms 61.154.8.114
6 60 ms 51 ms 50 ms 202.97.40.85
7 160 ms * * ^C


环境:Windows2k pro,通过192.168.0.1上网
C:/Documents and Settings/Administrator>tracert www.google.com

Tracing route to www.google.akadns.net [216.239.63.104]
over a maximum of 30 hops:

1 <10 ms <10 ms <10 ms SCITECH [192.168.0.1]
2 * * * Request timed out.
3 * * * Request timed out.
4 40 ms 40 ms 50 ms 61.131.9.177
5 40 ms 40 ms 50 ms 61.154.8.49
6 40 ms 40 ms 50 ms 61.154.8.114
7 50 ms 61 ms 60 ms 202.97.40.85
8 150 ms 160 ms 150 ms 202.97.33.138
9 471 ms 470 ms 481 ms 202.97.51.162
10 460 ms 521 ms 481 ms core1-0-1-0.lax.net.google.com [198.32.146.46]
11 461 ms 451 ms 450 ms 64.233.175.133
12 450 ms 461 ms 471 ms 64.233.175.89
13 460 ms 481 ms 491 ms 216.239.49.170
14 481 ms 471 ms 480 ms 216.239.49.194
15 * 481 ms 481 ms 216.239.63.104

Trace complete.

环境:winxp sp2,通过192.168.0.1上网
C:/Documents and Settings/Administrator>tracert www.google.com

Tracing route to www.google.akadns.net [216.239.63.104]
over a maximum of 30 hops:

1 <1 ms <1 ms <1 ms 192.168.0.1
2 * * * Request timed out.
3 * * * Request timed out.
4 44 ms 44 ms 44 ms 61.131.9.177
5 44 ms 44 ms 43 ms 61.154.8.49
6 43 ms 44 ms 44 ms 61.154.8.114
7 60 ms 58 ms 57 ms 202.97.40.85
8 154 ms 154 ms * 202.97.33.138
9 475 ms 475 ms 476 ms 202.97.51.162
10 * 477 ms 506 ms core1-0-1-0.lax.net.google.com [198.32.146.46]
11 483 ms 483 ms 482 ms 64.233.175.133
12 483 ms 484 ms 482 ms 66.249.94.27
13 482 ms 480 ms 482 ms 216.239.49.66
14 484 ms 485 ms 484 ms 216.239.63.104

Trace complete.
 
后退
顶部