UPnP端口映射實現過程(一)

第一步是發現

控制點再往上搜索感興趣的設備,而設備向網絡中宣告其服務。對於自動端口映射來說就是發現帶UPnP功能的路由器。這一過程主要分兩步。第一步,使用數據包套接字向239.255.255.250:1900,發送一條多播請求。

M-SEARCH * HTTP/1.1         SSDH協議定義的搜索方法請求

HOST: 239.255.255.250:1900  保留地址,用於多點傳送

MAN:"ssdp:discover"
MX:3                       
 最長等待時間
ST:UPnP:rootdevice         
 搜索目標

第二步,網絡中存在UPnP設備的話,爲了被找到,設備必須向發送查找的多播通道的源IP和端口發送響應消息,所以你可以從239.255.255.250:1900這個地址接受到響應消息,其中有設備描述URL

HTTP/1.1 200 OK
CACHE-CONTROL: max-age=100
DATE: Sun, 15 Jan 2006 06:51:02 GMT
EXT:
LOCATION: http://192.168.14.1:1900/igd.xml
SERVER: TP-LINK Wireless Router WR541G/5, UPnP/1.0
ST: upnp:rootdevice

USN:uuid:upnp-InternetGatewayDevice-192168141678900001::upnp:rootdevice

第二步是描述。

通過URL,下載XML文件,並從中找到有關設備的類型,服務類型,控制URL,時間觸發URL等。同樣分兩步,首先下載描述文件。第二步解析該XML文件

第三步是控制。

通過第二步獲得的控制URL,通過向其中發送控制消息來實現某些功能,對於自動端口映射來說是查看,增加,刪除等

·  增加端口映射。"AddPortMapping"

·"<NewRemoteHost></NewRemoteHost>\n"                                           "<NewExternalPort>ExternalPort</NewExternalPort>\n"                          "<NewProtocol>Protocol</NewProtocol>\n"                                      "<NewInternalPort>InternalPort</NewInternalPort>n"
"<NewInternalClient>
InternalClient</NewInternalClient>\n"                
"<NewEnabled>1</NewEnabled>\n"
"<NewPortMappingDescription>
PortMappingDescription"                         "</NewPortMappingDescription>\n"      
"<NewLeaseDuration>
LeaseDuration</NewLeaseDuration>\n"

·  刪除端口映射 "DeletePortMapping"

·"<NewRemoteHost></NewRemoteHost>\n" "<NewExternalPort>ExternalPort</NewExternalPort>\n"                          "<NewProtocol>Protocol</NewProtocol>\n"

· 獲得端口映射信息 "GetGenericPortMappingEntry"

·"<NewPortMappingIndex>PortMappingIndex</NewPortMappingIndex>"                 "<NewRemoteHost></NewRemoteHost>\n"   "<NewExternalPort></NewExternalPort>\n" "<NewProtocol></NewProtocol>\n"     "<NewInternalPort></NewInternalPort>\n" "<NewInternalClient></NewInternalClient>\n" "<NewEnabled>1</NewEnabled>\n"  "<NewPortMappingDescription>"  "</NewPortMappingDescription>\n"            "<NewLeaseDuration></NewLeaseDuration>\n"

ExternalPort 外部端口。InternalPort內部端口。這 兩者一般就填映射的端口。Protocal TCPUDPInterClient 一般就是本地IP地址。PortMappingDescription 填寫端口映射的描述,比如什麼程序建立了這個端口。LeaseDuration 是映射的持續時間,用0表示不永久。PortMappingIndex 是端口映射索引,路由上第幾個映射。

發佈了28 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章