新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于STM32和W5500的UPnP自動端口映射功能實現

        基于STM32和W5500的UPnP自動端口映射功能實現

        作者: 時間:2016-11-29 來源:網絡 收藏


        二、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程序,看是不是能夠達到我們的實現目的,實現控制路由器端口映射功能。


        關鍵詞: STM32W5500端口映

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 琼中| 如东县| 山阳县| 巫山县| 泊头市| 称多县| 威海市| 呼玛县| 南丹县| 曲阳县| 长阳| 获嘉县| 青海省| 滁州市| 施秉县| 阳泉市| 济南市| 获嘉县| 乌恰县| 莎车县| 游戏| 固安县| 含山县| 梅州市| 双桥区| 独山县| 盐池县| 自贡市| 福建省| 北宁市| 襄汾县| 乳源| 赫章县| 昌图县| 延长县| 安丘市| 合作市| 余姚市| 萨迦县| 济宁市| 永寿县|