• 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:

     

  • 相关阅读:
    PostgreSQL 9.6.2版本在centOS下的安装和配置
    postgreSQL 创建user表时引发的表名大写与双引号问题
    Go JSON嵌套解析失败
    面试杂谈:面试程序员时都应该考察些什么?<转>
    Golang bash脚本自动创建一个go工程
    iOS Debug心得 (持续更新)
    iOS 上传APP到AppStore 卡在 Authenticating with the iTunes store 提示
    iOS 应用打包 设备兼容性问题(Build Active Architecture Only)
    Go 使用自定义包(package)
    Go 连接PostgreSQL数据库
  • 原文地址:https://www.cnblogs.com/aimmiao/p/13684826.html
Copyright © 2020-2023  润新知