浅析UPnP协议
UPnP首先是由微软公司于1999年提出,现今已经是开放的标准,由非盈利的论坛组织UPnP F orum 负责体系架构和标准的维护和更新升级。至2003年末,世界范围内宣称支持它的组织 已经达到600多家。目前UPnP尚处于1.0版本已经实现了智能设备的互联互用。 1UPnP结构规范 1.1UPnP基本单元
组成UPnP的基本单元主要有以下3种: 1.1.1设备(Devices)。在U PnP规范中设备是最基本单元。设备代表了一个物理设备或包含多个物理设备的逻辑设 备,它是U PnP服务或嵌入设备的载体, 不同类型的设备对应一组不同的服务和嵌入设备。 1.1.2服务(Services)。在U PnP规范中服务是最小控制单元。服务是设备所能向外提供的功能,定义了设备的功能调 用接口以及描述设备状态的变量。服务由一个状态表、一个控制服务期和一个事件服务期构 成。 1.1.3控制点(Control Points)。在U PnP规范中控制点是U PnP网络中的控制者,能发现和控制网络中其他U PnP设备。当然在 物理实现上,设备一般充当了控制点的角色。 1.2UPnP协议结构
UPnP协议结构最底层的TCP/IP协议是UPnP协议结构的基础。IP层进行数据的发送与接受。对 于那些需要可靠传送的信息, UPnP使用TCP进行传送, 反之则使用UDP进行传送。UPnP对网络 物理设备没有要求,可以使用以太网、无线网、IEEE1394、红外进行连接, 只要支持IP协议 即可。同时UPnP还可以使用TCP/IP协议族中的其他协议, 如ARP、IGMP、DHCP、DNS等。
构建在TCP/IP协议之上的是HTTP 协议及其变种,这一部分是UPnP协议的核心部分, 所有UPnP 消息都被封装在HTTP协议及其变种之中。HTTP协议的变种是HTTPU和HTTPMU, 这些协议的格 式沿袭了HTTP协议,只不过与HTTP协议不同的是它们通过UDP而不是TCP来发送消息,并且可以 用于多播通信。
UPnP不同类别的应用使用不同的上层协议进行控制。其中简单服务发现协议(Simple Servic e Discovery Protocol)定义了UPnP控制点如何发现网络上的UPnP服务, 以及UPnP设备如何 向网络发布自己所能提供的服务; 普通事件架构协议 (Generic Event Notification Archi tecture)定义了UPnP设备如何利用UDP和TCP来接受和发送事件通知,以及定义了通知预订者 和发布者的概念以启动事件; 简单对象访问协议(Simple Object Access Protocol) 定义了 可扩展标记语言(XML)和HTTP的使用来执行远程调用,每个UPnP控制请求以及响应都是一个S OAP消息。
在UPnP协议结构的上层是UPnP自己定义的标准,其中对于UPnP的共有信息放在设备体系结构 中定义;不同类型的设备部分由不同类型的工作组定义; UPnP设备制造商定义自己设备的相 关信息,比如设备名称、型号、序列号、厂商信息等等。 1.3UPnP工作流程
UPnP工作流程分析如下: 1.3.1寻址(Addressing)。UPnP协议的基础是TCP/IP,这就决定了每一个UPnP必须分配一个IP地址。当一个UPnP设备或 控制点接入网络时, 它能通过DHCP从网络上获取一个IP 地址。当网络中不存在DHCP 服务器 时,它能通过Auto-Ip自动分配一个IP地址。 1.3.2发现(Discovery)。当UPnP设备或控制点获得IP 地址以后, 设备可以通过网络向控制点提供自己的相关信息;而 控制点可以从网络上获取自己感兴趣的设备的信息。这一切都是通过SSDP协议实现的。
------------------oddy-----2010-06-10------------------------------------------------------
多播的地址 239.255.255.254,
通过抓包工具抓到的数据。格式如下:
 上面是设备发的SSDP出去,然后回应数据包

接下来,路由器发送一个包给设备

设备请求上面数据包中的一个东东

然后路由器回应,并且发送一个XML的东西回来

XML的包

GET /igd.xml HTTP/1.1
Host: 192.168.1.1:1900
ACCEPT-LANGUAGE: en
HTTP/1.1 200 OK
CONTENT-LENGTH: 2746
CONTENT-TYPE: text/xml
DATE: Wed, 09 Jun 2010 10:01:03 GMT
LAST-MODIFIED: Tue, 28 Oct 2003 08:46:08 GMT
SERVER: TP-LINK Router R478, UPnP/1.0
CONNECTION: close
<?xml version="1.0"?> <root xmlns="urn:schemas-upnp-org:device-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <URLBase></URLBase> <device> <deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType> <presentationURL>http://192.168.1.1:80 </presentationURL> <friendlyName >TP-LINK Router R478</friendlyName> <manufacturer >TP-LINK</manufacturer> <manufacturerURL >http://www.tp-link.com</manufacturerURL> <modelDescription >TP-LINK TL-R478 1.0</modelDescription> <modelName >TL-R478</modelName> <modelNumber >1.0</modelNumber> <UDN>uuid:upnp-InternetGatewayDevice-192168115678900001</UDN> <UPC>123456789001</UPC> <serviceList> <service> <serviceType>urn:schemas-upnp-org:service:Layer3Forwarding:1</serviceType> <serviceId>urn:upnp-org:serviceId:L3Forwarding1</serviceId> <controlURL>/l3f</controlURL> <eventSubURL>/l3f</eventSubURL> <SCPDURL>/l3f.xml</SCPDURL> </service> </serviceList> <deviceList> <device> <deviceType>urn:schemas-upnp-org:device:WANDevice:1</deviceType> <friendlyName>WAN Device</friendlyName> <manufacturer >TP-LINK</manufacturer> <manufacturerURL >http://www.tp-link.com</manufacturerURL> <modelDescription>WAN Device</modelDescription> <modelName>WAN Device</modelName> <modelNumber>1</modelNumber> <modelURL></modelURL> <serialNumber>12345678900001</serialNumber> <UDN>uuid:upnp-WANDevice-192168115678900001</UDN> <UPC>123456789001</UPC> <serviceList> <service> <serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType> <serviceId>urn:upnp-org:serviceId:WANCommonInterfaceConfig</serviceId> <controlURL>/ifc</controlURL> <eventSubURL>/ifc</eventSubURL> <SCPDURL>/ifc.xml</SCPDURL> </service> </serviceList> <deviceList> <device> <deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:1</deviceType> <friendlyName>WAN Connection Device</friendlyName> <manufacturer >TP-LINK</manufacturer> <manufacturerURL >http://www.tp-link.com</manufacturerURL> <modelDescription>WAN Connection Device</modelDescription> <modelName>WAN Connection Device</modelName> <modelNumber>1</modelNumber> <modelURL></modelURL> <serialNumber>12345678900001</serialNumber> <UDN>uuid:upnp-WANConnectionDevice-192168115678900001</UDN> <UPC>123456789001</UPC> <serviceList> <service> <serviceType>urn:schemas-upnp-org:service:WANIPConnection:1</serviceType> <serviceId>urn:upnp-org:serviceId:WANIPConnection</serviceId> <controlURL>/ipc</controlURL> <eventSubURL>/ipc</eventSubURL> <SCPDURL>/ipc.xml</SCPDURL> </service> </serviceList> </device> </deviceList> </device> </deviceList> </device> </root>
接下来 设备 有开始请求IPC.XML
POST /ipc HTTP/1.1
HOST: 192.168.1.1:1900
Content-Length: 624
Content-Type: text/xml; charset="utf-8"
SOAPACTION:"urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping"
<?xml version="1.0"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
<NewRemoteHost></NewRemoteHost>
<NewExternalPort>9888</NewExternalPort>
<NewProtocol>TCP</NewProtocol>
<NewInternalPort>9888</NewInternalPort>
<NewInternalClient>192.168.1.238</NewInternalClient>
<NewEnabled>1</NewEnabled>
<NewPortMappingDescription>[IMAGIATEK IPCAM]</NewPortMappingDescription>
<NewLeaseDuration>0</NewLeaseDuration>
</u:AddPortMapping>
</s:Body>
</s:Envelope>
HTTP/1.1 200 OK
CONNECTION: close
SERVER: TP-LINK Router R478, UPnP/1.0
CONTENT-LENGTH: 332
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> <u:AddPortMappingResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"></u:AddPortMappingResponse></SOAP-ENV:Body> </SOAP-ENV:Envelope>
最后,设备就发了一个加入该多播组的包

哈哈哈哈  我抓包的完成了 回到理论上的------------------oddy-----2010-06-10
1.3.3描述(Description)。当设备和控制点取得联系后,描述可以供控制点获取设备及其服务的详细信息。这些信息以X ML 格式提供,并通过HTTP协议进行传送。 1.3.4控制(Control)。当控制点获取了设备的信息后,控制点可以对该设备进行控制。控制点通过向该设备某个服 务的URL 发送操作请求来控制该设备。请求和响应消息同样是XML 格式的,并封装在SOAP中 通过HTTP协议进行传送。 1.3.5事件( Eventing)。当设备的服务状态发生变化时设备通过事件来通知控制点。数据格式同样是XML 的,但是封 装在GENA 中通过HTTP协议进行传送。 1.3.6展示( Presentation)。UPnP规定设备制造商通过展示可以提供该设备内容和功能的相关描述信息。描述信息以HTML 格式发布, 控制点可以向设备的展示URL发送HTTP GET请求来获得相关信息。 2UPnP开发流程 2.1基于Windows的UPnP开发流程 Intel为Windows下的U PnP程序开发提供了自动开发工具Intel Authoring Tools for UPnP, 开发过程如下: 2.1.1使用Server Author生成XML格式的服务描述文件。 2.1.2使用Device Builder生成设备,载入已生成设备的服务描述文件。 2.1.3输入设备信息,然后使用Device Builder生成设备的UPnP框架代码。 2.1.4在UPnP框架代码中添加自定义处理程序,编译后即可。 Intel Authoring Tools for UPnP可以极大地提高开发效率, 它可以自动生成U PnP协议代 码,让开发者无需关心SSDP、GENA、SOAP等等协议细节,并且会提示开发者在自动生成的框架 代码中, 哪些地方需要插入自定义处理程序。 2.2基于LINUX的UPnP开发流程
Intel为Linux下的UPnP 开发提供了SDK (Linux SDK for UPnP Devices) ,该SDK使用C语言 开发,并且是开源的。SDK封装了UPnP涉及的众多协议,涵盖从寻址、发现到展示各个过程,并 提供了简单的开发接口。这样,开发人员就摆脱了各种协议的细节,只需进行服务或者控制所 需的具体开发,简化了UPnP应用的设计开发。另外, SDK还包括多线程支持库、XML解释器、 迷你Web服务器等。 基于Intel的SDK开发UPnP应用, 以服务设备为例,主要有以下几个基本步骤: 2.21UPnP设备初始化。首先调用UPnPInit ( ) , 初始化SDK; 调用UPnPSetWeb Server Root Dir( )注册设备描述 文档存放的目录;调用UPnPRegister Root Device( )向SDK注册设备描述文档。 2.2.2公布UPnp服务。调用UPnP Send Advertisement( )向网络公布设备及服务。然后 设备进入等待请求循环,响 应 控制点的请求。请求主要有:事件订阅、获取服务状态、设定服务状态等。当设备的服务状 态改变时,调用UPnPNotify( )通知控制点。 2.2.3关闭UPnP。UPnP设备关闭前首先需要向网络发送一个“bye- bye”的SSDP消息,然后调用UPnPUnRegiste rRoot2Device( )取消设备注册,最后调用UPnPFinish( )进行必要的清理工作,然后关闭UPnP 设备。SDK中提供了描述设备及服务的XML 文档的读写接口,但是具体格式需要由开发人员 指定。 2.3基于WinCe的UPnP开发流程 Microsoft在WinCE 5.0中为UPnP设备的开发提供了相关API, 以服务设备为例, 主要有以 下几个步骤: 2.3.1制定设备XML文档。 2.3.2制定该设备提供服务的XML文档。 2.3.3实现一个COM对象, 该对象提供IU PnP2D eviceControl接口。通过调用IU PnPDev iceControl:Initialize( )初始化设备并注册设备。当有控制点请求服务时调用IUPnPDevic eContro l:GetServiceObject( )提供设备及服务情况,并通过IDispatch接口传递服务对象 。 2.3.4为服务编写IDispatch接口。IDispatch接口实现了服务设备所提供服务的信息。  3结束语
UPnP应用主要面向当前比较热门的信息家电以及打造数字化家庭, Microsoft公司称“UPnP 将延伸到家庭中的每一个设备, 它会成为个人电脑、应用程序、智能设备集成工作所必需的 框架协议和接口标准”。举例而言,你可以通过掌上电脑控制家里的信息家电, 如设置空调 的工作状态, 让你在回家前就使室内温度达到你喜欢的状态;你可以随时让录像机录下你喜 欢的电视节目; 让微波炉、电饭煲为你进行烹调。
UPnP正是定义了实现这些功能的底层接口。当然UPnP架构的推广现在还不是十分普及,因为 传统家电厂商对计算机技术以及通讯技术还不是很熟悉。传统家电到数字化家电再到网络化 家电还有很长的路要走,但这毕竟是传统家电的进一步发展趋势,相信在不久的将来, 数字化 家庭将实实在在的出现在你的身边。 [参考文献] [1]何为.UPnP技术简介[J].数字社会与智能家居,2007,(12) [2]丁威,陈耀武.通用即插即用(UPnP)及其应用.现代机械,2006,(4) [3]吴非,吴浩,刘金玉.基于UPnP协议栈的嵌入式家庭媒体适配器的研究与设计 [J].IN TEL PRESS, 2003,(3). [4]杨志明.基于UPnP技术的媒体服务器的设计和实现[J].计算机应用与软件,20 05,(10). [5]张群哲,吴庆波.基于UPnP的数字家庭研究[J].计算机工程与科学,2007,(2) .
转自 http://oddy.blog.hexun.com/51578284_d.html
浅析UPnP协议的更多相关文章
- [转] 浅析HTTP协议
		
浅析HTTP协议 来源:http://www.cnblogs.com/gpcuster/archive/2009/05/25/1488749.html HTTP协议是什么? 简单来说,就是一个基于应用 ...
 - 和菜鸟一起学linux之upnp协议的学习记录
		
UPnP全名是Universal Plug and Play,主要是微软在推行的一个标准.简单的来说,UPnP 最大的愿景就是希望任何设备只要一接上网络,所有在网络上的设备马上就能知道有新设备加入,这 ...
 - 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)
		
版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qclo ...
 - 浅析HTTP协议
		
HTTP协议是什么 HTPP协议是一种网际层协议,HTTP协议是无状态的,HTTP协议对用户是透明的. 每一次HTTP请求都是一次事务,一个HTTP事务是由一条请求命令和一个响应结果组成的,HTTP通 ...
 - 浅析——SCTP协议(转)
		
SCTP处于SCTP用户应用层与IP网络层之间,它运用“关联”(association)这个术语定义交换信息的两个对等SCTP用户间的协议状态 .SCTP也是面向连接的,但在概念上,SCTP“关联”比 ...
 - 浅析ARP协议及ARP攻击
		
一. ARP数据包结构 (1)硬件类型:指明发送方想知道的硬件接口类型,以太网的值为1:(2)协议类型:指明发送方提供的高层协议类型:它的值为 0x0800 即表示 IP地址.(3)硬件地址长度和协议 ...
 - 浅析HTTP协议的请求报文和响应报文
		
1.HTTP协议与报文简介 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则. 而客户端与服务端通信时 ...
 - 从TCP三次握手说起--浅析TCP协议中的疑难杂症(1)
		
版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/73 来源:腾云阁 https://www.qclou ...
 - 浅析HTTP协议get请求与post请求
		
一.HTTP简介 1. HTTP协议:(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则(报文格式). 2.报文: ...
 
随机推荐
- 【转】SqlServer将没有log文件的数据库文件附加到服务器中
			
原文链接: http://www.cnblogs.com/xdotnet/p/attach_sqlserver_database_file_without_log_files.html 原作者删除了原 ...
 - 基于Codeigniter框架实现的APNS批量推送—叮咚,查水表
			
最近兼职公司已经众筹成功的无线门铃的消息推送出现了问题,导致有些用户接收不到推送的消息,真是吓死宝宝了,毕竟自己一手包办的后台服务,影响公司信誉是多么的尴尬,容我简单介绍一下我们的需求:公司开发的是一 ...
 - 删除流氓软件McAfee
			
如何解决卸载McAfee时出现"处于托管模式时无法删除"问题 问题现象: 这几天在为客户终端换装杀毒软件时出现这么一个问题:在控制面板的添加或删除程序里面将"McAfee ...
 - 在Asp.Net MVC 中如何用JS访问Web.Config中appSettings的值
			
应用场景: 很多时候我们要在Web.Config中添加appSettings的键值对来标识一些全局的信息,比如:调用service的domain,跳转其他网站页面的url 等等: 那么此时就涉及到了一 ...
 - Addthis
			
WordPress外贸主题模版可以非常方便地整合国外流行的分享收藏社会化网络功能,比如Addthis是国外一个网络书签按钮聚合网站,是稳步提升网站流量和搜索引擎排名的WEB2.0工具!通过AddThi ...
 - python 学习第二天
			
由于换了博客,第一篇没有在博客园写,写在了开源中国上,链接地址为http://my.oschina.net/u/254063/blog/719289,大家有兴趣可以看看 一, python 数据类型 ...
 - 进击的Python【第五章】:Python的高级应用(二)常用模块
			
Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigPar ...
 - js的一些正则  整理 长期更新
			
1. 1-12的正整数:var day=/^[1-9]\d{0,12}$/;
 - Coming
			
Hi,there, I am coming here to keep a great habit-one day a blog to share what new I have learned tod ...
 - Python网络数据采集系列-------概述
			
这是一个正在准备中的系列文章,主要参考的是<Web Scraping with Python_Collecting Data from the Modern Web-O'Reilly(2015) ...