Archive for the '网络编程' Category

zt:端口映射的原理(子网机器上远程在出口计算机映射一个端口,以使子网外IP能访问子网机器)

星期五, 六月 2nd, 2006

用过SendLink就知道~能够检测出子网的出口计算机IP,在子网上的机器通过端口映射在局域网出口计算机上打开一个端口,并侦听。

1、搜索UPnP设备:UDP   往   239.255.255.250:1900   广播一个”搜索”的HTTP包(格式当然有规定,就不贴上来了,以免啰嗦,查一下资料即可),如果收到返回,分析一下,会得到包含类似   http://192.168.0.1:2869/upnphost/udhisapi.dll?content=uuid:fb6bbc52-aa87-4939-a4fa-289d3bbccc61   的数据

2、得到UPnP设备属性和描述信息:

TCP   往前面得到的ip/port发一个GET的HTTP包,也就是类似在浏览器中访问http://192.168.0.1:2869/,分析返回的数据,即可得到UPnP的一些描述信息,和   controlurl。

3、对UPnP设备发送控制命令,查询属性。(比如下达增删端口映射的命令)

TCP   往   controlurl   发送一定规格的指令数据即可,比如增加端口是   AddPortMapping,再填一些参数就可以,删除端口是   DeletePortMapping。也可以往这个   controlurl   查询一下,看是否支持一些指令操作,和查询一些属性等等

这些操作都是用TCP或UDP发送HTTP包,包内是XML格式的数据,返回的也是标准的HTTP返回,表明成功失败等等。
UPnP只不过是TCP/UDP、XML、HTTP,还有其它通用协议的综合运用,并没有创新什么新协议。端口映射,只是UPnP一个小的功能模块,严格来说,不算是UPnP特别指定要的,只不过是网关设备支持UPnP操作,提供了增删端口映射的功能调用而已。
UPnP的一个目标是各种设备能自动的互相发现、查询、访问和操作(比如数码相机、电脑、打印机、数码像框都能自动的互相发现和访问对方的相片,等等),具体我也没深究,有兴趣的话查一下资料。

总结一下,打开网关的映射端口有二种方法:第一,使用微软的接口IStaticPortMappingCollection,在MSDN中的地址为:
ms-help://MS.MSDNQTR.2005APR.1033/ics/ics/istaticportmappingcollection.htm

其二,如上所述,通过TCP/UDP等协议与网关交互!
有如下资源可用:
http://www.upnp.org/resources/specifications.asp
http://www.upnp.org/events/default.asp