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

    技术2022-05-13  18

    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的内容: #!/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


    最新回复(0)