-----唉!!!难道高手们都不愿答还是不上DFW---------------没有做不到的,只有想不到的-----------高手们都进来,希望大家多费心,好

这个问题可以归结为求第一个路由器的ip地址,ip数据包的TTL每经过一个路由器就会减1,减到0的时候路由器将“ICMP 已超时”的消息发回,由此可以取得路由器的IP地址,我们指定TTL=1,就可以取得第一个路由器的IP地址,这个在Delphi 6里很简单,用Indy Clients页的IdIcmpClient,给host属性随便指定一个网站,在OnReply里写一句:
label1.Caption := AReplyStatus.FromIpAddress;
form上放一个label和一个button,再来:
procedure TForm1.Button1Click(Sender: TObject);
begin
idicmpclient1.TTL := 1;
idicmpclient1.Ping;
end;
OK了。
给分,呵呵
 
to libin06:
看到你的帖子我向见到了2004年的第一轮曙光,我要的不是路由器的IP,要的是ADSL占用的外网IP,也就是外网进路由器的IP,在奋斗一下分就是你的了!
 
如果这也算的话,那也太......呵呵.......
 
搞错了,呵呵。
我没用过adsl路由方式,这个不是路由的问题,是NAT的问题,这个我也没什么好办法,包头部的地址不能用,要想得到地址必须使它出现在数据段里,这个好像访问网页比较好,找到一个www.whatismyip.com,感觉网站名字挺不错的,呵呵。

另:“我想那个[1]不是混来的”,你没看专家分是0吗,这个就是不知道怎么混来的,我也不清楚,呵呵,其实我现在很少上大富翁,很久以来都没上过了,昨天是来转转
 
to libin06 ;
你别谦虚,专家分2230,比我强就是我的老师,访问网页前面已讲过不稳定,你看看还有别的办法吗
 
to crazycock:
你的折中的办法我想后期维护肯定很难,要收集新的IP.ASP地址来退换老的"IP.ASP列表",几套软件还可以,假如有一千套,一万套呢,请问crazycock你还有别的好一点办法吗?再说一说
 
INDY的DEMO包里好象有这方面的东西。不过我不会这个。
 
看看网络编程就可以解决了
 
to webskywang:
就是手中没有资料,你有吗,能帮忙搞定吗?
 
如果router支持UPnP,可以使用WANPPPConnection:1服务中的状态变量ExternalIPAddress读取外部IP地址,可参考UPnP标准http://www.upnp.org/standardizeddcps/igd.asp
 
终于又等到了一个高手
TO kyq:
我刚看了,E文太菜,能帮写一下吗?又不能请你喝茶,只有以分相谢,不过你也不在意分,救救我--------饭碗呀------惭愧-------但我一直在努力
 
如果Router支持UPnP,建立一个TCP连接到router的80端口(如果仍是默认设置的话),发送以下数据:
POST /upnp/service/WANPPPConnection HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:WANPPPConnection:1#GetExternalIPAddress"
CONTENT-TYPE: text/xml ; charset="utf-8"
Content-Length: 298

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<u:GetExternalIPAddress
xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1" />
</s:Body>
</s:Envelope>

那么如果正常的话,Router返回的数据:
HTTP/1.0 200 OK
Connection: close
Server: UPnP/1.0 UPnP-Device-Host/1.0
Content-length: 403
Content-Type: text/xml; charset="utf-8"

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetExternalIPAddressResponse xmlns:m="urn:schemas-upnp-org:service:WANPPPConnection:1"><NewExternalIPAddress>xxx.xxx.xxx.xxx</NewExternalIPAddress></m:GetExternalIPAddressResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

其中<NewExternalIPAddress>xxx.xxx.xxx.xxx</NewExternalIPAddress>中的数据就是外部地址。
 
to wuxin
为了研究你的问题我把我的Adsl也改成路由方式的了,通过配置Modem的时候可以看到当前占用的外网IP的。((我想肯定可以通过什么方法直接取得Adsl Modem占用的外网IP地址,但还没有找到方法。((呵呵说了一堆费话,我是装上了花生壳,然后通过域名得到当前的IP的
 
tracert www.sohu.com 显示的路由器的IP不知是内网的还是外网的?
我没有这个环境,无法测试!
 
网上有你的问题的答案,
我见过
 
to :vc_delphi
我搜过没找到能告诉地址吗
我正在按kyq的方案试写,我也好参考参考,
看一下思路
 
tracert www.sohu.com -h 2 -w 1
经试验,显示的第二个IP地址的前三个数字与外网IP相同。
所以并不能达到正确显示外网IP的目的。
 
华旗的产品-爱国者MP3很烂,才用20天,耳机就脱胶,还说是外伤,不给任何维修等,哪个龟儿子再买爱国者MP3,甚至华旗的东西

如果不属实,天洙地灭
 
to kyq :
我实在太苯了,还没有摆平,你可否用DELPHI写一个例子,我知道实在太为难你了,但不得已,饭碗呀,望在万忙之中满足在下的不情之请,恭待你的回音。
wupannet@163.com
wuxin
 

Similar threads

D
回复
0
查看
921
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部