UPnP概述
UPnP 体系允许 PC 间的点对点连接、网际互连和无线设备。它是一种基于 TCP/IP、UDP 和 HTTP 的分布式、开放体系。
UPnP 使得任意两个设备能在 LAN 控制设备的管理下相互通信。其特性包括:
- 传输介质和设备独立。UPnP 技术可以应用在许多媒体上,包括电话线、电线(电力线通信PLC)、以太网、红外通讯技术(IrDA)、无线电(Wi-Fi,蓝牙)和Firewire(1394)。无需任务设备驱动;而是采用共同的协议。
- 用户界面(UI)控制。UPnP 技术使得设备厂商可以通过网页浏览器来控制设备并进行交互。
- 操作系统和程序语言独立。任何操作系统和程序语言均可以用于构建 UPnP产品。UPnP 并没有设定或限制运行于控制设备上的应用程序 API;OS厂商可以创建满 足他们客户需求的 API。UPnP使得厂商可以像开发常规应用程序一样来控制设备 UI 和交互。
- 基于因特网技术。UPnP 构建于 IP, TCP, UDP, HTTP,和 XML 等许多协议之上。
- 编程控制。UPnP 体系同时支持常规应用程序编程控制。
- 扩展性。每个 UPnP 设备都可以有构建于基本体系之上、与具体设备相关的服务。
UPnP 支持零配置,"看不见的网络" 和自动检测;任何设备能自动加入一个网络, 获取一个 IP 地址,宣布自己的名字,根据请求检查自身功能以及检测出其它设备 和它们的功能。DHCP 和DNS 服务是可选的,并只有它们在网络上存在的时候才会 使用。设备可以自动离开网络而不会遗留下任何不需要的状态信息。
UPnP 的基础是 IP 地址解析。每一个设备都应当有一个 DHCP 客户端并在连入网 络的时候自动搜索 DHCP 服务。如果没有找到 DHCP 服务,也就是说网络是缺乏管 理状态,那么设备必须给自己设定一个地址。如果在和 DHCP 服务器交互的过程中, 设备获得了一个域名(比如通过 DNS 服务器或者 DNS 传递),那么它应当在接下 来的网络操作中使用这个域名;否则,设备应当使用它的 IP 地址。
1. 添加 upnp支持
详情参阅linux-igd官方文档 http://linux-igd.sourceforge.net/documentation.php
ushare:http://sourceforge.net/projects/ushare
linuxigd和libupnp
linuxigd编译需要libupnp(库的支持,libupnp.so。
# tar xzvf libupnp-1.3.1.tar.gz
#./configure --prefix=/usr
# make
# make install
直接X86编译:
# tar xzvf linuxigd-1.0.tar.gz
# make
# make install
在当前目录或者/usr/sbin下生成upnpd。
查看linuxigd源码包下的文档。告诉你如何使用和如何调试。
# route add -net 239.0.0.0 netmask 255.0.0.0 eth0
# upnpd -f eth0 eth0 //前台启动
upnpd[1078]: AddPortMap: DevUDN: uuid:75802409-bccb-40e7-8e6c-fa095ecce13e ServiceID: urn:upnp-org:serviceId:WANIPConn1 RemoteHost: (null) Prot: TCP ExtPort: 51413 Int: 10.18.13.83.51413
upnpd[1078]: AddPortMap: DevUDN: uuid:75802409-bccb-40e7-8e6c-fa095ecce13e ServiceID: urn:upnp-org:serviceId:WANIPConn1 RemoteHost: (null) Prot: UDP ExtPort: 51413 Int: 10.18.13.83.51413
upnpd[1078]: DeletePortMap: Proto:TCP Port:51413
upnpd[1078]: DeletePortMap: Proto:UDP Port:51413
打开一个支持UPnP协议的软件(BT、电驴、MSN Manager),并新建一个下载任务
以BT为例:
AddPortMap表示PT进程已经开始,DeletePortMap代表PT进程已经结束
# upnpd eth0 eth0 //daemon进程
发现upnpd在后台运行时,需要启动syslogd进程,否则刚启动就被停掉了!!
交叉编译移植:
交叉编译后,拷贝/usr/sbin/upnpd及其依赖库,/etc/linuxigd/*,/etc/upnpd.conf。
2. 架设upnp服务器
upnp服务器有好多种,见:http://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#Software
下面讲述ushare(轻量级)ushare
直接X86编译:
# tar xzvf ushare-0.9.7.tar.gz
# cd ushare-0.9.7
# ./configure --prefix=/usr/ushare
# make && make install
启动ushare
# /usr/ushare/bin/ushare -f /etc/ushare/conf -D
详细方式查看相关文档即可。
打开浏览器,地址栏键入:http://192.168.13.133:49153/web/ushare.html就可以看到服务器提供的web界面了!
49153是服务器监听的端口号。
交叉编译ushare:
# ./configure --help
# ./configure --prefix=/usr/app/ushare --cross-compile --cross-prefix=/usr/local/cross-build/cross/bin/arm-mv5sft-linux-gnueabi- --with-libupnp-dir=/usr/local/cross-build/rootfs/usr/lib