upnp

前言:

在路由器上,upnp的实现工具普遍都是miniupnpd,miniupnpd是一个实现了upnp协议的opensource项目名称。这篇就以最新的miniupnpd版本来介绍从网站下载下来的源码,怎么一步一步的在交叉编译环境上编译并且如何使用又是如何验证的。

1.下载

http://miniupnp.free.fr/files
miniupnpd-2.1.tar.gz

2.解压缩
tar -zxvf miniupnpd-2.1.tar.gz
3.编译

 1 ./genconfig.sh
 2 ./genconfig.sh --leasefile --vendorcfg
 3 Step1: 把 Makefile.linux中的如下行屏蔽掉
 4 # LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l libssl) # line 156
 5 Step2:
 6 IPTABLESPATH=/home/jennifer/Temp/iptables-1.8.5 make -f Makefile.linux CC=/opt/toolchain-mips_24kc+nomips16_gcc-6.3.0_musl-1.1.16/bin/mips-openwrt-linux-gcc
 7 Step3:把 Makefile.linux中 的 名为 install的 target修改 为如下
 8 DESTDIR = $(shell pwd)/rootfs
 9 install:
10 $(INSTALL) -d $(DESTDIR)$(SBININSTALLDIR)
11 $(INSTALL) miniupnpd $(DESTDIR)$(SBININSTALLDIR)
12 $(INSTALL) -d $(DESTDIR)$(ETCINSTALLDIR)
13 $(INSTALL) netfilter/iptables_init.sh $(DESTDIR)$(ETCINSTALLDIR)
14 $(INSTALL) netfilter/iptables_removeall.sh $(DESTDIR)$(ETCINSTALLDIR)
15 $(INSTALL) netfilter/ip6tables_init.sh $(DESTDIR)$(ETCINSTALLDIR)
16 $(INSTALL) netfilter/ip6tables_removeall.sh $(DESTDIR)$(ETCINSTALLDIR)
17 $(INSTALL) netfilter/miniupnpd_functions.sh $(DESTDIR)$(ETCINSTALLDIR)
18 $(INSTALL) --mode=0644 -b miniupnpd.conf $(DESTDIR)$(ETCINSTALLDIR)
19 $(INSTALL) -d $(DESTDIR)$(PREFIX)/etc/init.d
20 $(INSTALL) linux/miniupnpd.init.d.script $(DESTDIR)$(PREFIX)/etc/init.d/miniupnpd
21 # $(INSTALL) -d $(DESTDIR)$(MANINSTALLDIR)
22 # $(INSTALL) --mode=0644 miniupnpd.8 $(DESTDIR)$(MANINSTALLDIR)
23 # gzip -f $(DESTDIR)$(MANINSTALLDIR)/miniupnpd.8
24 Step4:
25 make -f Makefile.linux install

备注:

要依赖iptables,在编译iptables 应用层代码时,./configure 要务必加上选项--enable-shared, 另外在编译upnp 代码时,要通过IPTABLESPATH=指明iptables

应用层代码的路径。

执行完结果如下:

 1 jennifer@cdBSCMPL03:~/Temp/miniupnpd-2.1$ ls -l rootfs/* rootfs/*/*
 2 rootfs/etc:
 3 total 8
 4 drwxr-xr-x 2 jennifer jennifer 4096 Jul 9 15:57 init.d
 5 drwxr-xr-x 2 jennifer jennifer 4096 Jul 9 15:55 miniupnpd #this is a shell script
 6 rootfs/etc/init.d:
 7 total 4
 8 -rwxr-xr-x 1 jennifer jennifer 1640 Jul 9 15:54 miniupnpd
 9 rootfs/etc/miniupnpd:
10 total 28
11 -rwxr-xr-x 1 jennifer jennifer 673 Jul 9 15:54 ip6tables_init.sh
12 -rwxr-xr-x 1 jennifer jennifer 444 Jul 9 15:54 ip6tables_removeall.sh
13 -rwxr-xr-x 1 jennifer jennifer 1203 Jul 9 15:54 iptables_init.sh
14 -rwxr-xr-x 1 jennifer jennifer 1448 Jul 9 15:54 iptables_removeall.sh
15 -rw-r--r-- 1 jennifer jennifer 5117 Jul 9 15:54 miniupnpd.conf
16 -rwxr-xr-x 1 jennifer jennifer 1327 Jul 9 15:54 miniupnpd_functions.sh
17 rootfs/usr:
18 total 4
19 drwxr-xr-x 2 jennifer jennifer 4096 Jul 9 15:54 sbin
20 rootfs/usr/sbin:
21 total 208
22 -rwxr-xr-x 1 jennifer jennifer 209904 Jul 9 15:54 miniupnpd
23 jennifer@cdBSCMPL03:~/Temp/miniupnpd-2.1$

4.使用

在使用之前,一定要仔细阅读下编译后产生的几个脚本文件,主要是看他们的相互联系,涉及的shell 指令在相应平台上是否可用,必要时要做出适当的调整。其中ip6tables 开头的脚本是要编译时候在config.h 有” #define  ENABLE_IPV6才有用ENABLE_IPV6”才有用。
rootfs/etc/init.d/miniupnpd
rootfs/etc/miniupnpd/ip6tables_init.sh
rootfs/etc/miniupnpd/ip6tables_removeall.sh
rootfs/etc/miniupnpd/iptables_init.sh
rootfs/etc/miniupnpd/iptables_removeall.sh
rootfs/etc/miniupnpd/miniupnpd_functions.sh
脚本启动进程的方法:
sh /usr/sbin/iptables_init.sh
cp -f /etc/miniupnpd.conf /var/miniupnpd.conf
/usr/sbin/miniupnpd -f /var/miniupnpd.conf
脚本停止进程的方法:
sh /usr/sbin/iptables_removeall.sh
killall -15 miniupnpd

5.配置文件
命令启动方式:/usr/sbin/miniupnpd -f /var/miniupnpd.conf

 1 # cat /var/miniupnpd.conf
 2 ext_ifname=ppp0.1
 3 listening_ip=br0
 4 port=0
 5 enable_natpmp=yes
 6 enable_upnp=yes
 7 bitrate_up=1000000
 8 bitrate_down=10000000
 9 secure_mode=no
10 system_uptime=yes
11 notify_interval=30
12 clean_ruleset_interval=600
13 uuid=DFF4486F-FFAB-0018-00D9-ACF1EC5CDB23
14 serial=ACF1CE6DEC10
15 model_number=1
16 deny 0-1024 0.0.0.0/0 0-1024

6.验证

方法1:

 

 

 

 

方法2:

 

 

 

方法3:

 

 

 

posted on 2020-09-17 14:08  LiveWithACat  阅读(1786)  评论(0编辑  收藏  举报