Busybox内置的tftpd, ftpd, telnetd, udhcpd, udhcpc配置

Busybox内置的tftpd, ftpd, telnetd, udhcpd, udhcpc配置

Tftpd,ftpd可以由inetd来管理,telnetd理论上也可以由inetd来管理,但是目前开发板上我还没调通,只能telnetd独立运行。
1.    Tftpd
配置步骤:
#mkdir /tftp_ftp_dir  //创建tftp server的根目录
#vi /etc/inetd.conf  //配置inetd.conf文件,用inetd来管理tftpd,加入如下一行:
69 dgram udp nowait root tftpd tftpd -c /tftp_ftp_dir
#inetd  //启动inetd
这样tftpd就作为daemon运行起来了。
注:这种方式运行的tftpd在ps中看不到tftpd进程的运行。

检查下配置结果:
# netstat -alp
Active Internet connections (servers and established)
Proto  Recv-Q  Send-Q  Local Address      Foreign Address     State  PID/Program name    
udp    0        0      0.0.0.0:69            0.0.0.0:*                789/inetd
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path

接下来就是在客户端测试了。
我尝试了以下三种测试方式:
a)    在linux pc机上,直接运行tftp命令,连接到开发板上。可以连接上,但是get file会提示Error Code 0: malformed packet。网上有人说是ubuntu 8.10上默认的tftp因为封包协议问题不能工作,但是我用的是fedora 9的系统,我抓包看了下,tftp server回复的数据包有个tftp code的字段,确实有问题。目前还未想到解决的方法。
b)    将开发板tftpd根目录下的文件test(如果没有test文件,可以自己手动创建一个)拷贝到pc上,在开发板上输入如下命令:
#busybox tftp –l test –r test –p 192.168.0.22
测试pc上可以成功接收文件,文件内容正确。
c)    在windows pc上,采用3com tftp软件作为tftp client,测试从开发板下载文件成功。

2.    Ftpd
配置步骤:
#mkdir /tftp_ftp_dir  //创建ftp server的根目录
#vi /etc/inetd.conf  //配置inetd.conf文件,用inetd来管理tftpd,加入如下一行:
21 stream tcp nowait root ftpd ftpd -w /tftp_ftp_dir
#inetd  //启动inetd
这样ftpd就作为daemon运行起来了。
注:这种方式运行的ftpd在ps中看不到ftpd进程的运行。

检查下配置结果:
# netstat -alp
Active Internet connections (servers and established)
Proto  Recv-Q  Send-Q  Local Address      Foreign Address     State  PID/Program name    
tcp       0      0      0.0.0.0:21         0.0.0.0:*         LISTEN    789/inetd
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path

接下来就是在客户端测试了。
在linux pc机上直接ftp数据:
[root@fedora9 ~]# ftp 192.168.0.1
可通过匿名用户anonymous登录
ftp>lcd
ftp>put test //将test文件上传到开发板的ftpd根目录下
ftp>get test
测试下载文件成功。

3.    Telnetd
Telnetd配置其实很简单,内核选项:
Device Drivers --->
Character devices
[*] Unix98 PTY support                                                                                      
[*] Legacy (BSD) PTY support
(256) Maximum number of 
Busybox选项:
# BusyBox -> Networking Utilities -> telnetd
# BusyBox -> Networking Utilities -> Support standalone telnetd (not inetd only)
应该就可以了。但是我这样配置完毕,在开发板上启动telnetd:
telnetd -l /bin/login
然后ps查看进程telnetd存在,netstat –alp查看23端口已被监听。
在客户端telnet开发板,老是出现“Connection closed by foreign host”的提示信息,而且客户端一telnet连接,开发板上的telnetd进程就自动退出了。抓包发现tcp三次握手连接已经建立,就这个问题调试了一天,最后才知道没有挂在devpts文件系统。
需要在开发板上mount一下就ok了。在开发板上输入如下命令:
#mount –t devpts devpts /dev/pts

但是目前如果采用inetd来管理telnetd,还是会出现“Connection closed by foreign host”的提示信息,原因现在还不清楚。

4.    Udhcpd
参考busybox中的examples,配置好udhcpd.conf,主要配置地址池(start, end, option subnet)、默认网关(opt router), dns(option dns)即可。然后执行:
#udhcpd –fS /etc/udhcpd.conf
就可以启动dhcp服务器了。Udhcpd在执行的时候可能会提示没有一个叫做udhcpd.release的文件,这个只要在相应的文件夹下创建即可。执行下面两条命令:
#mkdir -p /var/lib/misc/
#touch /var/lib/misc/udhcpd.leases

注:要启dhcp服务,还必须保证对应的网口处于up的状态,并且已配置IP地址,否则执行udhcpd –fS /etc/udhcpd.conf会报错。

5.    Udhcpc
参看busybox的example/udhcp/下的simple.script脚本,将其改名为default.script(不改也无所谓),主要是因为busybox里面默认的目录文件是/usr/share/udhcpc/default.script
注:一定要保证这个default.script的可执行权限。我之前就是因为这个问题调试了很久。
可查看下default.script的内容:

[javascript]  view plain copy
  1. #!/bin/sh  
  2. # udhcpc script edited by Tim Riker <[email protected]>  
  3. RESOLV_CONF="/etc/resolv.conf"  
  4. [ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; }  
  5. NETMASK=""  
  6. [ -n "$subnet" ] && NETMASK="netmask $subnet"  
  7. BROADCAST="broadcast +"  
  8. [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"  
  9. case "$1" in  
  10.         deconfig)  
  11.                 echo "Setting IP address 0.0.0.0 on $interface"  
  12.                 ifconfig $interface 0.0.0.0  
  13.                 ;;  
  14.         renew|bound)  
  15.                 echo "Setting IP address $ip on $interface"  
  16.                 ifconfig $interface $ip $NETMASK $BROADCAST  
  17.                 if [ -n "$router" ] ; then  
  18.                         echo "Deleting routers"  
  19.                         while route del default gw 0.0.0.0 dev $interface ; do  
  20.                                 :  
  21.                         done  
  22.                         metric=0  
  23.                         for i in $router ; do  
  24.                                 echo "Adding router $i"  
  25.                                 route add default gw $i dev $interface metric $((metric++))  
  26.                         done  
  27.                 fi  
  28.                 echo "Recreating $RESOLV_CONF"  
  29.                 echo -n > $RESOLV_CONF-$$  
  30.                 [ -n "$domain" ] && echo "search $domain" >> $RESOLV_CONF-$$  
  31.                 for i in $dns ; do  
  32.                         echo " Adding DNS server $i"  
  33.                         echo "nameserver $i" >> $RESOLV_CONF-$$  
  34.                 done  
  35.                 mv $RESOLV_CONF-$$ $RESOLV_CONF  
  36.                 ;;  
  37. esac  
  38. exit 0  


udhcpc的操作都在这个脚本里面。

测试的时候,可以自己准备一台dhcp server,然后在开发板上运行如下命令:
#udhcpc –i eth0 –s /usr/share/udhcpc/default.script

你可能感兴趣的:(Busybox内置的tftpd, ftpd, telnetd, udhcpd, udhcpc配置)