vsftpd ftp client ls command implementation source code

vsftpd下载链接 GitHub - dagwieers/vsftpd: Unofficial vsftpd source tree (since there doesn't seem to be an official public versioning system ?)GitHub - ChenChangXiong/vsftpd-2.3.4https://security.appspot.com/vsftpd.html#download 阅读详情















#include<netdb.h>

#include<errno.h>
#include<arpa/inet.h>
#include<sys/stat.h>
#include<unistd.h>
#include<termios.h>
#include <stdio.h>
#include<strings.h>
#include<string.h>

struct sockaddr_in ftp_server;
int sock_control;
int sock_data;
struct timeval outtime;
int ret;
char rcv_buff[1024];
int reply_code;
int main()
{
  bzero(&ftp_server,sizeof(struct sockaddr_in));
  ftp_server.sin_family=AF_INET;
  ftp_server.sin_port=htons(21);
  ftp_server.sin_addr.s_addr=inet_addr("127.0.0.1");
 
#if 1
  //connec to ftp server.
  sock_control=socket(AF_INET,SOCK_STREAM,0);
  if(sock_control<0)
  {
    printf("create socket failed!\n");
    return -1;
  }
  outtime.tv_sec=0;
  outtime.tv_usec=300000;
  ret=setsockopt(sock_control,SOL_SOCKET,SO_RCVTIMEO,&outtime,sizeof(outtime));
  if(ret!=0)
  {
    printf("setsockopt failed!\n");
    return -1;
  }
  if(connect(sock_control,(struct sockaddr *)&ftp_server,sizeof(struct sockaddr_in))<0)
  {
    return -1;
  }
#endif

 
  //read server's reply.(welcome message).
#if 1
  ret=read(sock_control,rcv_buff,1024);
  if(ret>0)
  {
    printf("read:@@ %s @@\n",rcv_buff);
    reply_code=atoi(rcv_buff);
    //continue to read the rest welcome message.
    while(1)
    {
      rcv_buff[ret]='\0';
      ret=read(sock_control,rcv_buff,1024);
      if (ret<=0)
      {
    break;
      }
      printf("read:@@ %s @@\n",rcv_buff);
    }
  }
  else
  {
    printf("read welcome message failed\n");
    return -1;
  }
#endif

#if 1
  //ftp user login.
  bzero(rcv_buff,sizeof(rcv_buff));
  strcpy(rcv_buff,"USER shell.albert\r\n");
  write(sock_control,rcv_buff,strlen(rcv_buff));
  while(1)
  {
    bzero(rcv_buff,sizeof(rcv_buff));
    ret=read(sock_control,rcv_buff,1024);
    if(ret>0)
    {
      printf("read:@@ %s @@\n",rcv_buff);
    }else{
      break;
    }
  }
  //PASS.
  bzero(rcv_buff,sizeof(rcv_buff));
  strcpy(rcv_buff,"PASS smartbean\r\n");
  write(sock_control,rcv_buff,strlen(rcv_buff));
  while(1)
  {
    bzero(rcv_buff,sizeof(rcv_buff));
    ret=read(sock_control,rcv_buff,1024);
    if(ret>0)
    {
      printf("read:@@ %s @@\n",rcv_buff);
    }else{
      break;
    }
  }
#endif

#if 1
  //enter PASV(passive) mode.
  bzero(rcv_buff,sizeof(rcv_buff));
  strcpy(rcv_buff,"PASV\r\n");
  write(sock_control,rcv_buff,strlen(rcv_buff));
  bzero(rcv_buff,sizeof(rcv_buff));
  while(1)
  {
    ret=read(sock_control,rcv_buff,1024);
    if(ret>0)
    {
      printf("read:@@ %s @@\n",rcv_buff);
    }else{
      break;
    }
  }
  //parse out the port number.P1*256+P2.
  int nPasvPort;
  char *sPasvPort=0;
  sPasvPort=strrchr(rcv_buff,',');
  if(sPasvPort==NULL)
  {
    printf("get pasv port1 error!\n");
    return;
  }
  nPasvPort=atoi(sPasvPort+1);
  *sPasvPort='\0';
  sPasvPort=strrchr(rcv_buff,',');
  if(sPasvPort==NULL)
  {
    printf("get pasv port2 error!\n");
    return;
  }
  nPasvPort+=atoi(sPasvPort+1)*256;
  printf("pasv port=%d\n",nPasvPort);
 
  //use new port to connect server to get the data connection.
  ftp_server.sin_port=htons(nPasvPort);
  sock_data=socket(AF_INET,SOCK_STREAM,0);
  if(sock_data<0)
  {
    printf("create socket failed!\n");
    return -1;
  }
  outtime.tv_sec=0;
  outtime.tv_usec=300000;
  ret=setsockopt(sock_data,SOL_SOCKET,SO_RCVTIMEO,&outtime,sizeof(outtime));
  if(ret!=0)
  {
    printf("setsockopt failed!\n");
    return -1;
  }
  if(connect(sock_data,(struct sockaddr *)&ftp_server,sizeof(struct sockaddr_in))<0)
  {
    return -1;
  }
  printf("create data connection sucess!\n");
#endif
 
#if 1
  //use PI(control channel to send LIST command
  //use DI(data channel to read data).
  bzero(rcv_buff,sizeof(rcv_buff));
  strcpy(rcv_buff,"LIST\r\n");
  write(sock_control,rcv_buff,strlen(rcv_buff));
  bzero(rcv_buff,sizeof(rcv_buff));
  while(1)
  {
    ret=read(sock_control,rcv_buff,1024);
    if(ret>0)
    {
      printf("read:@@ %s @@\n",rcv_buff);
    }else{
      break;
    }
  }
 
  //read data using data channel.
  bzero(rcv_buff,sizeof(rcv_buff));
  while(1)
  {
    ret=read(sock_data,rcv_buff,1024);
    if(ret>0)
    {
      printf("read:@@ %s @@\n",rcv_buff);
    }else{
      break;
    }
  }
 
  //close data channel.
  //read the control channel's reply.
  close(sock_data);
  printf("close data channe,read the server's rest data\n");
  bzero(rcv_buff,sizeof(rcv_buff));
  while(1)
  {
    ret=read(sock_control,rcv_buff,1024);
    if(ret>0)
    {
      printf("read:@@ %s @@\n",rcv_buff);
    }else{
      break;
    }
  }
#endif


  return 0;
}
FTP客户端C源码(Linux版) N年前写的FTP客户端,练习程序,支持常用命令,支持PASV与PORT模式 对应的服务器端为: http://download.youkuaiyun.com/source/2724443 立即下载

相关推荐

Vue3+uniapp开发必备:5分钟搞定unplugin-auto-import自动导入配置(附常见报错解决)

本文详细介绍了在Vue3+uniapp项目中配置unplugin-auto-import插件实现自动导入的方法。通过该配置,开发者无需手动导入ref、onLoad等常用API,可显著提升编码效率和团队协作规范性。文章提供了从安装、TypeScript集成到高级用法的完整指南,并附带了常见报错的解决方案。

weixin_29008805的博客 961

vsftpd安装、配置详解

一、vsftpd 简介 Vsftpd是一个基于GPL发布的类UNIX系统的ftp服务器软件。其全称是Very Secure FTP Deamon,在安全性、速度和稳定性都有着不俗的表现。在安全性方面,vsftpd针对程序的权限来设计,以一般身份启动服务,对Linux系统的使用 权限较低;在千兆以太网上,vsftpd的速度可以达到86MB/s;在稳定性上更是优秀,资料表明,完全工作24小时...

wangruiling的专栏 226

UE4入门实例17(Unreal制作卡通Post Process材质球)

效果展示 #1 创建Post Porcess材质球 #2 编写Shader功能 #3 设置场景区域内风格化渲染 #1 创建Post Porcess材质球 #2 编写Shader功能 创建基础效果 移除现有通道渲染 设置视图渲染范围 #3 设置场景区域内风格化渲染 #4 加群下载Shader源码:284105567 ...

Unity3d 攻城师一枚 1345

【FTCPSClient 连接 FTP服务器,服务器开启SSL认证】

FTPSClient连接FTP服务器,服务器开启SSL

weixin_40561490的博客 653

保姆级教程:从Navicat 11/12到15,平滑升级搞定MySQL 8.0的caching_sha2_password认证

本文提供从Navicat 11/12升级到15的保姆级教程,重点解决MySQL 8.0的caching_sha2_password认证问题。详细介绍了备份配置、新版本功能亮点、跨平台安装步骤、配置迁移流程以及高级使用技巧,帮助用户平滑过渡到Navicat 15,提升数据库管理效率。

weixin_33724046的博客 203

Ubuntu18.04 SoftRoCE安装教程

目标:创建两台Ubuntu18.04虚拟机,安装SoftRoCE环境,一台作为Server,一台作为Client,模拟RDMA通信环境,熟悉RDMA的通信方式。

GGGYL111的博客 1548

ubuntu 安装 vsftpd

source: https://www.digitalocean.com/community/tutorials/how-to-configure-vsftpd-to-use-ssl-tls-on-an-ubuntu-vps Introduction Warning: FTP is inherently insecure! Consider using SFTP instead o

韩世雷 程序员专栏 809

第1章:Zephyr 开发环境搭建与 Hello World

📝【摘要】本文是Zephyr RTOS开发入门指南的第一章,详细介绍了从环境搭建到首个应用运行的完整流程。主要内容包括:1️⃣ Zephyr项目结构解析与west工具链部署;2️⃣ 开发环境配置(Linux/WSL)及SDK安装;3️⃣ 两种实践路径——官方HelloWorld样例与自定义应用开发;4️⃣ 实际硬件部署方法(nRF/STM32)及常用west命令速查;5️⃣ 典型问题解决方案。通过qemu_x86模拟器演示了基础打印功能实现,为后续深度开发奠定基础。

hemoparrot的专栏 1361

Liunx 环境下vsftpd的三种实现方法

说明: 如果不做说明,一般安装命令均使用ROOT权限,用 # 表示 特别说明:无 以下文章介绍Liunx 环境下vsftpd的三种实现方法 一、前言 Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。Vsftp...

数据库天地 178

亲测解决This application failed to start because no Qt platform plugin could be initialized.

这个问题是由于环境变量改变或者Qt的路径改变导致,解决办法是在环境变量里面重新添加Qt路径。

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 2920

SAP SEGW 事物码里的 Association 建模方式

Association 模型用于描述 OData 模型里不同 Entity Type 之间的关联关系。我们来看一个具体的例子:Principal Entity(主体):代表 association 的主导端。Cardinality(基数):指定主体实体类型和依赖实体类型之间的关系。按 F4 或点击从列表中选择。关联的多重性如下:为引用约束()指定以下参数,目的是将主体实体类型的每个键,关联到从属实体类型的一个属性:Referential Constraints 的一个例子如下: 引用约束(Referenti

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 909

FTP报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()

此报错是由于新版本的vsftp针对用户安全性进行了升级使,用户被锁定的 chroot 目录不可写,防止安全漏洞。但发现修改后,仍然报错,所以采取了不得已的一种方法,那就是重新修改根目录所有文件的权限。也多由于用户直接对大量目录直接赋权,网上教程较多。多为修改vsftpd.conf文件。(2)增加网站根目录(/var/www)和数据库文件夹(/var/lib)777权限。,因为修改后意味着,后面要重新对所有文件夹更改读写权限,以便访问。

国庆的博客 4456

解锁机器人逆运动学算法:从理论到实战

机器人逆运动学,简单来说,就是已知机器人末端执行器(如机械臂的手部、工具等)期望达到的位置和姿态,求解机器人各个关节需要达到的角度或位移的过程。在机器人的实际应用场景中,逆运动学起着不可或缺的作用。以工业制造中的焊接机器人为例,为了完成复杂的焊接任务,焊接头(末端执行器)需要精准地到达工件上的各个焊接点,并保持合适的姿态以确保焊接质量。这时,逆运动学算法就根据焊接点的三维坐标以及焊接头应有的姿态(如角度等),计算出机械臂各个关节的转动角度,从而控制机械臂带动焊接头准确地运动到目标位置。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2052

vsftpd的安装和使用

目录 1、vsftpd的简介... 2 2、特点... 2 3、安装... 2 4、创建虚拟用户... 2 5、vsftpd服务器的配置... 4 6、vsftpd配置文件说明... 7 7、防火墙的配置... 8 8、vsftpd的验证... 9 9、vsftpd的常用命令... 10 10、反复需要验证ftp身份问题解决... 10 1、vsftpd的简介 vsftpd...

Aaron_Run的博客 8万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

linux下ftp的server/client的部署及使用

1.首先在一台linux机器上安装ftp服务端软件,例如proftpd,vsftpd等等 2.ftp客户端使用 (1)ftp remoteserver      通过ip或者主机名来来通过ftp协议连接ftp服务端 (2)cd dirname      切换ftp服务器上的目录 (3)lcd dirname   切换ftp客户端所在机器上的当前目录 (4)get path/fil

@_囚徒-2018_的家园 4519

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Vsftpd使用FtpClient上传文件踩过的坑

1.切换工作目录返回false怎么破? ftpClient.changeWorkingDirectory(“/images”),切换工作目录是目录直接写相对于local_user目录的路径即可。 2.上传图片文件损坏怎么破? 设置文件上传形式为二进制格式即可。ftpClient.setFileType(FTP.BINARY_FILE_TYPE) 3.storeFile保存文件失败怎么破? 可以在F...

weixin_38482723的博客 906

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

vsftpd的配置详解

vsftpd的配置详解

miner_k的博客 2974

vsftpd配置详解(上,中,下)

 一、vsftpd 简介Vsftpd是一个基于GPL发布的类UNIX系统的ftp服务器软件。其全称是Very Secure FTPDeamon,在安全性、速度和稳定性都有着不俗的表现。在安全性方面,vsftpd针对程序的权限来设计,以一般身份启动服务,对Linux系统的使用权限较低;在千兆以太网上,vsftpd的速度可以达到86MB/s;在稳定性上更是优秀,资料表明,完全工作24小

parasol2001的专栏 1120

ls官方源代码

/* `dir', `vdir' and `ls' directory listing programs for GNU. Copyright (C) 85, 88, 90, 91, 1995-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public

xuchaoxin1375的博客 2286

java常用的sftp 工具包

2、ssh-j新秀工具包 最低支持java8 搭配try-with-resource 代码量很少 不支持文件流上传,原因嘛 实际的上传方法进行了一系列的判断 是不是文件 、是不是文件夹 我觉得暂时不支持 ,以后应该会支持的,只不过要改动一下底层的逻辑。1、jsch 挺老的工具包 jdk可以最低支持到1.6 目前最高版本0.1.55 已经多年没有更新,jsch功能其实挺强大的,只不过时间的原因,java7后的新写法 jsch都不支持 ,如果自己封装一下 也是挺好用的,毕竟他支持文件和文件流上传。

风林火山 1237

Vsftp安装配置(超详细版)

VSFTP,全称为Very Secure FTP,是一种高度安全的FTP服务器软件。它是一款针对安全和性能进行优化的FTP服务器,拥有速度快、稳定、易用和安全性高的特点。VSFTP是在GPL许可证下发布的自由软件,可以在大多数类UNIX系统中使用。VSFTP支持IPv6、SSL/TLS加密传输,同时还提供了多种认证方式,包括本地用户、PAM、LDAP等等。同时,VSFTP也支持虚拟用户和虚拟目录,便于管理员进行用户管理。总之,VSFTP是一款功能强大且安全性高的FTP服务器软件,深受系统管理员和开发者的欢迎

Mortalz7 5万+

FTP客户端连接服务器执行ls报错

ftp服务器远程连接报错,执行ls命令不成功

qq_36640234的博客 2303

VSFTPD----FtpClient

一.FtpClient java 技术,使用 FtpClient 使用使用 java 代码上传文件到 vsftpd 服务端 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati...

Miracle_Gaaral的博客 472

linux用户ftp失败,Linux下 FTP 常见错误 500 530等错误解决方法

1. 日志查询/var/log/xferlog#####以下都是在ftp服务端更改:2. 500 OOPS 报错:[root@semptian-6 rpm]# ftp 192.168.40.131Connected to 192.168.40.131 (192.168.40.131).220 (vsFTPd 2.2.2)Name (192.168.40.131:root): test331 Ple...

weixin_29123281的博客 3876
上一篇: vsftpd ftp client pwd implementation source code
下一篇: arm qt5 x11 libxcb
shell_albert
博客等级 码龄15年 45粉丝 271原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值