新聞中心

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

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

作者: 時間: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)的,首先看一下整個程序流程圖如圖4,對整個程序有個大致的了解:

圖4 主程序流程圖
如圖所示:
程序首先進(jìn)行初始化,初始化CPU資源和W5500然后使用DHCP協(xié)議自動獲取IP,如果獲取失敗就設(shè)定為固定IP,DHCP的過程在此不再詳細(xì)介紹。
獲取IP地址后,先使用SSDP發(fā)現(xiàn)設(shè)備。W5500打開本地一個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地址和端口號。利用這個IP地址和端口號生成HTTP GET Header,W5500重新打開一個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,一個用來控制,一個用來訂閱。


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

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


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

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


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

評論


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

關(guān)閉