UPNP端口映射全过程Word版.doc

上传人:rrsccc 文档编号:9424125 上传时间:2021-02-25 格式:DOC 页数:4 大小:21KB
返回 下载 相关 举报
UPNP端口映射全过程Word版.doc_第1页
第1页 / 共4页
UPNP端口映射全过程Word版.doc_第2页
第2页 / 共4页
UPNP端口映射全过程Word版.doc_第3页
第3页 / 共4页
UPNP端口映射全过程Word版.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《UPNP端口映射全过程Word版.doc》由会员分享,可在线阅读,更多相关《UPNP端口映射全过程Word版.doc(4页珍藏版)》请在三一文库上搜索。

1、传播优秀Word版文档 ,希望对您有帮助,可双击去除!UPNP端口映射全过程传播优秀Word版文档 ,希望对您有帮助,可双击去除!UPNP的全称是 Universal plug-and-play( 通用即插即用).UPnP 是针对智能家电、无线设备以及各种外观尺寸的个人电脑的普遍对等(peer-to-peer)网络连接而设计的一种架构。它旨在为家庭、小型企业、公共场所中或连接到互联网的ad-hoc 网或未管理网络提供易于使用、灵活且基于标准的连接。(引自这里.) 我们这里用到的自动端口映射只是UPNP的一个小应用。按照UPNP的相关规范,UPNP网络的第步是寻址(获得一个IP地址,在我要解决的

2、问题中这不是一个问题。) 第步是发现,控制点在网上搜索感兴趣的设备,而设备向网络中的控制点宣告其服务。对于自动端口映射来说就是发现带UPNP功能的路由器。发现这个过程主要有两步。第一,使用数据报套接字向239.255.255.250:1900,发送一条多播请求,格式如下 M-SEARCH * HTTP/1.1HOST: 239.255.255.250:1900MAN:ssdp:discoverMX:3ST:UPnP:rootdevice 这个多播请求的含义如下:M-SEARCH SSDP协议定义的搜索请求方法。HOST必须是这个多播地址。MAN的值也必须是ssdp:discover 不可少了双

3、引号。MX的含义是最长等待时间,可以自己设置。ST表示search target 搜索目标。我们在这里用找根设备。另外在编程中我们要在每一行后面加上rn 表示换行。(详见源码 UPNPNAT.discovery(). 第二步,如果你的网络存在一个UPNP设备的话,为了被找到,设备必须向发送查找请求的多播通道的源 IP 地址与端口发送响应信息。所以你可以从239.255.255.250:1900这个地址接收到响应消息。类似下面的消息。 HTTP/1.1 200 OKCACHE-CONTROL: max-age=100DATE: Sun, 15 Jan 2006 06:51:02 GMTEXT:L

4、OCATION: http:/192.168.14.1:1900/igd.xmlSERVER: TP-LINK Wireless Router WR541G/5, UPnP/1.0ST: upnp:rootdeviceUSN:uuid:upnp-InternetGatewayDevice-192168141678900001:upnp:rootdevice 接下来我们要从里面获得我们要的消息。首先,我们必须找到 200 OK ,说明没有错误发生,否则一切免谈。接着,我们要找到LOCATION项,获得设备描述URL。(程序中的处理归根到底就是一个子字符的查找。) 到这里,我们的第一步“发现”完成

5、。 第步是描述。在第步中我们往往能获得一个设备的描述URL,在第步中我们要通过一个URL,下载一个XML文件。并从中找到有关设备的类型,服务类型,控制URL,事件触发URL等。我们同样分两步进行,首先下载设备描述文件。(请看源码中UPNPNAT:get_description()函数) 1.解析描述文件的URL,获得主机(host)、端口(port)、路径(path).(parseUrl函数) 2.连接到host:port (tcp_connect 函数) 3.构造类似 GET path HTTP/1.1 Host: host:port 的信息(第二行下要一个空行),并通过刚才的TCP 套接字

6、,发送到路由器。(sprintf ,send 函数). 4.接收数据,我使用flag为 MSG_WAITALL的recv函数,函数一直阻塞直到数据全部读完。 数据最终保存在std:string description_info中。 我想通过浏览器下载这个文件的过程是类似的吧。 然后,解析这个XML文件。(请看源码 中UPNPNAT: parser_description()函数) 我们找到root的deviceType是urn:schemas-upnp-org:device:InternetGatewayDevice:1的device childNode ,获得这个device的deviceL

7、ist,记为A。 找到A的deviceType是urn:schemas-upnp-org:device:WANDevice:1的device childNode ,获得这个device的deviceList,记为B。 找到B的deviceType是urn:schemas-upnp-org:device:WANConnectionDevice:1的device childNode ,获得这个device的serviceList,记为C。 找到C的serviceType是urn:schemas-upnp-org:service:WANIPConnection:1 或urn:schemas-upnp

8、-org:service:WANPPPConnection:1 的servicechildNode ,记为D. 获得D的controlUrl保存在std:string control_url中。 但是这里获得control_url一般为相对URL,所以要从root下面,找到URLBase的值,(如果是空,则用describe_url的htpp:/xxx.xxx.xxx.xxx:xxxx部分代替.) 最后在相对的control_url前加上URLBasr 获得完整的control_url. 至此,第二步“获得控制URL”完成。 第步是控制。通过第步获得的控制URL,通过向其发送控制消息(同样用X

9、ML描述)来实现某些功能。对于自动端口映射来说就是查看、增加、删除等。在这里我先把各种控制信息的格式说明一下。(下面的rn都是表示换行,我输入不了反斜杠。) 增加端口映射。 AddPortMapping rn ExternalPortrn rotocolrn InternalPortnInternalClientrn 1rnortMappingDescription rn LeaseDurationrn 删除端口映射DeletePortMapping rn ExternalPortrn rotocolrn 获得端口映射信息GetGenericPortMappingEntry ortMappin

10、gIndexrn rn rn rn rn 1rn rn rn 其中斜体部分需要在编程是填入的。ExternalPort 外部端口。InternalPort内部端口。这 两者一般就填映射的端口。Protocal 填TCP或UDP。InterClient 一般就是本地IP地址。PortMappingDescription 填写端口映射的描述,比如什么程序建立了这个端口。LeaseDuration 是映射的持续时间,用0表示不永久。PortMappingIndex 是端口映射索引,路由上第几个映射。 我们再来看下面这个XML文档结构。 rn rn rn rn actionParamsrn rn rn

11、 我们在actionName 处填入AddPortMapping DeletePortMapping GetGenericPortMappingEntry。serviceType 处填入设备的服务类型。urn:schemas-upnp-org:service:WANIPConnection:1或urn:schemas-upnp-org:service:WANPPPConnection:1。actionParams 填入上面的各种控制信息。 最后在前面加上HTTP头。 POST path HTTP/1.1rn HOST: host:portrn SOAPACTION:serviceType#actionNamern CONTENT-TYPE: text/xml ; charset=utf-8rn Content-Length: contentLength rnrn path host port 意思很明显。contentLength面那个XML文档的长度。 然后连接到host:port,发送到整个信息即可完成控制 第步事件触发和第步展示在自动端口映射没用用到。有兴趣可以自己看文档。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1