使用TFTP进行文件传输

使用TFTP进行文件传输linux

(系统版本: Ubuntu 14.04或以上)ubuntu

 

 

在嵌入式系统开发中,常常须要从主机上传送映像、文件等到目标机上。实现的方法有不少。如tftp,scp等。安全

TFTP(Trivial File Transfer Protocol)是用来下载远程文件的最简单的网络协议,它基于UDP协议而实现。服务器

 

1、TFTP的创建网络

嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。由于u-boot自己内置支持tftp-client,因此嵌入式目标系统端就不用配置了。咱们要作的是在服务器端(即主机)上安装TFTP服务,而且正确地配置TFTP服务的路径和参数。dom

 

下面我尝试了搭建TFTP的方法,实测成功。测试

 

 

首先须要安装:tftp-hpaui

sudoapt-get install tftp-hpa操作系统

sudoapt-get install tftpd-hpa.net

 

tftp-hpa是客户端,做用是从别人的TFTP服务器端上传/下载东西。

tftpd-hpa是服务端,字母d表明daemon,做用是为别人提供TFTP服务,供别人上传/下载东西。

 

 

二、建立TFTP目录

首先须要创建一个TFTP目录,以供上传和下载。固然也可使用现有的目录。而后须要设定该目录的权限,决定是否可以下载和上传文件。对于平常使用,咱们通常就将其权限设置为最高,为全部用户组都添加全部权限(读+写+执行=4+2+1=7):

sudomkdir ~/tftp_boot

sudochmod 777 tftp_boot –R

 

咱们的TFTP目录为/home/ghostar/tftp_boot,其权限已是最高。

 

三、修改配置文件

修改tftpd-hpa相应的配置文件

sudogedit /etc/default/tftpd-hpa

 

原始的内容以下:

#/etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/var/lib/tftpboot"

TFTP_ADDRESS="[...]:69"

TFTP_OPTIONS="--secure"

 

我将其修改成:

#/etc/default/tftpd-hpa

TFTP_USERNAME="ghostar"

TFTP_DIRECTORY="/home/ghostar/tftp_boot"

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="-l-c -s"

 

说明:

TFTP_USERNAME:必须改成当前的用户名,或者root

TFTP_DIRECTORY:咱们设定的TFTP根目录;

TFTP_OPTIONS:TFTP启动参数。意义以下:

 

-l:以standalone/listen模式启动TFTP服务,而不是从inetd启动。

(这里也代表,再像前面同样装xinetd,实际上是画蛇添足)

-c:可建立新文件。默认状况下,TFTP只容许覆盖原有文件,不能建立新文件。

-s:改变TFTP启动的根目录。加了-s后,客户端使用TFTP时,再也不须要输入指定目录,填写文件的完整路径,而是使用配置文件中写好的目录。这样也能够增长安全性。

 

我一开始没有注意TFTP_USERNAME这一项,随便取了一个名字,一直没有成功,后来改用本身的用户名,才测试成功。

 

四、从新启动服务

 

重启tftpd-hpa服务:

sudo service tftpd-hpa restart

若是显示以下,说明配置正确:

tftpd-hpastart/running, process 2290

 

以前我没有把TFTP_USERNAME该为用户名,而是随便取了一个,则会提示以下:

tftpd-hpastart/running

对比发现,这里并无启动进程,由于配置中TFTP_USERNAME不正确,也就没有成功开启TFTP。

 

 

五、确认tftp服务是否已经开启

         下面确认tftp服务是否开启。

查看tftp相关进程能够用如下指令:

psaux |grep tftp

弹出如下信息

ghostar@ubuntu:~$ ps aux|grep tftp
root       3151  0.0  0.0  15128   152 ?        Ss   23:19   0:00 /usr/sbin/in.tftpd --listen --user ghostar --address 0.0.0.0:69 -l -c -s /home/ghostar/tftp_boot
ghostar    3156  0.0  0.0  15956   956 pts/12   S+   23:20   0:00 grep --color=auto tftp

 

能够看到, /usr/sbin/in.tftpd已经启动,说明TFTP服务已经开启了,进程号正是3151。

--listen对应配置文件中的参数 -l

--user ghostar          就是配置文件中的TFTP_USERNAME

/home/ghostar/tftp_boot是配置文件中的TFTP_DIRECTORY

 

         另外一种方法:

netstat-a|grep tftp

         若是看到以下提示,说明TFTP服务开启了。

udp        0     0 *:tftp                  *:*

 

 

2、TFTP的使用

一、链接本机

链接本机有三种方法,一是输入真实的IP地址,能够用ifconfig查得;二是用localhost来表明本机;三是使用地址127.0.0.1,这个IP地址始终表明本机的IP。

先在TFTP目录下新建一个文件a,在里面随便写一些内容,而后修改其权限为777。接着,输入如下指令的任意一条,进入TFTP命令行。

tftp 192.168.1.201  (本身设定的IP)

tftp localhost

tftp127.0.0.1

 

TFTP命令行的基本指令:

put:将文件上传到TFTP目录

get:取得TFTP目录上的文件

quit/q:退出TFTP

 

由于TFTP服务将某一设定的目录视为根目录,所以不须要打出完整的路径。既然该目录下已经有一个文件a,咱们就下面输入指令:

tftp>get a

 

tftp>put a

 

若是没有任何提示,则说明传输成功。

 

下面看看当配置参数和文件权限改变时,会出现什么现象。我列举了一些常见问题:

 

tftp>get a

Transfer timed out.

缘由:tftpd服务没有启动。

须要注意的是,必须使TFTP的用户名和当前的系统的用户名一致,不然就没法成功启动tftpd服务。

 

tftp>get a

permission denied

缘由:操做者权限不够,好比当前的目录是/etc,不能随便get文件下来。须要提高权限。切换到root帐户,或者直接执行sudo tftp。

 

tftp>put t1

tftp: t1: No such file or directory

缘由:当前目录下没有t1文件

 

tftp>get d

Error code 1: File not found

缘由:TFTP根目录下没有该文件

 

Error code 2: Only absolute filenamesallowed

缘由:TFTP启动配置参数没有-s,或者在DIRECTORY中没有填写目录

 

tftp>put b

Error code 1: File not found

缘由:启动配置参数无-c,根目录下无同名文件

(注意和前面状况的区别,不是当前目录下没有b文件,而是TFTP目录下找不到同名文件b)

 

tftp>put b

Error code 2: File must have global writepermissions

缘由:根目录下有同名文件,该文件无写权限(启动配置参数有无-c都这样)

 

经测试,在tftp-hpa方法下,下列状况能够put成功:

l  启动配置参数无-c,根目录下有同名文件,有写权限

l  启动配置参数有-c,根目录下无同名文件

l  启动配置参数有-c,根目录下有同名文件,有写权限

 

二、链接实验箱(未完成)

         实验箱操做系统中的TFTP服务已经装好,是在BusyBox v1.12.0中的。它的用法与本机的略有区别,但原理是同样的。

 

基本参数:

-g:   get,获取文件

-p:   put,长传文件

-l FILE:本地的文件,名为FILE

-r FILE:远程的文件,名为FILE

        

         实验箱的IP地址为192.168.1.200,我主机的IP地址为192.168.1.201。二者的IP应该在一个网段内,才能顺利通讯。

 

使用举例:

sudo minicom

进入了实验箱的Linux操做系统。

 

# cd /home

# tftp -g 192.168.1.201 -r./hello -l./hello

         将主机TFTP目录下的文件hello下载到实验箱的当前目录(/home)。

# tftp -p 192.168.1.201 -r./led -l./led

         将实验箱的当前目录(/home)的文件led上传到主机TFTP目录下。

相关文章
相关标签/搜索