<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于STM32和W5500的UPnP自動端口映射功能實(shí)現(xiàn)

          基于STM32和W5500的UPnP自動端口映射功能實(shí)現(xiàn)

          作者: 時(shí)間:2016-11-29 來源:網(wǎng)絡(luò) 收藏


          二、UPnP路由器端口映射控制點(diǎn)在W5500實(shí)現(xiàn)
          2.1 實(shí)驗(yàn)硬件平臺和實(shí)驗(yàn)?zāi)康?br />通過以上講解,相信大家對UPnP也有一定認(rèn)識了,下面就讓我們開始我們實(shí)驗(yàn)之旅。我們選用的實(shí)驗(yàn)平臺為WIZnet W5500EVB,它使用USB口進(jìn)行供電和調(diào)試,單片機(jī)為STM32F103RCT6,網(wǎng)絡(luò)芯片為WIZnet硬件TCP/IP的以太網(wǎng)芯片W5500。
          我們的實(shí)驗(yàn)?zāi)康木褪亲學(xué)5500(Control Point)控制路由器(Device)執(zhí)行端口映射服務(wù)(Service),讓外網(wǎng)中的PC2可以與內(nèi)網(wǎng)中的W5500EVB板建立連接。如圖3所示 PC2往路由器36.36.141.53:12222 發(fā)送的信息,將被轉(zhuǎn)發(fā)到內(nèi)網(wǎng)192.168.1.110:5000。

          圖3端口映射網(wǎng)絡(luò)圖

          2.2 UPnP自動端口映射軟件實(shí)現(xiàn)流程
          本文中W5500將作為控制點(diǎn)的角色出現(xiàn),并不需要實(shí)現(xiàn)展示的功能,在UPnP協(xié)議上僅實(shí)現(xiàn)了Search的過程,對網(wǎng)絡(luò)中的Advertise消息不做處理。下面讓我看看程序是如何實(shí)現(xiàn)的,首先看一下整個(gè)程序流程圖如圖4,對整個(gè)程序有個(gè)大致的了解:

          圖4 主程序流程圖
          如圖所示:
          程序首先進(jìn)行初始化,初始化CPU資源和W5500然后使用DHCP協(xié)議自動獲取IP,如果獲取失敗就設(shè)定為固定IP,DHCP的過程在此不再詳細(xì)介紹。
          獲取IP地址后,先使用SSDP發(fā)現(xiàn)設(shè)備。W5500打開本地一個(gè)socket,再使用UDP組播地址(255.255.255.255)發(fā)送SSDP M-SEARCH信息搜索在相同子網(wǎng)中的IGD(Internet Gateway Device),設(shè)備收到SSDP M-SEARCH信息后會回復(fù)數(shù)據(jù)包。如圖5 所示:

          圖5發(fā)送SSDP廣播包和收到回復(fù)信息

          通過解析收到數(shù)據(jù)包我們可以得到:LOCATION:設(shè)備描述文件的URL。通過Location信息,我們能夠獲得IGD的IP地址和端口號。利用這個(gè)IP地址和端口號生成HTTP GET Header,W5500重新打開一個(gè)Socket,然后再將其發(fā)送給IGD來獲取IGD的服務(wù)描述。當(dāng)IGD接收到HTTP GET Header后,IGD將會讓W(xué)5500_Control_Piont獲知它的設(shè)備描述和服務(wù)描述。發(fā)送的數(shù)據(jù)包如圖6。
          圖6還顯示了設(shè)備回復(fù)的部分信息,從中我們可以看到設(shè)備描述和服務(wù)描述,WANIPConnection對應(yīng)端口映射服務(wù),可以看到該路由設(shè)備有該項(xiàng)服務(wù)。在WANIPConnection服務(wù)描述中可以得到Control URL和eventSubURL,一個(gè)用來控制,一個(gè)用來訂閱。


          圖6發(fā)送獲取描述單播包和收到的回復(fù)信息
          執(zhí)行完上面的發(fā)現(xiàn)設(shè)備后在串口上為用戶提供了一個(gè)菜單頁面,通過在菜單中輸入命令,我們可以交互添加端口和刪除端口。
          首先是添加端口,利用IGD的IP地址、端口號以及控制URL來完成XML,然后通過HTTP POST method-basedSOAP執(zhí)行AddPortMapping操作。其執(zhí)行過程如圖7流程圖所示:

          圖7 AddPortProcess()函數(shù)流程圖
          在SOAP描述中可以看到ExternalPort、Protocol、InternalPort以及控制點(diǎn)IP地址等信息,如圖8 AddPort的報(bào)文所示。
          IGD在收到這樣的控制請求后,會給出一系列應(yīng)答,如果應(yīng)答中包含收到“uuidAddPort Success!!”后,表明端口映射添加成功。添加端口映射成功后,就可以在外網(wǎng)訪問內(nèi)網(wǎng)中指定IP地址和端口了,如果添加了TCP端口映射,可以建立連接并發(fā)送數(shù)據(jù)測試。


          圖8 AddPort的報(bào)文
          刪除端口與添加端口格式一樣,都是通過HTTP POST method-basedSOAP執(zhí)行DeletePortMapping操作,只需要ExternalPort和Protocol兩個(gè)參數(shù)即可。在此不再詳細(xì)敘述,請參考我們的程序代碼下載鏈接:http://pan.baidu.com/s/1roc70

          三 自動端口映射功能測試
          程序講解完畢后將講解如何測試我們寫的W5500EVB程序,看是不是能夠達(dá)到我們的實(shí)現(xiàn)目的,實(shí)現(xiàn)控制路由器端口映射功能。


          關(guān)鍵詞: STM32W5500端口映

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();