upnp解析

2023-10-09 20:10
文章标签 解析 upnp

本文主要是介绍upnp解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要:文章介绍了UPnP结构规范和开发流程,指出:UP nP协议使所有联网的设备实现互联,设备工作不需要传统的驱动程序,便可以实现设备间的 相互控制。?
关键词:UPnP协议;开发流程;电子技术;工作流程?
中图分类号:TP393文献标识码:A文章编号:1007—6921(2009)17—0072—02?

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.2?1UPnP设备初始化。首先调用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架构的推广现在还不是十分普及,因为 传统家电厂商对计算机技术以及通讯技术还不是很熟悉。传统家电到数字化家电再到网络化 家电还有很长的路要走,但这毕竟是传统家电的进一步发展趋势,相信在不久的将来, 数字化 家庭将实实在在的出现在你的身边。?

这篇关于upnp解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/175270

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实