- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UPNP 端口映射全过程
UPNP 的全称是 Universal plug-and-play( 通用即插即用 ).UPnP 是针对智能家电、无线设备以及各种
外观尺寸的个人电脑的普遍对等 (peer-to-peer )网络连接而设计的一种架构。 它旨在为家庭、 小型企业、
公共场所中或连接到互联网的 ad-hoc 网或未管理网络提供易于使用、 灵活且基于标准的连接。 ( 引自这里 .)
我们这里用到的自动端口映射只是 UPNP 的一个小应用。按照 UPNP 的相关规范, UPNP 网络的第0
步是寻址(获得一个 IP 地址,在我要解决的问题中这不是一个问题。 )
第1步是发现,控制点在网上搜索感兴趣的设备,而设备向网络中的控制点宣告其服务。对于自动端
口映射来说就是发现带 UPNP 功能的路由器。
发现这个过程主要有两步。第一,使用数据报套接字向 50:1900 ,发送一条多播请求,
格式如下
M-SEARCH * HTTP/1.1
HOST: 50:1900
MAN:ssdp:discover
MX:3
ST:UPnP:rootdevice
这个多播请求的含义如下: M-SEARCH SSDP 协议定义的搜索请求方法。 HOST 必须是这个多播地
址。 MAN 的值也必须是 ssdp:discover 不可少了双引号。 MX 的含义是最长等待时间,可以自己设置。
ST 表示 search target 搜索目标。我们在这里用找根设备。 另外在编程中我们要在每一行后面加上 rn 表
示换行。 (详见源码 UPNPNAT .discovery()).
第二步, 如果你的网络存在一个 UPNP 设备的话, 为了被找到, 设备必须向发送查找请求的多播通道
的源 IP 地址与端口发送响应信息。所以你可以从 50:1900 这个地址接收到响应消息。
类似下面的消息。
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=100
DATE: Sun, 15 Jan 2006 06:51:02 GMT
EXT:
LOCATION: :1900/igd.xml
SERVER: TP-LINK Wireless Router WR541G/5, UPnP/1.0
ST: upnp:rootdevice
USN:uuid:upnp-InternetGatewayDevice-192168141678900001::upnp:rootdevice
接下来我们要从里面获得我们要的消息。首先,我们必须找到 200 OK , 说明没有错误发生,否则
一切免谈。接着,我们要找到 LOCATION 项,获得设备描述 URL 。(程序中的处理归根到底就是一个子字
符的查找。)
到这里,我们的第一步 “发现 ”完成。
第2步是描述。在第1步中我们往往能获得一个设备的描述 URL, 在第2步中我们要通过一个 URL ,下
载一个 XML 文件。并从中找到有关设备的类型,服务类型,控制 URL, 事件触发 URL 等。
我们同样分两步进行,首先下载设备描述文件。 (请看源码中 UPNPNAT::get_description() 函数)
1. 解析描述文件的 URL ,获得主机 (host) 、端口 (port) 、路径 (path).(parseUrl 函数)
2. 连接到 host:port (tcp_connect 函数 )
3. 构造类似
GET path HTTP/1.1
文档评论(0)