[无线电易读版]基于STM32和W5500的UPnP自动端口映射功能实现



文章开始之前让我们设想下面的几个情形:我们在办公室内就能访问到生产车间的网络摄像机,而无需到监控室查看生产情况;在下班之前,或在回去的路上,就可以先打开家里的空调器和厨房设备,等进入家门,立刻就是一个温度宜人的环境――厨房里的饭也做好了;我们想在电视机上回味一下几天前在景区拍的照片,把相机或者DV联网就可以了,无需再去拷贝。工作生活都如此方便,将是一个很惬意的事情。

实现这些场景的网络设备都要基于一种叫端口映射的网络技术。端口映射就是路由器将外网某一个端口与内网中某个设备的IP地址和端口号建立起一一对应关系。内网主动访问外网时,路由器主动建立了映射关系,内外网间就可以通信。但是外网要主动访问内网是不可行的,因为不知道内网的设备IP和端口,只能和路由器外网通信。路由器可以进行手动配置端口映射,但是便携式设备经常移动,内网的IP地址也是不是固定的,每次使用都要手动配置路由器显然是个麻烦的事情。本文就为你讲解如何使用UPnP协议实现网络设备自动配置路由器进行端口映射。

一、UPnP协议简介

UPnP(Universal Plug and Play,即插即用)是各种各样的智能设备、无线设备和个人电脑等实现遍布全球的对等网络连接(P2P)的结构。使用UPnP达到的效果是任何设备一旦连接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相通信,更能直接使用或者控制它,一切都不需要人工设置。

1.1 UPnP结构

服务、设备和控制点是UPnP网络的基本组件,如图1:

图 1 UPnP组件图

  • 设备(Device):家电、手机、智能设备、无线设备、电脑等等都可以称之为设备。
  • 服务(Service):是指设备在不同情况下的动作和设备的状态。
  • 控制点(Control Point):指的是可以发现并控制其他设备的控制设备。在UPnP网络中,设备可以和控制点合并为同一台设备。

    1.2  UPnP工作流程

UPnP定义了设备之间、设备和控制点、控制点之间通信的协议。完整的UPnP有设备寻址、设备发现、设备描述、设备控制、事件通知和基于HTML的描述等几部分构成。UPnP协议最底层是TCP/IP协议,UPnP实现的工作流程如图2所示:

图2 UPnP实现的工作流程

寻址:就是找个可用IP地址。一般都采用DHCP服务,使设备自动得到一个IP地址。

发现:加入到网络中,设备会定期的以组播的方式表明自身的存在以及告知(Advertise)它提供的服务;控制点则是网络中广播search packets来发现具有某些服务的设备,具有该服务的设备以单播的方式应答。

描述:控制点可以从发现消息中得到设备描述的URL(可以认为是浏览器地址),通过URL取回设备描述的信息。

控制、事件和展示则是控制点获取描述之后进行的各种通信交互。其中控制是控制点对设备进行的操作;事件为设备向控制点定期发送其感兴趣的信息,展示可以认为是设备的一个功能,它给控制点一个URL,可以登录到设备的网页服务器。

二、UPnP路由器端口映射控制点在W5500实现

2.1 实验硬件平台和实验目的

通过以上讲解,相信大家对UPnP也有一定认识了,下面就让我们开始我们实验之旅。我们选用的实验平台为WIZnet W5500EVB,它使用USB口进行供电和调试,单片机为STM32F103RCT6,网络芯片为WIZnet硬件TCP/IP的以太网芯片W5500。

我们的实验目的就是让W5500(Control Point)控制路由器(Device)执行端口映射服务(Service),让外网中的PC2可以与内网中的W5500EVB板建立连接。如图3所示
PC2往路由器36.36.141.53:12222
发送的信息,将被转发到内网192.168.1.110:5000。

图3端口映射网络图

2.2 
UPnP自动端口映射软件实现流程

本文中W5500将作为控制点的角色出现,并不需要实现展示的功能,在UPnP协议上仅实现了Search的过程,对网络中的Advertise消息不做处理。下面让我看看程序是如何实现的,首先看一下整个程序流程图如图4,对整个程序有个大致的了解:

图4
主程序流程图

如图所示:

程序首先进行初始化,初始化CPU资源和W5500然后使用DHCP协议自动获取IP,如果获取失败就设定为固定IP,DHCP的过程在此不再详细介绍。

获取IP地址后,先使用SSDP发现设备。W5500打开本地一个socket,再使用UDP组播地址(255.255.255.255)发送SSDP
M-SEARCH信息搜索在相同子网中的IGD(Internet Gateway Device),设备收到SSDP
M-SEARCH信息后会回复数据包。如图5
所示:

图5发送SSDP广播包和收到回复信息

通过解析收到数据包我们可以得到:LOCATION:设备描述文件的URL。通过Location信息,我们能够获得IGD的IP地址和端口号。利用这个IP地址和端口号生成HTTP
GET Header,W5500重新打开一个Socket,然后再将其发送给IGD来获取IGD的服务描述。当IGD接收到HTTP
GET Header后,IGD将会让W5500_Control_Piont获知它的设备描述和服务描述。发送的数据包如图6。

图6还显示了设备回复的部分信息,从中我们可以看到设备描述和服务描述,WANIPConnection对应端口映射服务,可以看到该路由设备有该项服务。在WANIPConnection服务描述中可以得到Control
URL和eventSubURL,一个用来控制,一个用来订阅。

图6发送获取描述单播包和收到的回复信息

执行完上面的发现设备后在串口上为用户提供了一个菜单页面,通过在菜单中输入命令,我们可以交互添加端口和删除端口。

首先是添加端口,利用IGD的IP地址、端口号以及控制URL来完成XML,然后通过HTTP
POST method-basedSOAP执行AddPortMapping操作。其执行过程如图7流程图所示:

图7 AddPortProcess()函数流程图

在SOAP描述中可以看到ExternalPort、Protocol、InternalPort以及控制点IP地址等信息,如图8
AddPort的报文所示。

IGD在收到这样的控制请求后,会给出一系列应答,如果应答中包含收到“<UDN>uuidAddPort Success!!”后,表明端口映射添加成功。添加端口映射成功后,就可以在外网访问内网中指定IP地址和端口了,如果添加了TCP端口映射,可以建立连接并发送数据测试。

图8 AddPort的报文

删除端口与添加端口格式一样,都是通过HTTP POST method-basedSOAP执行DeletePortMapping操作,只需要ExternalPort和Protocol两个参数即可。在此不再详细叙述,请参考我们的程序代码下载链接:http://pan.baidu.com/s/1roc70

三自动端口映射功能测试

程序讲解完毕后将讲解如何测试我们写的W5500EVB程序,看是不是能够达到我们的实现目的,实现控制路由器端口映射功能。

第一步:开启路由器UPnP。登陆路由器控制界面,打开“转发规则->UPnP
设置”,如果UPnP状态没有开启,则需要开启一下。

第二步:将编译好的可执行文件下载到开发板中,接网线到路由器上,接USB调试线到PC端,打开串口助手对应的COM口以便查看调试信息和进入串口命令菜单。按复位键,程序开始执行,经过串口打印信息,我们看到DHCP获取正确IP地址,发现UPnP设备、获得描述,设置事件都已完成,如图9所示:

图9 UPnP执行成功打印输出

接下来就是我们的串口操作菜单,如图10:

图10
程序完成初始化后的菜单界面

第三步:基本命令输入。按照菜单提示进行命令输入,在此1-4就是基本的串口命令操作:打开/关闭led,设置/查看网络配置;5
、6步就是开启TCP
、UDP回环测试。TCP回环实际上就是开启了一个TCP
Server,同一网段的TCP Client可以直接与其建立通信,可发送数据到此TCP Server,TCP
Server会回复相同的数据。串口基本配置和内网回环测比较简单,在此不再贴图查看。

第四步:配置TCP端口映射。在串口调试助手上输入 7,进行配置选项,按照菜单提示,我们端口映射,外网端口号为12222,内网端口号为5000,添加成功后会提示AddPortSuccess。如图11所示:

图11添加端口映射成功后串口打印出信息

刷新第一步进入的UPnP状态设置和设备列表,可发现控制节点W5500_Control_Point
已经加入内部端口号为5000,外部端口53F7为12222。可见我们已经成功用UPnP协议对路由器端口进行了映射。而且看到Thunder5在这里也有UDP
/TCP 端口映射列表。如图12所示。在这里也说一下,我们常用的P2P软件,Thunder
PPlive等都支持UPnP端口映射。

图12添加端口映射后路由器端口映射表

第五步,用外网测试配置好的端口映射。

如图3端口映射网络图,W5500和PC2不在同一个网络中,如果不进行端口映射,PC2不可能连接到W5500
TCP Server。首先我们在串口界面上输入5进入TCP Server回环程序。接下来查看路由器的外网IP,可见外网IP为“36.36.141.53”,其为公网IP。我们任意找一台PC用网络调试助手建立一个TCP
Client ,去连接我们刚才配置好的服务器IP为“36.36.141.53”端口为“12222”。连接成功后,发送LED_ON(红色为发送的数据),通过网络调试助手我们可以看到收到LED_ON(黑色为收到的数据),证明回环已建立。这就如同,无论我们在什么地方都能对我们的设备进行连接和控制。如图13所示:

图13外网连接到内网并进行数据回环测试

同时通过EVB上的LED,我们可以发现,LED灯可以根据我们输入的指令执行亮灭动作。如图14
所示:

图14 LED根据命令进行亮灭

第六步:删除已添加的端口。在菜单界面中输入8,然后按指示删除刚才的端口,刷新路由器映射表,发现已经没有这个应用了。

四总结

目前,实现各种设备的互联互通已经成为人们的迫切需求,而实现这一目的的关键是家庭网络的中间件技术,最有前景的就是今天讲的UPnP,因此支持UPnP标准的设备越来越多。本文通过UPnP部分协议实现了设备的自动端口映射,方便设备直接部署在内网中,无需客户去配置,就能在外网中直接访问内网设备,查看或者配置设备信息。作为一个UPnP协议的一个简单应用,希望能给大家一个思路。

时间: 2024-11-09 00:38:22

[无线电易读版]基于STM32和W5500的UPnP自动端口映射功能实现的相关文章

显示列表中的xenserver的总内存,可用内存,可用内存比【易读版】

9==显示列表中的xenserver的总内存,可用内存,可用内存比[易读版]-----------------------for I in $(cat <<eof | cat PTtile192.168.1.xxx 192.168.1.xxx eof );do {[ "$I" = "PTtile" ] && echo -e "NameLabel:\t\tIpAddress:\t\tHostName:\t\tMemTotal:\t

基于STM32+W5500的UPnP协议应用

来自:阿莫电子论坛 1. 概述 工具: PC  W5500EVB 路由器 串口调试工具 编译环境:Keil4 &IAR 功能:通过SNMP协议实现内网与外网的端口映射以及连接.PC连接路由器,PC和路由器在同一个网段.本文主要把路由器IP模拟为外网IP,W5500EVB的IP作为内网IP,从以下几个方面来验证此功能的可实施性. TCP Server回环测试 UDP回环测试 外网设备发送指令控制W5500EVB上LED 2. UPnP协议即通用即插即用英文是Universal Plug and P

VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡

VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡 一.板卡概述       本板卡基于Xilinx公司的FPGA XC7VX690T-FFG1761 芯片,支持PCIeX8.64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持各种接口输入,软件支持windows. 二.功能和技术指标:     1.标准PCI-E接口,支持PCI-E 8x,支持PCI-E 3.0.    2.标准FMC-HPC接口,VA

基于STM32的四旋翼飞行器的设计与实现

针对四旋翼飞行控制器姿态数据测量易受干扰.算法实现及设计较为困难等问题,设计并实现了以高性价比的STM32F103VET6微处理器作为主控板的四 旋翼飞行器.选用六轴运动组件MPU6050.电子罗盘HMC5883L及气压计MS5611等传感器对飞行器姿态数据进行了实时采集,并结合卡尔曼滤波 方法对姿态数据进行了数据融合.在控制算法上采用了非线性双闭环PID来实现两组四个电机的转速控制,并通过遥控器对四旋翼飞行器的飞行姿态进行实时调 节.飞行试验表明:基于STM32F103VET6微处理器的四旋翼

基于STM32的RFID射频识别技术 韦根协议C语言驱动解码程序

RFID工作原理 RFID技术的基本工作原理并不复杂:标签进入磁场后,接收解读器发出的射频信号,凭借感应电流所获得的能量发送出存储在芯片中的产品信息(无源标签或被动标签),或者由标签主动发送某一频率的信号(Active Tag,有源标签或主动标签),解读器读取信息并解码后,送至中央信息系统进行有关数据处理. 一套完整的RFID系统, 是由阅读器与电子标签也就是所谓的应答器及应用软件系统三个部份所组成,其工作原理是Reader发射一特定频率的无线电波能量,用以驱动电路将内部的数据送出,此时Read

基于STM32的旋转编码器

..\..\SYSTEM\usart\usart.c(1): error:  #5: cannot open source input file "sys.h": No such file or directory #include "..\sys\sys.h"这样就可以找到路径了 再次编译出现了问题 ..\..\SYSTEM\usart\..\sys\sys.h(3): error:  #5: cannot open source input file "

270-VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡

VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡 一.板卡概述       本板卡基于Xilinx公司的FPGA XC7VX690T-FFG1761I 芯片,支持PCIeX8.64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持各种接口输入,软件支持windows. 二.功能和技术指标:     1.标准PCI-E接口,支持PCI-E 8x,支持PCI-E 3.0.    2.标准FMC-HPC接口,V

基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)

源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throughput on Nucleo STM32F401RE Using SPI DMA 原文地址:https://www.cnblogs.com/LittleTiger/p/10142827.html

FPGA V7卡学习资料:VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡270

VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡 一.板卡概述       本板卡基于Xilinx公司的FPGA XC7VX690T-FFG1761 芯片,支持PCIeX8.64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持各种接口输入,软件支持windows. 二.功能和技术指标:     1.标准PCI-E接口,支持PCI-E 8x,支持PCI-E 3.0.    2.标准FMC-HPC接口,VA