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

前言

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

比如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.mzph.cn/news/816843.shtml

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

相关文章

vue 上传csv文件

index---------主页面&#xff08;图1&#xff09; form-----------子页面&#xff08;图2&#xff09; index.vue /** 重点&#xff01;&#xff01;&#xff01;&#xff01; * 获取表单组件传递的信息&#xff0c;传给后端接口 * param {从form表单传递的数据} datas * Fi…

【进阶六】Python实现SDVRPTW常见求解算法——离散粒子群算法(DPSO)

基于python语言&#xff0c;采用经典离散粒子群算法&#xff08;DPSO&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. …

关于运行阿里云直播Demo报的错

flutter --version dart --version 如何使用Flutter框架推流_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心MediaBox音视频SDK下载指南_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心 终端输入 dart pub --trace get --no-precompile 打印详细报错信息 详细咨询…

不再写满屏import导入

密密麻麻的import语句不仅仅是一种视觉上的冲击&#xff0c;更是对代码组织结构的一种考验。 我们是如何做到让import“占领满屏“的了&#xff0c;又该如何优雅地管理这些import语句呢&#xff1f; 本文将从产生大量import语句的原因、可能带来的问题以及如何优化和管理impo…

最优算法100例之47-从尾到头打印单链表

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 从尾到头打印单链表 题解报告 方法1:头插法逆置单链表然后依次打印;注意此处是不带头结点的单链表,带头节点的操作稍微有…

Linux 网络排查命令

端口相关服务检查 netstat -ntpl|grep [$Port]说明&#xff1a;[$Port]为相应的端口号。 0.0.0.0代表本机上可用的任意地址。比如&#xff0c;0.0.0.0:80表示本机上所有地址的80端口。 tcp 0.0.0.0:80表示在所有的可用接口上监听TCP的80端口 如果返回结果为空&#xff0c;说明…

Python | Leetcode Python题解之第29题两数相除

题目&#xff1a; 题解&#xff1a; class Solution:def divide(self, dividend: int, divisor: int) -> int:INT_MIN, INT_MAX -2**31, 2**31 - 1# 考虑被除数为最小值的情况if dividend INT_MIN:if divisor 1:return INT_MINif divisor -1:return INT_MAX# 考虑除数为…

Spring ORM

Spring Data JPA 作为Spring Data 中对于关系型数据库支持的一种框架技术,属于 ORM 的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度。 Java里面写的一段DB操作逻辑,是如何一步步被传递到 DB 中执行了的呢?为什么 Java 里面可以去对接不同产商的 DB 产…

仿真测试平台设计资料:921-6U CPCI卫星接口仿真测试平台

6U CPCI卫星接口仿真测试平台 一、设备概述 卫星接口仿真测试平台基于6U CPCI的结构&#xff0c;包含信号接口前板、后板&#xff0c;计算机主板、机箱、电源等硬件。硬件设计包括&#xff1a;信号接口前板、后板&#xff08;直接遥测遥控、串行RS422、LVDS&#xff0c;模拟量输…

Unity类银河恶魔城学习记录12-13 p135 Merge Skill Tree with Dogge skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili​​​​​​​ Inventory.cs using System.Collections.Generic; using Un…

基于springboot实现房屋租赁管理系统设计项目【项目源码+论文说明】

基于springboot实现房屋租赁管理系统设计演示 摘要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对房屋租赁信息管理混乱&…

[尚硅谷flink] 检查点笔记

在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 文章目录 11.1 检查点11.1.1 检查点的保存1&#xff09;周期性的触发保存2&#xff09;保存的时间点3&#xff09;保存的具体流程 11.1.2 从检查点恢复状态11.1.3 检查点算法…

解读宁波TISAX:保障企业安全的关键

&#x1f352;宁波TISAX&#xff0c;❣️作为信息安全领域的&#x1f92d;重要认证体系&#xff0c;为企业&#x1f41e;提供了强大的&#x1f349;安全保障。&#x1f40b;TISAX&#xff0c;&#x1f697;全称为Trusted Information Security Assessment Exchange&#xff0c;…

【树哈希】CF1182D Complete Mirror

CF1182D - Complete Mirror Description 给定一个 n n n 个点的无根树&#xff0c;求一个树根 r o o t root root,使得对于任意两个节点 v 1 , v 2 v_1,v_2 v1​,v2​&#xff0c;若满足 d i s t ( v 1 , r o o t ) d i s t ( v 2 , r o o t ) dist(v_1,root)dist(v_2,ro…

都2024年了,线上部署你不会只会log 调试吧,Arthas了解下!

文章目录 一、什么是Arthas&#xff1f;⛅背景⚡Arthas能为我们做什么 二、部署Arthas三、Arthas 基础命令四、Arthas 项目命令实战⌚thread 线程阻塞⏰watch命令演示⚡cpu飙升演示⛽方法演示 &#x1f6a8;小结 一、什么是Arthas&#xff1f; Arthas 是一款线上监控诊断产品&a…

[Linux][基础IO][一][系统文件IO][文件描述符fd]详细解读

目录 0.预备知识1.系统文件I/O1.open2.write/read/close/lseek 2.文件描述符fd1.[0 & 1 & 2]2.什么是文件描述符&#xff1f;3.文件描述符的分配规则4.重定向5.使用dup2系统调用 -- 完成重定向6.FILE 0.预备知识 什么叫做文件呢&#xff1f; 站在系统的角度&#xff0…

解放双手,批量绕过403

将dirsearch扫描出来的结果复制到url.txt&#xff0c;如下所示 url.txt [21:18:16] 502 - 0B - /var/log/exception.log [21:18:21] 502 - 0B - /WEB-INF/jetty-env.xml [21:18:22] 502 - 0B - /WEB-INF/weblogic.xml [21:18:27] 502 - 0B - /wp-json/wp/v2/u…

Android IPC机制

在Android系统中&#xff0c;IPC&#xff08;Inter-Process Communication&#xff0c;进程间通讯&#xff09;是指在不同进程之间传送数据和通讯的机制。Android中的应用通常运行在独立的沙箱环境中的进程里&#xff0c;由于安全限制&#xff0c;这些进程无法直接访问彼此的内…

Ubuntu 22.04 开机自动挂载webdav - 设置开机自启脚本 - 解决坚果云webdav无写入权限

效果图&#xff1a; 前言&#xff1a; 1&#xff09;亲测/etc/fstab的办法没有成功自动挂载&#xff0c;换成传统的rc.local可以解决&#xff1b; 2&#xff09;rc-local.service是系统自带的一个开机自启服务&#xff0c;但是在 ubuntu 20.04 上&#xff0c;该服务默认没有开…

基于JSP的教务管理

摘要 随着现代技术的不断发展&#xff0c;计算机已经深度的应用到了当下的各个行业之中&#xff0c;教育行业也不例外。计算机对教育行业中的教务管理等内容的帮助&#xff0c;使得教职工从传统的手工办公像计算机辅助阶段迈进&#xff0c;并且实现了非常好的发展。现在的学校…