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 是端口映射索引,路由上第几个映射。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不被定义的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值