- 浏览: 57262 次
- 性别:
- 来自: 广州
最新评论
-
Joson_Coney:
11.
while( (*strDest++ = *strSr ...
c++笔试题汇总 -
Joson_Coney:
③ 1.
int func(x)
{
int countx = ...
c++笔试题汇总 -
Joson_Coney:
链表反向1:
#include <cstdlib&g ...
c++笔试题汇总
(From: http://www.cnblogs.com/semo/archive/2008/07/21/1247950.html)
UPNP的全称是 Universal plug-and-play( 通用即插即用).UPnP 是针对智能家电、无线设备以及各种外观尺寸的个人电脑的普遍对等(peer-to-peer)网络连接而设计的一种架构。它旨在为家庭、小型企业、公共场 所中或连接到互联网的ad-hoc 网或未管理网络提供易于使用、灵活且基于标准的连接。(引自这里.)
我们这里用到的自动端口映射只是UPNP的一个小应用。按照UPNP的相关规范,UPNP网络的第0步是寻址(获得一个IP地址,在我要解决的问题中这不是一个问题。)
第1步是发现,控制点在网上搜索感兴趣的设备,而设备向网络中的控制点宣告其服务。对于自动端口映射来说就是发现带UPNP功能的路由器。
发现这个过程主要有两步。第一,使用数据报套接字向239.255.255.250:1900,发送一条多播请求,格式如下
M-SEARCH * HTTP/1.1
HOST: 239.255.255.250: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 地址与端口发送响应信息。所以你可以从239.255.255.250:1900这个地址接收到响应消息。类似下面的消息。
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=100
DATE: Sun, 15 Jan 2006 06:51:02 GMT
EXT:
LOCATION: http://192.168.14.1: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.构造类似
Host: host:port
获得D的"controlUrl"保存在std::string control_url中。
第3步是控制。通过第2步获得的控制URL,通过向其发送控制消息(同样用XML描述)来实现某些功能。对于自动端口映射来说就是查看、增加、删除等。
在这里我先把各种控制信息的格式说明一下。(下面的rn都是表示换行,我输入不了反斜杠。)
- 增加端口映射。 "AddPortMapping"
- "<NewRemoteHost></NewRemoteHost>rn" "<NewExternalPort>ExternalPort</NewExternalPort>rn" "<NewProtocol>Protocol</NewProtocol>rn" "<NewInternalPort>InternalPort</NewInternalPort>n"
"<NewInternalClient>InternalClient</NewInternalClient>rn"
"<NewEnabled>1</NewEnabled>rn"
"<NewPortMappingDescription>PortMappingDescription" "</NewPortMappingDescription>rn"
"<NewLeaseDuration>LeaseDuration</NewLeaseDuration>rn"- 删除端口映射 "DeletePortMapping"
- "<NewRemoteHost></NewRemoteHost>rn" "<NewExternalPort>ExternalPort</NewExternalPort>rn" "<NewProtocol>Protocol</NewProtocol>rn"
- 获得端口映射信息 "GetGenericPortMappingEntry"
- "<NewPortMappingIndex>PortMappingIndex</NewPortMappingIndex>" "<NewRemoteHost></NewRemoteHost>rn" "<NewExternalPort></NewExternalPort>rn" "<NewProtocol></NewProtocol>rn" "<NewInternalPort></NewInternalPort>rn" "<NewInternalClient></NewInternalClient>rn" "<NewEnabled>1</NewEnabled>rn" "<NewPortMappingDescription>" "</NewPortMappingDescription>rn" "<NewLeaseDuration></NewLeaseDuration>rn"
其中斜体部分需要在编程是填入的。ExternalPort 外部端口。InternalPort内部端口。这 两者一般就填映射的端口。Protocal 填TCP或UDP。InterClient 一般就是本地IP地址。PortMappingDescription 填写端口映射的描述,比如什么程序建立了这个端口。LeaseDuration 是映射的持续时间,用0表示不永久。PortMappingIndex 是端口映射索引,路由上第几个映射。
我们再来看下面这个XML文档结构。
"<?xml version="1.0" encoding="utf-8"?>rn"
"<s:Envelope xmlns:s="
""http://schemas.xmlsoap.org/soap/envelope/" "
"s:encodingStyle="
""http://schemas.xmlsoap.org/soap/encoding/">rn"
"<s:Body>rn"
"<u:actionName xmlns:u="serviceType">rn"
"actionParams</u:actionName>rn"
"</s:Body>rn"
"</s:Envelope>rn"
我们在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#actionName"rn"
"CONTENT-TYPE: text/xml ; charset="utf-8"rn"
"Content-Length: contentLength rnrn"
path host port 意思很明显。contentLength面那个XML文档的长度。
然后连接到host:port,发送到整个信息即可完成控制
第4步事件触发和第5步展示在自动端口映射没用用到。有兴趣可以自己看文档。
发表评论
-
【转】DNS协议报文(RFC1035)
2012-01-27 06:46 1333(转自:http://hi.baidu. ... -
【转】Protocol Header Images
2012-01-27 06:45 658http://www.troyjessup.com/heade ... -
【转】DNS协议及应用
2012-01-27 06:44 942(转自http://jwx.zgz.cn/cl/7 ... -
DNS 伺服器
2012-01-26 06:03 532DNS 伺服器http://linux.vbird.org/l ... -
HTTP Request
2012-01-26 06:02 764HTTP Request Published ... -
HTTP multipart/form-data 上传方式说明
2012-01-26 06:01 867( From: http://home.meegoq.c ... -
Struts2源码分析--请求处理
2011-12-01 10:03 649(转自:http://www.blogjava.ne ... -
java web学习笔记
2011-11-21 09:50 591Tomcat Configuration 资 ... -
[转] HTTP multipart/form-data 上传方式说明
2011-10-15 06:08 1311( From: http://home.meegoq.co ... -
Multipart uploading spec
2011-10-15 06:07 678Upload File: abc.txtContent:abc ... -
【转】Webcam Manipulation with Javascript
2011-10-15 06:04 805( From:http://blog.trumpton.org ... -
Table单元格td的position:relative的兼容性
2011-10-11 12:35 1913( From: http://www.itref.cn/a/ ... -
a lib: jXHR (JSON-P XHR)
2011-10-11 12:18 701http://mulletxhr.com/ -
Remote JSON - JSONP
2011-10-11 12:16 695( From : http://bob.pythonmac.o ... -
cross-domain资源
2011-10-07 01:32 605发现一个网站,没来得及细看,留个网址:http://www.c ... -
Single Sign-On
2011-10-07 01:25 616Single Sign-On Single sign-on ... -
HTTP multipart/form-data 上传方式说明
2011-10-07 01:23 784HTTP multipart/form-data 上传方式 ... -
【转】HTTP协议报文格式
2011-10-07 01:21 684(From: http://book.51cto.com/ar ... -
Relying on DOM readiness to invoke a function (instead of window.onload)
2011-10-06 06:45 607( From: http://www.javascriptki ... -
【转】Calling Cross Domain Web Services in AJAX
2011-10-06 06:41 747(From: http://www.simple-talk ...
相关推荐
UPnP协议包括几个基础协议,如SSDP(简单服务发现协议)、GENA(事件通知协议)和FXPP(可能是指某些特定的UPnP扩展)。SSDP用于设备的发现,设备通过发送和接收SSDP消息来通告其存在。GENA处理设备状态的更新和事件...
使用这样的DLL模块,开发者可以轻松地在自己的应用程序中集成UPnP端口映射功能,而无需深入理解UPnP协议的复杂细节。这极大地简化了网络服务的部署,特别是在多设备、多网络环境下的自动化设置。 总的来说,"UPnP...
UPNP(通用即插即用,Universal Plug and Play)与...通过阅读“DLNA UPNP协议资料”中的文档,你可以进一步学习这两个协议的细节,包括它们的工作原理、通信流程、设备交互方式,以及如何在实际项目中应用这些知识。
### UPnP技术细节中文文档知识点概述 #### 一、UPnP文档翻译免责声明 - **文档来源**: 该文档最初以英文形式发布,并经过UPnP论坛的官方审查。 - **翻译情况**: 使用翻译服务和技术手段从英文原文转换为目标语言...
基于UPNP协议的网络多媒体电视机PDF文档可能涵盖了具体的设计方案、实现细节、案例研究以及最佳实践,对理解UPNP在实际应用中的工作原理和优势有重要作用。 综上所述,UPNP协议为网络多媒体电视机提供了便利的互...
1. **UPnP库**:开发C++ UPnP应用程序需要使用支持UPnP协议的库,如libupnp(也称为IGD2,Internet Gateway Device 2)或者OpenHome SDK等。这些库提供了处理UPnP设备控制点和设备的接口。 2. **设备发现**:首先,...
同时上传了一些文档,其中两个自己感觉挺有用的,基本将端口映射讲的很清楚了,一个是《UPnP端口映射过程》,一个是《UPNP协议细节》,是网上直接复制下来的。还有一个介绍miniupnp函数功能的文档,是对源代码的函数...
Intel提供了面向Linux的UPnP开发包,它是一个开源工具,封装了UPnP协议的多个层面,提供简洁的接口,减轻开发者处理底层协议的负担。该开发包包括多线程支持、XML解析器和迷你Web服务器等组件,方便开发者专注于服务...
UPnP(通用即插即用,...总之,UPnP协议提供了一种方便的网络自动化配置方式,尤其对于需要跨NAT通信的应用来说,它的端口映射功能至关重要。通过学习和掌握UPnP,开发者可以构建更加智能化和易于管理的网络环境。
在这个项目中,开发者可能使用了Delphi的库和API来编写代码,以便通过UPNP协议与网络设备交互,实现端口映射功能。 描述中提到的“源代码”意味着这个压缩包包含可读的编程代码,可供其他开发者学习、研究和修改。...
同时,考虑到UPnP协议的复杂性,使用设计模式(如工厂模式、观察者模式)可以提高代码的可读性和可维护性。 6. **库的使用**:在实际开发中,开发者可能会使用开源库如OpenUPnP或GUPnP来简化UPnP的实现。这些库封装...
9. **安全考虑**:UPnP协议本身存在一些安全问题,例如不安全的默认设置和缺乏加密。生成的代码应该考虑到这些风险,并提供安全的最佳实践。 10. **调试与测试**:开发过程中,工具可能提供辅助功能,如模拟设备、...
UPnP协议简介 UPnP是由UPnP论坛定义的一套开放标准,它允许网络设备自动发现彼此并进行通信,而无需手动配置IP地址、子网掩码或端口映射。这一协议对于智能家居设备、打印机、网络摄像机等设备非常有用,因为它们...
这些工具简化了开发过程,处理了底层的协议细节。 6. **端口映射**:在NAT(网络地址转换)环境下的设备,UPNP可以自动创建端口映射,使内部网络设备能够被外部网络访问。这对于游戏、流媒体服务和远程访问至关重要...
开发者可以利用Cling创建复杂的UPnP应用,而不需要深入了解底层的UPnP协议细节。 在安卓UPnP投屏的实现上,开发者可能需要关注以下几个关键知识点: 1. **设备发现**:使用Cling库,程序会搜索网络上的UPnP设备,...
UPnP协议基于SOAP(简单对象访问协议)和XML,允许设备和控制点(例如计算机或智能手机应用)进行交互。 SharpUPnP库是.NET平台上一个强大的UPnP开发工具,它为开发者提供了易用的接口来实现UPnP功能。这个库包含了...
通过分析这些源代码,我们可以了解到eMule如何利用UPnP协议来自动配置端口映射,以便在P2P网络中更有效地进行文件共享。具体实现可能包括查找网络上的UPnP兼容路由器,创建端口映射条目,以及检测和维护这些映射的...