Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116451
  • 博文数量: 11
  • 博客积分: 565
  • 博客等级: 中士
  • 技术积分: 267
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-02 17:17
文章分类
文章存档

2014年(1)

2012年(2)

2011年(4)

2010年(4)

我的朋友

分类: LINUX

2011-03-11 18:59:25

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


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


阅读(6370) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2011-03-27 13:50:00

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com