新聞中心

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

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

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


二、UPnP路由器端口映射控制點(diǎn)在W5500實(shí)現(xiàn)
2.1 實(shí)驗(yàn)硬件平臺(tái)和實(shí)驗(yàn)?zāi)康?br />通過(guò)以上講解,相信大家對(duì)UPnP也有一定認(rèn)識(shí)了,下面就讓我們開(kāi)始我們實(shí)驗(yàn)之旅。我們選用的實(shí)驗(yàn)平臺(tái)為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自動(dòng)端口映射軟件實(shí)現(xiàn)流程
本文中W5500將作為控制點(diǎn)的角色出現(xiàn),并不需要實(shí)現(xiàn)展示的功能,在UPnP協(xié)議上僅實(shí)現(xiàn)了Search的過(guò)程,對(duì)網(wǎng)絡(luò)中的Advertise消息不做處理。下面讓我看看程序是如何實(shí)現(xiàn)的,首先看一下整個(gè)程序流程圖如圖4,對(duì)整個(gè)程序有個(gè)大致的了解:

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

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

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


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

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


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

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


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

評(píng)論


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

關(guān)閉