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

相关文章

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

99%的人都选错了! 路由器WiFi双频合一还是分开好的专业解析与适用场景探讨

《99%的人都选错了!路由器WiFi双频合一还是分开好的专业解析与适用场景探讨》关于双频路由器的“双频合一”与“分开使用”两种模式,用户往往存在诸多疑问,本文将从多个维度深入探讨这两种模式的优缺点,... 在如今“没有WiFi就等于与世隔绝”的时代,越来越多家庭、办公室都开始配置双频无线路由器。但你有没有注

Python中的sort()和sorted()用法示例解析

《Python中的sort()和sorted()用法示例解析》本文给大家介绍Python中list.sort()和sorted()的使用区别,详细介绍其参数功能及Timsort排序算法特性,涵盖自适应... 目录一、list.sort()参数说明常用内置函数基本用法示例自定义函数示例lambda表达式示例o

SpringBoot加载profile全面解析

《SpringBoot加载profile全面解析》SpringBoot的Profile机制通过多配置文件和注解实现环境隔离,支持开发、测试、生产等不同环境的灵活配置切换,无需修改代码,关键点包括配置文... 目录题目详细答案什么是 Profile配置 Profile使用application-{profil

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

Java中的volatile关键字多方面解析

《Java中的volatile关键字多方面解析》volatile用于保证多线程变量可见性与禁止重排序,适用于状态标志、单例模式等场景,但不保证原子性,相较synchronized更轻量,但需谨慎使用以... 目录1. volatile的作用1.1 保证可见性1.2 禁止指令重排序2. volatile的使用