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

相关文章

解析 XML 和 INI

XML 1.TinyXML库 TinyXML是一个C++的XML解析库  使用介绍: https://www.cnblogs.com/mythou/archive/2011/11/27/2265169.html    使用的时候,只要把 tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

陀螺仪LSM6DSV16X与AI集成(8)----MotionFX库解析空间坐标

陀螺仪LSM6DSV16X与AI集成.8--MotionFX库解析空间坐标 概述视频教学样品申请源码下载开启CRC串口设置开启X-CUBE-MEMS1设置加速度和角速度量程速率选择设置FIFO速率设置FIFO时间戳批处理速率配置过滤链初始化定义MotionFX文件卡尔曼滤波算法主程序执行流程lsm6dsv16x_motion_fx_determin欧拉角简介演示 概述 本文将探讨

【文末附gpt升级秘笈】腾讯元宝AI搜索解析能力升级:千万字超长文处理的新里程碑

腾讯元宝AI搜索解析能力升级:千万字超长文处理的新里程碑 一、引言 随着人工智能技术的飞速发展,自然语言处理(NLP)和机器学习(ML)在各行各业的应用日益广泛。其中,AI搜索解析能力作为信息检索和知识抽取的核心技术,受到了广泛的关注和研究。腾讯作为互联网行业的领军企业,其在AI领域的探索和创新一直走在前列。近日,腾讯旗下的AI大模型应用——腾讯元宝,迎来了1.1.7版本的升级,新版本在AI搜

消息认证码解析

1. 什么是消息认证码         消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。         消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。         根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似

问题1,PE文件转到内存中出现解析PE不正确的问题

1,使用fopen(FileName, “r”) r的方式读取文件到内存,此时就可能存在问题了,r以只读方式,有时候不表示字符的有可能就不读了,那么内存中就不会是完整的原始文件。所以此时要采用rb,二进制读取的方式。 bool ReadFileToMem(char* FileName, char**buf) { FILE* f; f = fopen(FileName, “rb”); if

[大师C语言(第三十六篇)]C语言信号处理:深入解析与实战

引言 在计算机科学中,信号是一种软件中断,它允许进程之间或进程与内核之间进行通信。信号处理是操作系统中的一个重要概念,它允许程序对各种事件做出响应,例如用户中断、硬件异常和系统调用。C语言作为一门接近硬件的编程语言,提供了强大的信号处理能力。本文将深入探讨C语言信号处理的技术和方法,帮助读者掌握C语言处理信号的高级技巧。 第一部分:C语言信号处理基础 1.1 信号的概念 在Unix-lik

免费内网穿透工具 ,快解析内网穿透解决方案

在IPv4公网IP严重不足的环境下,内网穿透技术越来越多的被人们所使用,使用内网穿透技术的好处有很多。 1:无需公网ip 物以稀为贵,由于可用的公网IP地址越来越少,价格也是水涨船高,一个固定公网IP一年的成本要上万,而使用内网穿透技术则不需要公网IP的支持。 2:提高安全性 使用内网穿透技术,无需在路由器映射端口,我们知道黑客通常会使用端口扫描来寻找攻击对象,不映射端口能大大提高服务器的安全

混合密码系统解析

1. 概述         混合密码系统(hybrid cryptosystem)是将对称密码和非对称密码的优势相结合的方法。一般情况下,将两种不同的方式相结合的做法就称为混合(hybrid)。用混合动力汽车来类比的话,就相当于是一种将发动机(对称密码)和电动机(非对称密码)相结合的系统。         混合密码系统中会先用快速的对称密码来对消息进行加密,这样消息就被转换为了密文从而也就保证

带你解析Dagger2

1. Dagger2简介: Dagger2是Dagger1的分支,由谷歌公司接手开发,目前的版本是2.0。Dagger2是受到AutoValue项目的启发。 刚开始,Dagger2解决问题的基本思想是:利用生成和写的代码混合达到看似所有的产生和提供依赖的代码都是手写的样子。 Dagger2具有以下好处: 1) 依赖的注入和配置独立于组件之外,注入的对象在一个独立、不耦合的地方初始化,这样在改