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的内容:
udhcpc的操作都在这个脚本里面。
测试的时候,可以自己准备一台dhcp server,然后在开发板上运行如下命令:
#udhcpc –i eth0 –s /usr/share/udhcpc/default.script
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的内容:
- #!/bin/sh
- # udhcpc script edited by Tim Riker <Tim@Rikers.org>
- RESOLV_CONF="/etc/resolv.conf"
- [ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; }
- NETMASK=""
- [ -n "$subnet" ] && NETMASK="netmask $subnet"
- BROADCAST="broadcast +"
- [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
- case "$1" in
- deconfig)
- echo "Setting IP address 0.0.0.0 on $interface"
- ifconfig $interface 0.0.0.0
- ;;
- renew|bound)
- echo "Setting IP address $ip on $interface"
- ifconfig $interface $ip $NETMASK $BROADCAST
- if [ -n "$router" ] ; then
- echo "Deleting routers"
- while route del default gw 0.0.0.0 dev $interface ; do
- :
- done
- metric=0
- for i in $router ; do
- echo "Adding router $i"
- route add default gw $i dev $interface metric $((metric++))
- done
- fi
- echo "Recreating $RESOLV_CONF"
- echo -n > $RESOLV_CONF-$$
- [ -n "$domain" ] && echo "search $domain" >> $RESOLV_CONF-$$
- for i in $dns ; do
- echo " Adding DNS server $i"
- echo "nameserver $i" >> $RESOLV_CONF-$$
- done
- mv $RESOLV_CONF-$$ $RESOLV_CONF
- ;;
- esac
- exit 0
udhcpc的操作都在这个脚本里面。
测试的时候,可以自己准备一台dhcp server,然后在开发板上运行如下命令:
#udhcpc –i eth0 –s /usr/share/udhcpc/default.script