UPnP 端口映射原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengfengdiandia/article/details/85009544

一. 简介

实现 UPnP 条件:

  • 路由器需支持 UPnP,且需启用该功能。
  • 操作系统需支持 UPnP,且操作系统需启用该功能。
  • 软件需支持 UPnP,如 p2p 下载软件等,且需启用该功能。

简单来理解的话,UPnP 是一种设备间通信协议,功能是建立设备和 NAT 网关的端口映射,目的是希望接入 Internet 的任意两个设备在 LAN 下可以相互通信。

二. 协议

2.1. 发现

设备加入网络时,通过简单服务发现协议(SSDP)寻找网络上可用设备。

Internet Gateway Device(IGD)互联网网关设备协议是一种常见的自动配置端口映射通信协议。

2.2. 控制

控制消息是通过简单对象访问协议(SOAP)用 XML 来描述的,通过返回动作的值来回应控制消息。

三. miniupnp

https://github.com/miniupnp/miniupnp

http://miniupnp.free.fr/

Ubuntu 安装 upnpc 命令:

sudo apt install miniupnpc

3.1. upnpc 常用命令介绍

  • 添加映射端口,如映射 192.168.110.146 的 TCP 9999 端口到外网的 9999 端口
upnpc -a 192.168.110.146 9999 9999 TCP
  • 删除映射端口
upnpc -d 9999 TCP
  • 列出映射端口
upnpc -l

3.2. miniupnp 映射部分代码简单逻辑

upnpDiscover() // 返回找到的所有设备的链表
UPNP_GetValidIGD() // 从设备链表中找到有效的 IGD(Internet Gateway Device)网络网关设备
UPNP_AddPortMapping() // 端口映射 -a
  -> soapPostSubmit() // 发送 SOAP 请求
  -> getHTTPResponse() // 获取相应的响应
RemoveRedirect() // 移除 -d
  -> UPNP_DeletePortMapping()

参考

http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/201206/747039_97665_0.htm

https://www.homenethowto.com/ports-and-nat/upnp-automatic-port-forward/

https://zh.wikipedia.org/wiki/UPnP

猜你喜欢

转载自blog.csdn.net/fengfengdiandia/article/details/85009544