FTP(File Transfer Protocol)是文件传输协议的简称,是一种标准的协议,用于在Internet上传输文件。在Linux系统中,我们可以使用C语言编写FTP服务器,实现文件的传输。在本篇文章中,我们将为大家介绍如何构建Linux平台下高效的C语言FTP服务器。
网站建设公司,为您提供网站建设,网站制作,网页设计及定制网站建设服务,专注于成都企业网站建设,高端网页制作,对成都石凉亭等多个行业拥有丰富的网站建设经验的网站建设公司。专业网站设计,网站优化推广哪家好,专业营销推广优化,H5建站,响应式网站。
一、环境准备
在开始构建FTP服务器之前,我们需要准备好以下环境:
1. Linux操作系统:本教程中我们以Ubuntu 18.04为例。
2. GCC编译器:用于编译C语言程序。
3. VSFTPD软件:是一个可用的FTP服务器软件,我们将其作为我们构建FTP服务器的工具。
二、安装VSFTPD
在Ubuntu中,通过以下命令可以安装VSFTPD:
sudo apt-get update
sudo apt-get install vsftpd
安装完成后,我们需要进行配置。我们可以通过以下命令打开vsftpd.conf文件:
sudo nano /etc/vsftpd.conf
在文件末尾添加以下内容:
# FTP共享的根目录
local_root=/srv/ftp
# 监听2100端口,可根据实际需求更改
listen_port=2100
# 启用匿名用户功能
anonymous_enable=YES
# 可写入,匿名用户可创建文件
write_enable=YES
# 用户限速
anon_max_rate=102400
# 防范错误登录攻击
chroot_local_user=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
# 日志记录
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=65535
在配置文件中,我们设置共享的根目录为/srv/ftp,监听的端口为2100,启用匿名用户功能以及可写功能,设置匿名用户的速率为102400,防范错误登录攻击,同时开启了日志记录功能。
配置完成后,我们需要重启vsftpd服务:
sudo service vsftpd restart
三、创建FTP客户端
在本教程中,我们将使用C语言编写FTP客户端。以下是基本的代码框架:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define FTP_CTRL_PORT 2100
#define FTP_DATA_PORT 20
int mn(int argc, char **argv){
/* 1. 创建socket连接 */
/* 创建socket描述符 */
/* 连接ftp服务器 */
/* 登录ftp服务器 */
/* 获取文件列表 */
return 0;
}
在上面的代码中,我们首先定义了FTP服务端口号和数据端口号,然后建立了连接,并登录FTP服务器,最后获取文件列表。我们需要逐一介绍这些步骤。
四、创建socket连接
在C语言中,我们可以使用以下代码创建socket连接:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1){
printf(“Fled to create socket\n”);
exit(EXIT_FLURE);
}
上面的代码将创建一个IPv4的TCP socket连接。
接着我们需要设置服务器的地址和端口号:
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(FTP_CTRL_PORT);
server_addr.sin_addr.s_addr = inet_addr(“127.0.0.1”);
接着我们可以使用connect函数连接到FTP服务器:
int ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(ret == -1){
printf(“Fled to connect to server\n”);
exit(EXIT_FLURE);
}
五、登录FTP服务器
下一步,我们需要登录FTP服务器。可以使用以下代码:
char buffer[1024];
int n;
n = recv(sockfd, buffer, sizeof(buffer), 0);
buffer[n] = ‘\0’;
printf(“%s”, buffer);
char *user = “anonymous”;
char *pass = “123456”;
char user_buffer[1024];
char pass_buffer[1024];
sprintf(user_buffer, “USER %s\r\n”, user);
sprintf(pass_buffer, “PASS %s\r\n”, pass);
send(sockfd, user_buffer, strlen(user_buffer), 0);
n = recv(sockfd, buffer, sizeof(buffer), 0);
buffer[n] = ‘\0’;
printf(“%s”, buffer);
send(sockfd, pass_buffer, strlen(pass_buffer), 0);
n = recv(sockfd, buffer, sizeof(buffer), 0);
buffer[n] = ‘\0’;
printf(“%s”, buffer);
在上面的代码中,我们首先创建了一个缓冲区来接收和发送数据,然后连接到服务器,并接收服务器发送的欢迎信息。
接着,我们向服务器发送用户名和密码。如果一切顺利,服务器应该会返回一个过渡信息表示登录成功。
六、获取文件列表
现在我们已经登录到FTP服务器,可以遍历文件列表:
char list_buffer[1024];
sprintf(list_buffer, “LIST \r\n”);
send(sockfd, list_buffer, strlen(list_buffer), 0);
n = recv(sockfd, buffer, sizeof(buffer), 0);
buffer[n] = ‘\0’;
printf(“%s”, buffer);
接收文件列表后,我们可以将文件列表分别分配到每行,然后分析它们的内容。以下是完整的代码:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1){
printf(“Fled to create socket\n”);
exit(EXIT_FLURE);
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(FTP_CTRL_PORT);
server_addr.sin_addr.s_addr = inet_addr(“127.0.0.1”);
int ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(ret == -1){
printf(“Fled to connect to server\n”);
exit(EXIT_FLURE);
}
char buffer[1024];
int n;
n = recv(sockfd, buffer, sizeof(buffer), 0);
buffer[n] = ‘\0’;
printf(“%s”, buffer);
char *user = “anonymous”;
char *pass = “123456”;
char user_buffer[1024];
char pass_buffer[1024];
sprintf(user_buffer, “USER %s\r\n”, user);
sprintf(pass_buffer, “PASS %s\r\n”, pass);
send(sockfd, user_buffer, strlen(user_buffer), 0);
n = recv(sockfd, buffer, sizeof(buffer), 0);
buffer[n] = ‘\0’;
printf(“%s”, buffer);
send(sockfd, pass_buffer, strlen(pass_buffer), 0);
n = recv(sockfd, buffer, sizeof(buffer), 0);
buffer[n] = ‘\0’;
printf(“%s”, buffer);
char list_buffer[1024];
sprintf(list_buffer, “LIST \r\n”);
send(sockfd, list_buffer, strlen(list_buffer), 0);
n = recv(sockfd, buffer, sizeof(buffer), 0);
buffer[n] = ‘\0’;
printf(“%s”, buffer);
char *p = strtok(buffer, “\r\n”);
while(p != NULL){
printf(“%s\n”, p);
p = strtok(NULL, “\r\n”);
}
关闭连接关闭:
close(sockfd);
七、
从上面的教程可以看到,创建Linux平台下高效的C语言FTP服务器并不难。本文介绍了如何安装VSFTPD软件以及创建FTP客户端,包括连接、登录FTP服务器和获取文件列表等操作。
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220你可以参考busybox里边的ftp源码, 也可以看下wget的
在绝大多数的LINUX发行版本中都选用的是WashingtonUniversity
FTP,它是一个著名的FTP服务器软件,一般简称为wu-ftp。它功能强大,能够很好地运行于众多的UNIX操作系统,例如:IBM
AIX、FreeBSD、HP-UX、NeXTstep、Dynix、SunOS、Solaris等。所以Internet上的FTP服务器,一大半以上采用了它。wu-ftp拥有许多强大的功能,很适于吞吐量较大的FTP服务器的管理要求:
1) 可以在用户下载文件的同时对文件做自动的压缩或解压缩操作;
2)
可以对不同网络上的机器做不同的存取限制;
3) 可以记录文件上载和下载时间;
4)
可以显示传输时的相关信息,方便用户及时了解目前的传输动态;
5) 可以设置更大连接数,提高了效率,有效地控制了负载。
& 2.2 所需资源
&1.2.1
所需包
RedHat6.2 服务器安装
&1.2.2
所需配置文件
/etc/ftpusers
/etc/ftpaccess
/var/run/ftp.pids
/etc/ftpconversions
/var/log/xferlog
/etc/ftpgroups
/etc/ftphosts
&1.2.3 相关命令
ftpd FTP服务器程序
ftpshut 用于关闭FTP服务器程序
ftpcount 显示目前在线人数
ftpwho
查看目前FTP服务器的连接情况
ckconfig 检查FTP服务器的设置是否正确
ftprestart
重新启动FTP服务
&1.2.4 相关目录
/home/ftpd/bin
存放一些供FTP用户使用的可执行文件
/home/ftpd/etc
存放一些供FTP用户使用的配置文件
/home/ftpd/pub 存放供下载的信息
/home/ftpd/incoming 存放供上载信息的空间
配置方案
1.
/etc/ftpaccess
说明: ftp权限配置文件
源文件:
guestuser weboa
# FTP用户
class all real,guest,anonymous
*
class weboa guest *
# 格式:class
功能:
这个指令的功能设定FTP服务器上用户的类别。并可对客户端的IP地址进行限制,允许某部分的IP地址或全部的IP地址访问。而在FTP
服务器上的用户基本上可以分为以下三类:
real 在该FTP服务器有合法帐号的用户;
guest 有记录的匿名用户;
anonymous 权限更低的匿名用户
loginfails 5
# 格式:loginfails
功能:设定当用户登录到FTP服务器时,允许用户输错密码的次数。
readme README* login
readme README* cwd=*
message /welcome.msg
login
message .message cwd=*
#
格式:message
功能:当用户执行所指定的指令时,系统将指定的文件内容显示出来。
compressyesall
# 格式:compress
功能:设置哪一个类别的用户可以使用compress(压缩)功能。
tar
yesall
# 格式:tar
功能:设置哪一个类别的用户可以使用tar(归档)功能。
chmod no
guest,anonymous
# 格式:chmod
功能:
设置是否允许指定用户使用chmod命令更改文件权限。默认是
允许。
deleteyesall
# 格式:delete
功能:
设置是否允许指定用户使用delete命令删除文件。默认是允许。
overwrite yes guest
#
格式:overwrite
功能:设置是否允许指定用户覆盖同名文件。默认是允许。
rename yes guest
#
格式:rename
功能:设置是否允许指定用户使用rename命令来为文件改名。默认
是允许。
log
transfers anonymous,real inbound,outbound
# 格式:log transfers
功能:
设置哪些用户的上载(inbound)和下载(outbound)操作做日志。
shutdown
/etc/shutmsg
# 格式:shutdown
功能:
FTP服务器关闭的时间可以设置在后面所指定的文件中,当设
置的时间一到,便无法登录FTP服务器了,要恢复的话只有将
这个文件删掉。而这个文件必
须由指令/bin/ftpshut来生成。
passwd-check rfc822 warn
#
格式:passwd-check
功能:设定对匿名用户anonymous的密码使用方式。
none 表示不做密码验证,任何密码都可以登录;
trival 表示只要输入的密码中含有字符“@ ” “Times New Roman”‘>就可以登录;
rfc822 表示密码一定要符合RFC822中所规定的E-Mail格式才
能登录;
enfore 表示输入的密码不符合以上指定的格式就不让登录;
warn
表示密码不符合规定时只出现警告信息,仍然能够登录。
limit remote 32 Any
/etc/ftpd/toomany.msg
# 格式:limit
功能:这个指令的功能为设置指定的时间内指定的类别允许连接的
指定人数上限。当达到上限的时候,显示指定文件的内容。
upload /home/ftpd * no
upload /home/ftpd /pub yes anonymous 0644 dirs
# 格式:upload
功能:对可以上载的目录进行更加详细的设置。
alias incoming
/home/ftp/incoming
# 格式:alias
功能:给指定目录设置一个别名,在切换目录时就可以使用较短的
目录别名。
2.
/etc/ftpusers
说明:FTP用户黑名单,为了安全考虑,需要禁止以下用户使用FTP
源文件:
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
在众多的网络应用中,FTP(File Transfer
porotocol)有着非常重要的地位。在Internet中一个十分重要的资源就是软件资源。而各种各样的软件资源大多数都是放在FTP服务器中的。可以说,FTP与WEB服务几乎占据了整个Internet应用的80%以上。
FTP服务可以根据服务对象的不同分为两类:一类是系统FTP服务器,它只允许系统上的合法用户使用;另一类是匿名FTP服务器,Anonymous
FTP Server,它使用任何人都可以登录到FTP服务器上去获取文件。
如果你在安装LINUX系统的时候,在选择启动进程的时候选择了“ftpd”这一项的话,安装完LINUX系统后,它已经将一个默认的FTP服务器安装到系统中去了。我们已经可以利用它来实现系统FTP服务器的功能了。我们只需在此基础上根据我们的需要进行一些个性化设定就可以了。
这个操作的假说有许多,直接到网上去寻找就可以了
1、检查安装vsftpd软件
使用如下命令#rpm -qa |grep vsftpd可以检测出是否安装了vsftpd软件,
如果没有安装,使用YUM命令进行安装。
2、启动服务
使用vsftpd软件,主要包括如下几个命令:
启动ftp命令#service vsftpd start
停止ftp命令#service vsftpd stop
重启ftp命令#service vsftpd restart
3、vsftpd的配置
ftp的配置文件主要有三个,位于/etc/vsftpd/目录下,分别是:
ftpusers 该文件用来指定那些用户不能访问ftp服务器。
user_list 该文件用来指示的默认账户在默认情况下也不能访问ftp
vsftpd.conf vsftpd的主配置文件
4、以匿名用户为例,我们去掉配置文件vsftpd.conf 里面以下
anon_upload_enable=YES
anon_mkdir_write_enable=YES
两项前面的#号,就可以完成匿名用户的配置,此时匿名用户既可以登录上传、下载文件。记得修改配置文件后需要重启服务。
5、非匿名账户的创建与使用
vsftpd服务与系统用户是相互关联的,例如我们创建一个名为test 的系统用户,那么此用户在默认配置的情况下就可以实现登录,如图
登录后在页面创建名为“aa”的文件夹,同样我们在服务器test用户 的home目录里也可以看到相同的文件。
linux c ftp服务器的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux c ftp服务器,构建Linux平台下高效的C语言FTP服务器教程,Linux下用C语言写一个FTP系统程序,基于客户/服务器模式,linux怎么搭建ftp服务器的信息别忘了在本站进行查找喔。
成都创新互联科技公司主营:网站设计、网站建设、小程序制作、成都软件开发、网页设计、微信开发、成都小程序开发、网站制作、网站开发等业务,是专业的成都做小程序公司、成都网站建设公司、成都做网站的公司。创新互联公司集小程序制作创意,网站制作策划,画册、网页、VI设计,网站、软件、微信、小程序开发于一体。
网页题目:构建Linux平台下高效的C语言FTP服务器教程(linuxcftp服务器)
分享链接:http://www.shufengxianlan.com/qtweb/news35/513235.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联