项目概述
【免费下载链接】miniupnp UPnP IGD implementation 项目地址: https://gitcode.com/gh_mirrors/mi/miniupnp
MiniUPnP是一个轻量级的UPnP(通用即插即用)协议实现,主要用于网络地址转换(NAT)设备的端口映射功能。该项目由Thomas Bernard开发维护,包含多个组件,满足不同的UPnP应用场景需求。
项目组件详解
miniupnpc - UPnP客户端库
MiniUPnP客户端是一个UPnP IGD控制点,为应用程序提供UPnP功能支持。该组件包含以下主要功能:
upnpDiscover()- 发现网络中的UPnP设备UPNP_GetValidIGD()- 获取有效的IGD设备GetUPNPUrls()- 获取UPnP设备的URL信息- 各种UPNP_*方法调用
miniupnpd - UPnP守护进程
MiniUPnP守护进程是一个UPnP IGD实现,同时支持NAT-PMP和端口控制协议。它作为网关设备为网络中的UPnP客户端提供NAT穿越服务。
minissdpd - SSDP管理守护进程
SSDP管理守护进程用于管理SSDP协议,可与miniupnpc、miniupnpd、ReadyMedia等软件协同工作。
异步版本组件
项目还提供了异步版本的UPnP客户端:
miniupnpc-async/- 使用异步(非阻塞)套接字的UPnP IGD控制点概念验证miniupnpc-libevent/- 使用libevent2的UPnP IGD控制点
编译与安装
基本编译
在项目根目录下执行:
gmake
或者在某些系统上使用:
make
Windows平台编译
对于MinGW环境:
mingw32make.bat
对于MS Visual C++环境,使用msvc/子目录中提供的解决方案和项目文件。
系统安装
要将库和头文件安装到系统中:
su
make install
exit
或者安装到指定位置:
INSTALLPREFIX=/usr/local make install
核心功能使用
端口映射操作
通过upnpc.c示例程序可以执行以下操作:
- 添加端口映射
- 删除端口映射
- 查询端口映射状态
- 获取外部IP地址
Python模块支持
项目支持构建Python模块:
make pythonmodule
make installpythonmodule
平台支持
MiniUPnP在以下平台编译通过:
- Linux
- FreeBSD
- OpenBSD
- MacOS X
- AmigaOS
- Cygwin
配置与部署
Linux防火墙配置
由于UPnP协议的设计特点,Linux netfilter不会跟踪UPnP多播客户端请求的单播响应。为解决此限制,可以使用自定义ipset哈希表。
IPv4配置规则:
ipset create upnp hash:ip,port timeout 3
iptables -A OUTPUT -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j SET --add-set upnp src,src --exist
iptables -A INPUT -p udp -m set --match-set upnp dst,dst -j ACCEPT
iptables -A INPUT -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
IPv6配置规则:
ipset create upnp6 hash:ip,port timeout 3 family inet6
ip6tables -A OUTPUT -d ff02::c/128 -p udp -m udp --dport 1900 -j SET --add-set upnp6 src,src --exist
ip6tables -A OUTPUT -d ff05::c/128 -p udp -m udp --dport 1900 -j SET --add-set upnp6 src,src --exist
ip6tables -A INPUT -p udp -m set --match-set upnp6 dst,dst -j ACCEPT
ip6tables -A INPUT -d ff02::c/128 -p udp -m udp --dport 1900 -j ACCEPT
ip6tables -A INPUT -d ff05::c/128 -p udp -m udp --dport 1900 -j ACCEPT
项目结构
MiniUPnP项目采用模块化设计,各组件相对独立:
- 客户端库位于miniupnpc/目录
- 守护进程位于miniupnpd/目录
- SSDP管理守护进程位于minissdpd/目录
开发集成
要在应用程序中使用libminiupnpc,需要:
- 链接libminiupnpc.a(或.so)
- 包含相关头文件:miniupnpc.h、upnpcommands.h、miniwget.h等
编译时使用:
#include <miniupnpc/miniupnpc.h>
链接时使用:
-lminiupnpc
技术支持与社区
- 官方邮箱:miniupnp@free.fr
- 网络论坛:miniupnp.tuxfamily.org/forum/
- Bug报告:GitHub Issues
通过MiniSSDPd运行可以加速发现过程,提升UPnP设备发现的效率。
【免费下载链接】miniupnp UPnP IGD implementation 项目地址: https://gitcode.com/gh_mirrors/mi/miniupnp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



