基于STM32和W5500的UPnP自动端口映射功能实现
第一步:开启路由器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协议的一个简单应用,希望能给大家一个思路。
评论