启动busybox自带的ftp服务器

关于ftp工作原理详解 ,可参考

http://blog.chinaunix.net/uid-12814440-id-2914750.html

为了了解ftp,首先在ubuntu上搭建一个ftp服务器先。

在ubuntu12.04中搭建ftp服务器:

sudo apt-get install vsftpd

完成安装后,就可以用Ubuntu系统的用户名和密码登陆了。

可以在手机上装上个ES文件浏览器,通过添加一个ftp服务器的方式就可以连接到电脑上的ftp服务器了。

(手机和电脑在同一网络中,当然vsftpd还有很多配置选项,这里就不再深究了)


其实busybox中自带ftp服务器,只需开启一下就可以用了。

首先,到busybox的官网上下载源码,make menuconfig(什么都不改,保存一下)一下生成.config文件,然后make一下

就可以生成在X86下运行的程序了,马上验证一下。

如果之前装上了vsftpd,ftpd服务是默认开启的,可先删除该服务sudo apt-get remove vsftpd,然后在生成busybox源码的目录下执行

sudo ./busybox  tcpsvd 0 21 ./busybox ftpd -w /home,手机照样可以访问到电脑了的文件。

./system/bin/busybox tcpsvd -vE 192.168.2.9 21 ./system/bin/busybox ftpd -w /sdcard/ftpserver &  //指定IP
./system/bin/busybox tcpsvd -vE 0 21 ./system/bin/busybox ftpd -w /sdcard/ftpserver &  //所有IP都可以传输

当然,我们也可以将busybox移植到arm上,具体移植过程见


移植好后,将只需将busybox放到环境变量的路径中($PATH查看),然后在终端上运行

sudo ./busybox  tcpsvd0 21 ./busybox ftpd

busybox  tcpsvd相当于运行busybox这个程序,参数为tcpsvd,实际就是运行tcpsvd,如果不想这么麻烦,只需

ln -s busybox tcpsvd

ln -s busybox ftpd

然后运行./tcpsvd 0 21 ./ftpd -w /home即可。

当然该命令会卡住,在实际运用中要加上&,代表该程序在后台运行

tcpsvd 0 21 ftpd -w /home &



//上面的0表示对所有ip地址都进行侦听



// ftpd -w这里的参数-w表示client可以对目录执行写操作



// 21指定ftp服务器的默认端口



// 可以使用-t和-T参数设置client在没有任何操作的最大时间之后ftpd主动断开client连接,



// 默认-t为2分钟=2 * 60,-T为1小时=1 * 60 * 60

移植好的busybox也可以在Android上跑(root过后的手机),只是最新版本的busybox,当client连接上会退出的情况,成功的版本为v1.19.2。

搭建好ftp服务器后,就有很多应用了。比如,电脑上的电影,手机只需接入该服务器,就可以直接访问到电脑的视频文件了,在手机上直接看电影无压力啊。


浅析busybox内置的ftpd服务程序如何配置

server服务器配置
方法1:
# mkdir /gliethttp_ftpd_dir
# cp /bin/busybox /gliethttp_ftpd_dir
# tcpsvd 0 21 ftpd -w /gliethttp_ftpd_dir &
// 上面的0表示对所有ip地址都进行侦听
// 如果设置为127.0.0.1那么只能开发板本地arm可以进行ftp
// 比如开发板eth0的的ip地址设为172.20.0.2,那么就不能通过该ip登录
// 所以上面指定ip等于0,那么无论来自127.0.0.1还是172.20.0.2网络地址的
// 数据都能使用ftpd服务器.
// ftpd -w这里的参数-w表示client可以对目录执行写操作
// 可以使用-t和-T参数设置client在没有任何操作的最大时间之后ftpd主动断开client连接,即:Idle and absolute timeouts
// 默认-t为2分钟=2 * 60,-T为1小时=1 * 60 * 60

方法2:
# mkdir /gliethttp_ftpd_dir
# cp /bin/busybox /gliethttp_ftpd_dir
# vi /etc/inetd.conf
21 stream tcp nowait root ftpd ftpd -w /gliethttp_ftpd_dir
# inetd                 // inetd会执行/etc/inetd.conf脚本中的命令行,这样ftpd就作为daemon运行到起来了
(注意:以上2种方式运行的ftpd都不会在ps中看到ftpd进程的运行)


//========================================================
client客户端测试

在pc机上直接ftp数据
luther@gliethttp:~$ ftp 172.20.0.2
Connected to 172.20.0.2.
220 Operation successful
Name (172.20.0.2:luther): 
230 Operation successful
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 Operation successful
150 Directory listing
-rwxr-xr-x    1 0        0          826724 Jan 1 00:02 busybox
226 Operation successful
ftp> put uda1341ts.tar.bz2          // 将uda1341ts.tar.bz2文件上传到开发板的/gliethttp_ftpd_dir目录下
local: uda1341ts.tar.bz2 remote: uda1341ts.tar.bz2
200 Operation successful
150 Ok to send data
226 Operation successful
485435 bytes sent in 0.12 secs (3809.5 kB/s)
ftp> ls
200 Operation successful
150 Directory listing
-rwxr-xr-x    1 0        0          826724 Jan 1 00:02 busybox
-rw-r--r--    1 0        0          485435 Jan 1 00:03 uda1341ts.tar.bz2       // 刚刚上传上上去的uda1341ts.tar.bz2文件
226 Operation successful
ftp> get busybox
local: busybox remote: busybox
200 Operation successful
150 Opening BINARY connection for busybox (826724 bytes)
226 Operation successful
826724 bytes received in 0.15 secs (5411.8 kB/s)
ftp> del busybox
250 Operation successful
ftp> ls
200 Operation successful
150 Directory listing
-rw-r--r--    1 0        0          485435 Jan 1 00:03 uda1341ts.tar.bz2
226 Operation successful
ftp> 

//当然也可以用window作为ftp的客户端登录到目标板上

 

 

 

实际使用过程更为简单:直接在/etc/init.d/rcS 这个文件里面加上如下指令即可

/sbin/tcpsvd -vE 0 21 /sbin/ftpd -w 【dir】 &

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

启动方法1:

#tcpsvd 0 21 ftpd -w /root &

// 上面的0表示对所有ip地址都进行侦听

// ftpd -w这里的参数-w表示client可以对目录执行写操作

// 21指定ftp服务器的默认端口

// 可以使用-t和-T参数设置client在没有任何操作的最大时间之后ftpd主动断开client连接,

// 默认-t为2分钟=2 * 60,-T为1小时=1 * 60 * 60

 

启动方法2:

#vi /etc/inetd.conf //增加以下代码

  21  stream  tcp  nowait  root  ftpd  ftpd  -w  /root

#inetd                 

//inetd会执行/etc/inetd.conf脚本中的命令行,这样ftpd就作为daemon运行到起来了