树莓派作家庭服务器(DLNA + NAS)
1、流媒体播放服务:利用DLNA实现电视、手机、电脑播放其上面的媒体文件。
2、文件共享:利用samba实现手机、电脑登终端与服务器的文件共享。
3、自动下载:利用aria2c实现高速下载
1、准备工作
准备一块硬盘,以及一个移动硬盘盒(支持2.5/3.5寸的硬盘,以及外接供电)
把硬盘分区,并格式化为ext3 或者 ext4 格式(我是直接挂在Ubuntu下面格式化的)
2、挂载硬盘
树莓派开机后,我们把移动硬盘盒用USB线连接到树莓派,我们通过ssh远程连接上。然后运行 df -h 查看分区情况。
pi@raspberrypi ~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 7.2G 4.1G 2.8G 60% / devtmpfs 460M 0 460M 0% /dev tmpfs 93M 384K 93M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 186M 0 186M 0% /run/shm /dev/mmcblk0p1 56M 20M 37M 35% /boot # 此时并没有挂载 pi@raspberrypi ~ $ ls /dev/sd* /dev/sda /dev/sda1
我们创建一个 share 文件夹,然后将我们的硬盘挂载到此目录下。
pi@raspberrypi ~ $ sudo mkdir /share pi@raspberrypi ~ $ sudo chown pi:pi /share pi@raspberrypi ~ $ sudo mount /dev/sda1 /share pi@raspberrypi ~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 7.2G 4.1G 2.8G 60% / devtmpfs 460M 0 460M 0% /dev tmpfs 93M 384K 93M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 186M 0 186M 0% /run/shm /dev/mmcblk0p1 56M 20M 37M 35% /boot /dev/sda1 147G 60M 140G 1% /share # 我们可以看到已经成功挂载
解决自动挂载问题:
上面有个问题就是,当树莓派关机或重启、以及硬盘插拔后,并不会自动挂载 /dev/sda1 , 怎么办呢? 通过修改 /etc/fstab文件,实现硬盘开机自动挂载。
fstab文件其实就是一个表格, 表格各列的含意如下:
第一列: 磁盘分区名/卷标, 一般是/dev/sdaN(N表示正整数)
第二列: 挂载点, 我们在这里把/dev/sda1挂到/share上。
第三列: 缺省设置, 一般用defautls。
第四列: 是否备份: 0——表示不做 dump 备份; 1——表示要将整个
里的内容备份; 2 也表示要做 dump 备份, 但该分区的重要性比 1 小。 第五列: 检测顺序: 0——不进行检测; 根分区(/) , 必须填写 1, 其它的都不能填写 1。 如果有分区填写大于 1的话, 则在检查完根分区后, 从小到大依次检查下去。
pi@raspberrypi ~ $ sudo vi /etc/fstab proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 /dev/sda1 /share ext3 defaults 0 0 # 添加这一行信息 # a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
3、安装samba
sudo apt-get update sudo apt-get install samba samba-common-bin
安装完成后,修改其配置文件 /etc/samba/smb.conf, 在文件最后面添加以下内容:
# ====================== [share] #共享文件的名称, 将在网络上以此名称显示 path = /share #共享文件的路径 valid users = pi #允许访问的用户 browseable = yes #允许浏览 public = yes #共享开放 writable = yes #可写 # =========================
修改完成后,保存。然后重新启动 samba服务, 并添加共享用户:
# 重启 samba pi@raspberrypi ~ $ sudo /etc/init.d/samba restart [ ok ] Stopping NetBIOS name server: nmbd. [ ok ] Starting NetBIOS name server: nmbd. [ ok ] Stopping SMB/CIFS daemon: smbd. [ ok ] Starting SMB/CIFS daemon: smbd. [ ok ] Stopping Samba AD DC daemon: samba. # 添加samba共享用户 pi@raspberrypi ~ $ sudo smbpasswd -a pi New SMB password: Retype new SMB password: Added user pi.
测试samba共享, 在win7 系统上,开始 - 运行: \\192.168.3.104 (你的树莓派IP地址),进行访问:
我们双击打开 share 目录,需要输入刚才创建的 pi 用户以及密码,进行身份验证。 此时,我们可以创建文件进行测试,看是否有创建、 删除权限。
然后,为了方便,我们可以把share目录添加到映射,下载访问就不用 \\192.168.3.104 这种方式了。
打开 计算机 - 映射网络驱动器
添加完成后,会提示输入用户名和密码,并且把 “记住我的凭据” 勾选上。
4、安装DLNA实现流媒体服务器
DLNA主要面向媒体资源(比如视频、 音乐) 实现网内共享, 具体步骤如下:
1、安装 minidlna
# 更新软件源 pi@raspberrypi ~ $ sudo apt-get update # 安装 minidlna pi@raspberrypi ~ $ sudo apt-get install minidlna
2、设置配置文件
设置/etc/minidlna.conf文件, 在文件尾部添加如下内容:
friendly_name=CubieTruck DLNA Server
media_dir=A,/mnt/data/mp3 # A代表Audio音频,后面加上自己想要的路径
media_dir=V,/mnt/data/cinema # V代表Video影像,后面也是加上自己的路径
media_dir=P,/mnt/data/picture #P代表Picture照片,路径自己加上
db_dir=/mnt/data/var/minidlna #刚刚设定的 database 目录,或者使用预设的 /var/lib/minidlna , 把目录的所有者所属组都设置为 minidlna 。
pi@raspberrypi ~ $ sudo vi /etc/minidlna.conf # followed by a comma, as so: # * "A" for audio (eg. media_dir=A,/var/lib/minidlna/music) # * "P" for pictures (eg. media_dir=P,/var/lib/minidlna/pictures) # * "V" for video (eg. media_dir=V,/var/lib/minidlna/videos) # ============= media_dir=A,/share/DLNA/Music media_dir=P,/share/DLNA/Picture media_dir=V,/share/DLNA/Video db_dir=/share/DLNA/db log_dir=/share/DLNA/logs # =============
3、创建上述目录
pi@raspberrypi ~ $ cd /share pi@raspberrypi /share $ ls lost+found pi@raspberrypi /share $ mkdir DLNA pi@raspberrypi /share $ mkdir DLNA/{Music,Picture,Video,db,logs} pi@raspberrypi /share/DLNA $ sudo chown minidlna:minidlna db
4、重启 minidlna
# 重启 pi@raspberrypi ~ $ sudo /etc/init.d/minidlna restart # 重新加载配置 pi@raspberrypi ~ $ service minidlna force-reload # 查看状态 pi@raspberrypi ~ $ sudo /etc/init.d/minidlna status [ ok ] minidlna is running.
最好把 /etc/minidlna.conf 中的 inotify = yes 选项打开,这样有新的文件时就会自动加入。但是如果媒体资料很多的时候,需要修改 /etc/sysctl.conf 档案里面新增:
fs.inotify.max_user_watches = 100000 #依照你自己所需,預設值好像是8192而已 # 修改完成后,重新载入配置生效 sysctl -p # 然后到 /proc/sys/fs/inotify/max_user_watches 这个文件是否已经改变
5、添加一些文件(音乐,视频,图片)到树莓派上(可以利用samba直接拷贝即可),但是通过树莓派,感觉很慢。
接下来, 我们可以打开 win7 的开始菜单 - 所有程序, 打开 Windows Media Player
随便哪个都可以,看心情。 在左下角的列表栏其他媒体库出现 raspberrypi , 点击后,可选择音乐,视频等。双击即可播放了,但是有一个问题就是会乱码。。。
6、 手机上进行播放
手机上实现网络共享, 可安装es file explorer软件, 在其网络处进行设置, 设置方法与电脑基本一样, 这里不再详
述。 设置后, 文件均可浏览, 媒体文件双击可以在线播放。
也可以直接使用updp播放器, 这里我安装的是moliplayer, 可以在其附近设备里, 直接找到raspberrypi:root, 访问其媒体中心, 注意, 这里是访问的DLNA共享, 所以不需要再输入密码。
7、 智能电视进行播放
智能电视一般都是用的android系统, 与手机基本一样。唯一的不同就是程序支持的分辨率以及要用遥控器操作。
限制存取装置:
DLNA是设计给家庭环境使用,它假设能够连接到家庭网络的设备都是通过某种程度的验证(比如无线网络密码),因此它本身并没有提供认证权限相关的设定,所有能连接到网络的设备都可以播放 server上的媒体资源。但是我们能不能做一些限制呢? 能。
如果对安全性要求比较强的话,还可以添加防火墙规则, minidlna用的 port 是 1900(for UPnP)和 8200(for HTTP media straming)
ufw allow from 192.168.1.0/24 to any port 1900 proto udp ufw allow from 192.168.1.0/24 to any port 8200 proto tcp
还有一种常见的解决方法是使用: MAC address 来作为区分。通常,在网络中,每一台设备都有一个唯一的MAC address, 我们可以设置只有登记的白名单上的设备才可以浏览媒体资源。
阻止MAC地址为XX:XX:XX:XX:XX:XX主机的所有通信: iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
其他:
1、win7 开起相关服务:
2、然后选择更改高级共享中心设置,在公用中单击选择流媒体选项(其他选项可以参照图片设置),选择启用媒体流。
3、某些 mp3 中文名称 乱码
用win7 mediaplay查看minidlna多媒体服务器文件,有些中文文件名显示乱码,有些就正常。
目前Linux中流行的很多播放器经常不能正确显示如歌曲名、专辑名等MP3 tag信息,经过有些工具转换后,标签又不能被Windows识别。MP3的歌曲名、艺术家、专辑名等信息都以一定的编码格式存储在MP3标签中。简单地说,乱码出现的原因就是播放器未能准确识别出MP3标签的中文编码格式。
具体的说,现在MP3文件的标签主要有几种标准:ID3v1、ID3v2(现在常见的又分为2.3和2.4)、APEv2。
可以从两个角度解决这个问题。一是转换已有MP3文件的标签编码,二是使用支持GBK编码的播放软件。
mp3tagiconv
mp3tagiconv可以修改MP3文件的标签,使其同时能被Linux中的音乐播放软件和Windows Media Player正确识别,且使用方法简便,推荐使用。
mp3tagiconv是一款可用于解决MP3乱码问题的软件。它可以自动探测MP3标签的编码,并以合理的方式重新写入,经过其处理的编码可被Linux、Windows(包括Windows Media Player)和各种移动设备正确识别。
使用方法很简单,在其项目网站( http://code.google.com/p/mp3tagiconv/ )上下载程序,解压后直接运行(适用于仅含中、英文的文档):
$ mp3tagiconv mp3文件路径 $ find . -iname "*.mp3" -print0 | xargs -0 mp3tagiconv
mp3tagiconv 需要 mutagen 的支持,确保之前已经安装。
# The script depends on mutagen to run. Please install it from the repository of your distribution (in Ubuntu: python-mutagen). pi@raspberrypi ~ $ sudo apt-get install python-mutagen pi@raspberrypi ~ $ git clone https://github.com/cxcxcxcx/mp3tagiconv.git pi@raspberrypi ~ $ mp3tagiconv a.mp3 pi@raspberrypi ~ $ mp3tagiconv -e gbk,utf8 b.mp3
mp3tagiconv 唯一很烦的一点就是,每次都会提示
Do you want to save?(y/N) *** Saving...
yes命令,输出很多个y,可以用来对付选择很多y/n的应用。
pi@raspberrypi ~ $ yes | mp3tagiconv *.mp3
使minidlna支持rmvb视频
发现MiniDLNA几乎是最好的DLNA解决方案了,唯一的缺陷就是不支持RMVB格式的视频,不过幸好它是个开源软件。
从这里下载Minidlna 1.1的源代码并解压,然后下载这个补丁包,覆盖源代码中的同名文件,重新编译并运行就好了。
编译minidlna依赖如下的几个包:
libexif
libjpeg
libid3tag
libFLAC
libvorbis
libsqlite3
libavformat
gettext
使用下面的命令安装编译环境:
# 添加源 $ echo "deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free" | sudo tee -a /etc/apt/sources.list # 更新源 $ sudo apt-get update # 安装编译环境依赖包 $ sudo apt-get install build-essential gettext libexif-dev libjpeg-dev \ libid3tag0-dev libFLAC-dev libvorbis-dev libsqlite3-dev libavformat-dev -y # 下载 minidlna 1.1.4 源码 $ wget http://sourceforge.net/projects/minidlna/files/minidlna/1.1.4/minidlna-1.1.4.tar.gz $ tar xf minidlna-1.1.4.tar.gz $ cd minidlna-1.1.4 ## 编辑 ## metadata.c //line 840 else if( strncmp(ctx->iformatctx->name, "matroska", 8) == 0 ) xasprintf(&m.mime, "video/x-matroska"); else if( strcmp(ctx->iformatctx->name, "flv") == 0 ) xasprintf(&m.mime, "video/x-flv"); //----添加---- else if( strcmp(ctx->iformat->name, "rm") == 0 ) xasprintf(&m.mime, "video/x-pn-realvideo"); else if( strcmp(ctx->iformat->name, "rmvb") == 0 ) xasprintf(&m.mime, "video/x-pn-realvideo"); //---结束---- if( m.mime ) goto video_nodlna; ## upnpglobalvars.h // Line 169 "http-get:*:audio/mp4:*," \ "http-get:*:audio/x-wav:*," \ "http-get:*:audio/x-flac:*," \ "http-get:*:application/ogg:*," \ //----add---- "http-get:*:video/x-pn-realvideo:*" //----end---- #define DLNA_FLAG_DLNA_V1_5 0x00100000 #define DLNA_FLAG_HTTP_STALLING 0x00200000 ## utils.c //line 381 ends_with(file, ".m2t") || ends_with(file, ".mkv") || ends_with(file, ".vob") || ends_with(file, ".ts") || ends_with(file, ".flv") || ends_with(file, ".xvid") || //----add---- ends_with(file, ".rm") || ends_with(file, ".rmvb") || //----end---- #ifdef TIVO_SUPPORT ends_with(file, ".TiVo") || #endif ends_with(file, ".mov") || ends_with(file, ".3gp")); # 安装 $ sudo apt-get install autoconf automake autopoint $ ./autogen.sh # 然后配置编译环境: $ ./configure --disable-nls # 编译并安装 $ sudo make && make install
树莓派做下载机
1、安装aria2
更新一下安装源 sudo apt-get update 安装aria2 sudo apt-get install aria2
2、创建配置文件
在/etc目录下创建aria2目录用来存放配置文件: sudo mkdir /etc/aria2 创建空白的aria2.session文件: sudo touch /etc/aria2/aria2.session 创建配置文件 sudo nano /etc/aria2/aria2.conf 在该文件中输入以下内容: #=========文件保存目录自行修改 # dir=/data/download #下载文件保存目录,建议挂载移动硬盘,SD卡经不住这么玩儿 #因为我们是以 pi 用户执行的aria2c 进程,所以这里此目录的读写权限 # sudo chown -R pi:pi /data/download #打开rpc的目的是为了给web管理端用 #configuration file for aria2c enable-rpc=true rpc-allow-origin-all=true rpc-listen-all=true #rpc-listen-port=6800 file-allocation=none disable-ipv6=true disk-cache=32M split=3 max-concurrent-downloads=3 max-connection-per-server=3 max-file-not-found=3 max-tries=5 retry-wait=3 continue=true check-integrity=true log-level=error log=/var/log/aria2.log input-file=/etc/aria2/aria2.session save-session=/etc/aria2/aria2.session dir=/data/download
3、启动aria2
sudo aria2c --conf-path=/etc/aria2/aria2.conf 如果没有提示任何错误信息,那就按ctrl+c停止上面的语句,以Daemon的形式,转为后台运行: sudo aria2c --conf-path=/etc/aria2/aria2.conf -D
4、做成系统服务
sudo nano /etc/init.d/aria2c 内容如下: =============================== #!/bin/sh ### BEGIN INIT INFO # Provides: aria2 # Required-Start: $remote_fs $network # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Aria2 Downloader ### END INIT INFO case "$1" in start) echo "Starting aria2c ..." sudo -u pi aria2c --conf-path=/etc/aria2/aria2.conf -D #sudo -u后面的是你正在使用的用户名,用debian的是pi(没改用户的话) ;; stop) echo "Shutting down aria2c ..." killall aria2c ;; restart) killall aria2c sleep 3 sudo -u pi aria2c --conf-path=/etc/aria2/aria2.conf -D #同上面的一样,根据自己的用户名改pi。 ;; esac exit ============================= 然后设置这个文件的权限。 sudo chmod 755 /etc/init.d/aria2c 测试服务是否可以启动: sudo service aria2c start 添加aria2c服务自动运行: sudo update-rc.d aria2c defaults
5、安装yaaw 实现web管理
需要安装 nginx, 并下载 yaaw 页面。
sudo apt-get update sudo apt-get install nginx 接下来我们来配置Nginx,首先打开配置文件,/etc/nginx/nginx.conf ,按照下面的配置进行修改。 worker_processes 1; #只有一个CPU,单进程即可 worker_connections 256; #一般支持100在线连接就达到raspberry pi的极限了 gzip on; #gzip开启取消前面的#让默认设置生效即可 gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 配置站点属性 vi /etc/nginx/sites-availiable/default server { listen 80; #listen [::]:80 default_server; # 一定要注释掉,ipv6 server_name pi.com; root /var/www/html; #站点存储位置 access_log /var/log/nginx/localhost.access.log; #error_page 404 /404.html; location / { index index.html index.htm ; } } ### sudo nginx -t sudo service nginx start sudo service nginx restart sudo service nginx stop sudo update-rc.d nginx defaults ## 下载 yaaw cd /var/www/html git clone https://github.com/binux/yaaw or git clone http://github.com/wzhy90/yaaw
用浏览器打开yaaw:http://192.168.3.200/yaaw
实现支持迅雷下载:
参考:https://www.qnap.com/i/cn/trade_teach/con_show.php?op=showone&cid=70
简单的说:
打开在浏览器书签,新建书签,地址栏内粘贴以下代码。随便写个书签名称,保存就可以了。
然后登陆迅雷离线,点下你刚刚保存的那个书签,右上角就会出现设置按钮,地址栏内输入http://你的IP:6800/jsonrpc 保存就行了。
然后选中文件,取回本地,就多了个下拉框,点YAAW就开始下载了。
javascript:void((function(){var%20d=document;var%20s=d.createElement('script');s.src='http://126.am/P0z3n1';s.id='TLE_script';d.body.appendChild(s)})())
详细步骤:
手动下载ThunderLixianExporter脚本: https://github.com/binux/ThunderLixianExporter
您需要拥有迅雷会员帐号才能使用此插件
http://xlfans.com/ 您懂的。。。
javascript:void((function(){var d=document;var s=d.createElement('script');s.src='http://s.binux.me/tle.js';s.id='TLE_script';d.body.appendChild(s)})())
登录迅雷离线网站: lixian.xunlei.com, 登录后, 点一下书签中的 ThunderLixianExporter, 然后点击迅雷页面右
上角的配置按钮(小齿轮),配置 Aria2 JSON-RPC Path 。
直接在迅雷离线的『取回本地』的下拉菜单中找到『YAAW』,如果没有出现,多点两次 ThunderLixianExporter 书签,点击后,Aria2就开始下载资源了。
实现百度云盘支持:
简单的说:
在浏览器内添加新书签: 地址输入
javascript:void((function(){var%20d=document;var%20s=d.createElement('script');s.src='http://jsshare.duapp.com/test.js';d.body.appendChild(s)})())
名字随便输,保存。然后打开,百度网盘,点下刚刚添加的书签,然后就多出了个标签,配置下地址(和下面迅雷的地址是一样的)就可以下载了。
PS:目前百度网盘还不支持文件夹下载。只能进文件后批量选择文件然后下载。
详细步骤:
添加书签, 打开百度网盘, 点一下刚才添加的书签。
树莓派上迅雷远程下载安装指南
今天又发现一个好玩的东西, 迅雷远程下载固件。迅雷出了支持树莓派的固件,相当好用,以后大家可以用Pi在远程下载迅雷了,主要能访问网络的地方,就能让Pi下载东西!!!!废话不多说,让我们首先来了解一下,如何在Pi上安装这个迅雷远程下载固件。
第一步,我们要去迅雷网站下载固件。http://luyou.xunlei.com/forum-51-1.html 找到最近的下载就可以了,注意Raspberry Pi 使用的是Xware版本号_armel_v5te_glibc.zip。本教程是第九周的固件“Xware1.0.31_armel_v5te_glibc.zip”。当然最最首先,你需要一个迅雷的账号才行! 而且下载地址还很无耻的设置成仅 回复 可见。。。 真是醉了
第二步,在/home/pi文件夹下建立一个文件夹(文件名随便,本文使用xunlei)。
cd /home/pi mkdir xunlei
第三步,在/share 文件夹下建立一个文件夹(文件名随便,本文也使用xunlei)。
cd /share mkdir xunlei
第四步,将两者挂载起来,否则你会发现在远程下载时木有磁盘。
sudo mount --bind /home/pi/xunlei /share/xunlei
第五步,然后咱们把迅雷固件复制到/home/pi/xunlei文件夹里面去
cd /home/pi cp Xware1.0.31_armel_v5te_glibc.zip xunlei
第六步,解压Xware1.0.9_armel_v5te_glibc.zip
cd xunlei unzip Xware1.0.9_armel_v5te_glibc.zip
第七步,修改两处迅雷的读写权限,为了省事我一般就设置成777了
chmod -R 777 /home/pi/xunlei chmod -R 777 /share/xunlei
第八步,运行迅雷,查看code
/home/pi/xunlei/portal
运行结果如下图所示:
牢记上面的Code,我的是shcjuh。 在浏览器输入当前树莓派的IP: http://IP:9000/getsysinfo
第一项:0表示返回结果成功
第二项: 1表示检测网络正常,0表示检测网络异常
第四项: 1表示已绑定成功,0表示未绑定
第五项: 未绑定的情况下,为绑定的需要的激活码 (这里获得的激活码呆会绑定要用,激活码不需要购买,ps迅雷远程下载不是破解的,是官方发布的)
第六项: 1表示磁盘挂载检测成功,0表示磁盘挂载检测失败
使用迅雷帐号登录迅雷远程下载页面http://yuancheng.xunlei.com,点【添加】,选择【路由器】并填入激活码,点【确定】即绑定成功。
当绑定成功后红色叉处即可解除绑定。
第九步,让我们绑定Pi设备到远程下载。
游览器访问http://yuancheng.xunlei.com,点击左上角的【添加】按钮,在弹出的对话框里面选择【路由器】,再输入刚刚的激活码:【shcjuh】,如下图:
第十步,保险起见,让我们再去把目录的权限再设置一下吧,因为已经生成了新的文件啦
chmod -R 777 /home/pi/xunlei chmod -R 777 /share/xunlei
第十一步,在http://yuancheng.xunlei.com 里面新建个任务试试看。和一般的迅雷操作差不多的。注意下载器选择Pi
第十二步,下载的文件在哪里?
Xware软件会自动检测在机器上已经mount的, 且有写入权限的设备, 如果有, 在远程下载页面中添加下载任务时就可以看到。 如果有多个可写入的设备, 那就依次编号为C、 D、 E...等, 可以在添加下载任务时选择其中一个。
cd /home/pi/xunlei/TDDOWNLOAD # 我的不知道什么情况, 下载目录 /share/TDDOWNLOAD
然后,你以为这就是终点?错了,当你重启了你的电脑之后,你就会绝望得发现,你不能下载了,因为挂载的盘没有了,也就不能再使用远程下载了,所以一般咱们需要给他来个开机自动绑定,并且自动启动迅雷。
sudo vim /etc/rc.local
在 exit 0 之前, 加入以下代码:
sudo mount --bind /home/pi/xunlei/ /mnt/xunlei/ ./home/pi/xunlei/portal
未完待续。。。折腾
参考:
http://www.chinagtd.com/archives/xunleipi.html