对常见FTP客户端/服务器的调查与分析

news2024/11/17 21:52:26

前言

主要是想看看常见的服务器和客户端是如何实现协议中要求的功能的,。

比如RF959要求的记录结构(Record Structure)页结构(Page Structure)Block ModeCompress Mode,看起来就很抽象。

实测发现,那些很抽象的要求,常见的服务器和客户端都没实现。(很好,我也有理由不实现了🥰)

服务器

一、vsftpd

官网标题Probably the most secure and fastest FTP server for UNIX-like systems,可见它非常靠谱。

二、FileZilla Server

  • 待办

客户端

一、Windows自带的FTP客户端

优点: 无

缺点:

  1. 支持的命令非常少,非常难用!!!
  2. 传输/下载没有进度条提示,不知道要等多久,传输大文件时,不知道的还以为卡住了!!!
  3. 控制台中文乱码(属于是控制台原因了)!!!
  4. 只支持PORT模式,不支持PASV模式,这个非常重要!!!
  5. 闭源!!!

总之就是一坨,可能还没我自己写的好用。

二、linux自带的tnftp客户端

Linux自带的ftp是tnftp。
在我的debian12上,这个软件包的信息如下:

Package: tnftp
Version: 20210827-4+b1
Priority: optional
Section: net
Source: tnftp (20210827-4)
Maintainer: xiao sheng wen <atzlinux@sina.com>
Installed-Size: 263 kB
Provides: ftp
Depends: libc6 (>= 2.33), libedit2 (>= 2.11-20080614-0), libssl3 (>= 3.0.0)
Conflicts: lukemftp
Replaces: lukemftp
Homepage: http://en.wikipedia.org/wiki/Tnftp
Tag: network::client, protocol::ftp, role::program, uitoolkit::ncurses,
 use::downloading, works-with::file
Download-Size: 128 kB
APT-Manual-Installed: no
APT-Sources: https://mirrors.tuna.tsinghua.edu.cn/debian bookworm/main amd64 Packages
Description: 增强 ftp 客户端
 tnftp 在 NetBSD (http://www.netbsd.org) 里,许多用户亲切的称呼为增强 ftp 客户
 端。
 .
 该软件包是 NetBSD ftp 客户端到其它系统的移植。
 .
 相比于 4.4BSD 里的标准 ftp 客户端,tnftp 实现了如下增强:
  * 在 ftp 里面的命令行编辑
  * 命令行获取网址,包括支持:
      - http 代理(参见:$http_proxy, $ftp_proxy)
      - 认证
  * 上下文敏感的命令和文件名补齐
  * 动态进度显示
  * IPv6 支持(来自 WIDE 项目)
  * 修改时间保留
  * 按页显示本地和远程文件,列出的目录(参见:`lpage', `page', `pdir')
  * 被动模式支持,并能返回到主动模式
  * `set option 设置选项' 忽略 ftp 环境变量
  * TIS 防火墙工具包网关 ftp 代理支持(参见:`gate')
  * 传输速度限流(参见:`-T', `rate')

它的命令很多,比widnows的丰富,但是,
在实现FTP服务器和客户端时,也发现了一些它的一些问题。

1. ASCII 表示类型不能正常传输

它的ASCII模式根本不能正常传输文件。

用我自己编写的服务器程序,发现客户端会提前关闭数据连接(data connection),导致服务器在向关闭的套接字写入时产生SIGPIPE信号。(这个信号需要处理,否则服务器程序会abort()退出)

以为是我的问题,使用了权威的vsftpd来测试,发现也是同样结果。

在这里插入图片描述
在这里插入图片描述
抓包观察,可以看到一个很抽象的地方:客户端tnftp发送TYPE A来向服务器vsftpd请求使用ASCII模式传输,服务器也响应了 “200 Switching to ASCII mode”,结果在RETR Country.mmdb的时候,又提示了BINARY mode,前后矛盾。

实际上,即使是将二进制文件中的\r全部去掉,并且把\n换成协议要求的\r\n,再以ASCII模式传输,仍然会出现这样的问题,很难理解tnftp里面是如何处理的。

2. 传输模式不一致

实测还发现,如果服务器不支持SYST命令(例如返回 ”502 command is not implememnted“),那么tnftp会默认使用ASCII表示类型传输。

但是,如果服务器支持SYST,且服务器是UNIX/Linux系统(返回 “215 UNIX Type: L8”),那么tnftp就会默认使用BINARY模式传输(也就是表示类型为图像/binary)。

3. SYSY和SIZE

实测发现,如果支持SYST命令,但是不支持SIZE命令,那么会出现很奇怪的现象:RETR下载文件时,会先发送PASV请求,紧跟着再发送PORT请求,搞不懂什么情况。

(服务器如果按照串行来处理命令,就会因为PASV导致服务器阻塞在的accept()等待客户端连接,但是PORT又导致客户端用accept()等待服务器连接。客户端卡住不能用。)

4. 代码可读性极差

下载了一份tnftp的代码,可读性很差。
三四百行的函数随处可见,goto满天飞,非常琐碎。很佩服开发者能够把它给维护起来。

大概就是下面这张图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1594854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springBoot+vue编程中使用mybatis-plus遇到的问题

mybatis-plus中遇到的问题Code Companion Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)…

专题十三、预处理器

预处理器 1. 预处理器的工作原理2. 预处理指令3. 宏定义3.1 简单的宏3.2 带参数的宏3.3 # 运算符3.4 ## 运算符3.5 宏的通用属性3.6 宏定义中的圆括号3.7 创建较长的宏3.8 预定义宏3.9 C99 中新增的预定义宏3.10 空的宏参数3.11 参数个数可变的宏3.12 __func__ 标识符 4. 条件编…

SMS垃圾短信识别项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 项目背景 随着数字通信的快速发展&#xff0c;垃圾短信成为了一个普遍而烦人的问题。这些不请自来的消息不仅打扰了我们的日常生活&#xff0c;…

嵌入式单片机 TTL电平、232电平、485电平的区别和联系

一、简介 TTL、232和485是常见的串口通信标准&#xff0c;它们在电平和通信方式上有所不同&#xff0c; ①一般情况下TTL电平应用于单片机外设&#xff0c;属于MCU/CPU等片外外设&#xff1b; ②232/485电平应用于产品整体对外的接口&#xff0c;一般是片外TTL串口转232/485…

React 19 的新增功能:Action Hooks

React 是前端开发领域最流行的框架之一。我喜欢 React 是因为它背后的团队和社区对它的热情。当社区提出新功能和改进的需求时&#xff0c;团队会倾听&#xff0c;React 的未来是令人兴奋和有趣的。 让我们来看一下 React 19 中令开发人员提升开发效率的新特性。对于每个钩子&…

内网渗透系列-mimikatz的使用以及后门植入

内网渗透系列-mimikatz的使用以及后门植入 文章目录 内网渗透系列-mimikatz的使用以及后门植入前言mimikatz的使用后门植入 msf永久后门植入 &#xff08;1&#xff09;Meterpreter后门&#xff1a;Metsvc&#xff08;2&#xff09;Meterpreter后门&#xff1a;Persistence NC后…

Matlab隐式方程拟合【案例源码+视频教程】|隐函数拟合|非线性拟合|视频教程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

Zookeeper和Kafka的部署

目录 一、Zookeeper的基本概念 1. Zookeeper定义 2. Zookeeper工作机制 3. Zookeeper特点 4. Zookeeper数据结构 5. Zookeeper应用场景 5.1 统一命名服务 5.2 统一配置管理 5.3 统一集群管理 5.4 服务器动态上下线 5.5 软负载均衡 6. Zookeeper 选举机制 6.1 第一…

深入解析Tomcat的工作流程

tomcat解析 Tomcat是一个广泛使用的开源Servlet容器&#xff0c;用于托管Java Web应用程序。理解Tomcat的工作流程对于开发人员和系统管理员来说是非常重要的。本文将深入探讨Tomcat的工作原理&#xff0c;包括请求处理、线程池管理、类加载、以及与Web服务器之间的通信。 ###…

【NOI】C++程序设计入门五

文章目录 前言一、两数交换1.概念2.样例3.交换方法3.1 方法一&#xff1a;请个临时工3.2 方法二&#xff1a;加法交换律3.3 方法三&#xff1a;swap函数 4.小结 二、拆位求解1.概念2.用法 三、样题讲解问题&#xff1a;1605. 求一个两位数的个位和十位的和问题&#xff1a;1606…

[图像处理] MFC OnMouseMove()绘制ROI矩形时的闪烁问题

文章目录 问题对策代码完整工程 结果使用Picture控件的RedrawWindow()的效果使用Dialog的RedrawWindow()的效果使用Picture控件的RedrawWindow()&#xff0c;ROI绘制到图像外的效果 结论 问题 最近想通过业余时间&#xff0c;写一个简单的图像处理软件&#xff0c;一点点学习图…

基于表面势的增强型p-GaN HEMT器件模型

来源&#xff1a;电子学报 22年 摘要 为了满足功率电路及系统设计对p-GaN HEMT&#xff08;High Electron Mobility Transistor&#xff09;器件模型的需求&#xff0c;本文建立了一套基于表面势计算方法的增强型p-GaN HEMT器件SPICE&#xff08;Simulation Program with Int…

Ceph [OSDI‘06]论文阅读笔记

原论文&#xff1a;Ceph: A Scalable, High-Performance Distributed File System (OSDI’06) Ceph简介及关键技术要点 Ceph是一个高性能、可扩展的分布式文件系统&#xff0c;旨在提供出色的性能、可靠性和可扩展性。为了最大化数据和元数据管理的分离&#xff0c;它使用了一…

信息系统项目管理师0051:管理基础(4信息系统管理—4.1管理方法—4.1.1管理基础)

点击查看专栏目录 文章目录 第四章 信息系统管理4.1管理方法4.1.1管理基础1.层次结构2.系统管理第四章 信息系统管理 在信息技术和数据资源要素的推动下,社会各领域已经并正在加速进入数字化的全新发展时期,基于智能、网络和大数据的新经济业态正在形成,从“数字融合”向“数…

Linux(Ubuntu) 查看并删除使用【dpkg】安装的软件【mysql 8.3安装失败---原因调查】

目录 ■前言 ■查看安装的软件 ■删除安装的软件 正常删除&#xff08;dpkg -r xxxxName&#xff09; 问题解决&#xff1a;use --purge to remove them too ■其他调查信息 命令 图片1 图片2 图片3 图片4 ■前言 安装Mysql8.3失败 我的服务器-CSDN博客 ■查看安…

动态多目标测试函数DF1-DF14,FDA1-FDA5,SDP1-SDP12的TurePOF(MATLAB代码)

动态多目标测试函数FDA1、FDA2、FDA3、FDA4、FDA5的turePOF&#xff08;MATLAB代码&#xff09; 动态多目标测试函数DF1-DF14的turePOF变化&#xff08;提供MATLAB代码&#xff09; 动态多目标测试函数SDP1-SDP12的TurePOF变化视频&#xff08;含MATLAB代码及参考文献&#xff…

数据结构与算法——20.B-树

这篇文章我们来讲解一下数据结构中非常重要的B-树。 目录 1.B树的相关介绍 1.1、B树的介绍 1.2、B树的特点 2.B树的节点类 3.小结 1.B树的相关介绍 1.1、B树的介绍 在介绍B树之前&#xff0c;我们回顾一下我们学的树。 首先是二叉树&#xff0c;这个不用多说&#xff…

车载电子电器架构 —— 电子电气架构开发总结和展望

车载电子电器架构 —— 电子电气架构开发总结和展望 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要…

HTML基本语法

前言&#xff1a; html中不区分大小写&#xff0c;但建议用小写&#xff0c;因为使用组件时一般使用大写&#xff0c;便于区分两者 注释&#xff1a; <!-- 注释的内容 --> ~注释的内容只会显示在源码当中&#xff0c;不会显示在网页中 ~用于解释说明代码&#xff0c;或隐…

论文笔记:The Expressive Power of Transformers with Chain of Thought

ICLR 2024 reviewer 评分 6888【但是chair 很不喜欢】 1 intro 之前的研究表明&#xff0c;即使是具有理想参数的标准Transformer&#xff0c;也无法完美解决许多大规模的顺序推理问题&#xff0c;如模拟有限状态机、判断图中的节点是否相连&#xff0c;或解决矩阵等式问题 这…