tag 标签: 自动端口映射

相关博文
  • 热度 30
    2015-3-12 16:07
    1543 次阅读|
    0 个评论
    文章开始之前让我们设想下面的几个情形:我们在办公室内就能访问到生产车间的网络摄像机,而无需到监控室查看生产情况;在下班之前,或在回去的路上,就可以先打开家里的空调器和厨房设备,等进入家门,立刻就是一个温度宜人的环境――厨房里的饭也做好了;我们想在电视机上回味一下几天前在景区拍的照片,把相机或者 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 在收到这样的控制请求后,会给出一系列应答,如果应答中包含收到“ UDNuuidAddPort Success!! ”后,表明端口映射添加成功。添加端口映射成功后,就可以在外网访问内网中指定 IP 地址和端口了,如果添加了 TCP 端口映射,可以建立连接并发送数据测试。       图 8 AddPort 的报文 删除端口与添加端口格式一样,都是通过 HTTP POST method-basedSOAP 执行 DeletePortMapping 操作,只需要 ExternalPort 和 Protocol 两个参数即可。在此不再详细叙述,请参考我们的程序代码下载链接: http://pan.baidu.com/s/1roc70 继续阅读:http://www.iwiznet.cn/blog/?p=6990       
  • 热度 22
    2015-3-12 11:22
    1112 次阅读|
    0 个评论
    文章开始之前让我们设想下面的几个情形:我们在办公室内就能访问到生产车间的网络摄像机,而无需到监控室查看生产情况;在下班之前,或在回去的路上,就可以先打开家里的空调器和厨房设备,等进入家门,立刻就是一个温度宜人的环境――厨房里的饭也做好了;我们想在电视机上回味一下几天前在景区拍的照片,把相机或者 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 在收到这样的控制请求后,会给出一系列应答,如果应答中包含收到“ 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( 红色为发送的数据) 继续阅读:http://www.iwiznet.cn/blog/?p=6990