对常见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.hqwc.cn/news/619214.html

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

相关文章

快速入门深度学习9.1(用时20min)——GRU

速通《动手学深度学习》9.1 写在最前面九、现代循环神经网络9.1 门控循环单元&#xff08;GRU&#xff09;9.1.1. 门控隐状态9.1.1.1. 重置门和更新门9.1.1.2. 候选隐状态9.1.1.3. 隐状态 9.1.3 API简洁实现小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 20…

【状态压缩 容斥原理 组合数学】100267. 单面值组合的第 K 小金额

本文涉及知识点 状态压缩 容斥原理 组合数学 二分查找算法合集 LeetCode100267. 单面值组合的第 K 小金额 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给你一个整数 k 。 你有无限量的每种面额的硬币。但是&#xff0c;你 不能 组合使用不同面额的硬币。 返回…

适合刚入门同学做的小程序项目

今天用uniapp做了一个酒桌数字筛子的小程序&#xff0c;因为平时玩的骰子小程序都是骰子的动画效果展示&#xff0c;喝多的时候非常容易看错&#x1f621;&#x1f601;&#xff0c;所以就想着看能不能做一个纯数字显示类型的骰盅&#xff0c;一目了然干净利落。&#x1f44f;&…

数据结构之排序了如指掌(三)

目录 题外话 正题 快速排序 Hoare法 Hoare法思路 Hoare法代码详解 挖坑法 挖坑法思路 挖坑法代码 前后指针法 前后指针法思路 前后指针法代码 小结 题外话 我们接着把没有写完的排序内容完成,快速排序其实大同小异,大家好好把思路整理一下 正题 快速排序 快速排序一…

BTS441RGATMA1 N沟道 43V 17A高侧电源开关芯片 英飞凌

BTS441RGATMA1是一款由Infineon Technologies制造的高侧开关电源芯片。 BTS441RGATMA1具有以下功能&#xff1a; 高端电源开关&#xff1a;BTS441RGATMA1是一种N通道功率场效应晶体管&#xff08;FET&#xff09;&#xff0c;用于高端电源开关应用。 高侧开关&#xff1a;该器件…

数据结构-堆详解

堆 图片&#xff1a; 二叉堆的父节点为这个子树的最值。 如何维护它。 我们发现它是一棵二叉树&#xff0c;那就自然满足若父节点为 x x x 则左儿子节点为 x 2 x\times2 x2 右儿子为 x 2 1 x\times 2 1 x21 这是显然的&#xff0c;但如果写成指针或结构体就太麻烦了&…

MacOS Docker 部署 Solr 搜索引擎

一、简介 Solr 是 Apache 下的一个顶级开源项目&#xff0c;采用 Java 开发&#xff0c;它是基于 Lucene 的全文搜索服务器。Solr 可以独立运行在 Jetty、Tomcat 等这些 Servlet 容器中。Solr 提供了比 Lucene 更为丰富的查询语言&#xff0c;同时实现了可配置、可扩展&#x…

免费使用Kimi的API接口,kimi-free-api真香

今年&#xff0c;随着各大GLM模型的开源和算力的提升&#xff0c;尤其是最近比较火热的月之暗面的Kimi 模型&#xff0c;AI应用场景中的各种智能体如雨后春笋般涌现。许多同学们纷纷表达了加入AI应用的学习和测试的愿望&#xff0c;然而各大模型提供商所提供的API的免费tokens在…

集群管理命令总结

前言 在进行TPC性能测试时用到两个集群管理命令&#xff1a;clush 和 pssh&#xff0c;这俩命令都可以在多台服务器上并发执行相同命令&#xff0c;其中个人比较推荐 clush&#xff0c;因为感觉 clush 比较好用&#xff0c;本文来总结一下 clush 和 pssh 的安装配置和使用。 …

读所罗门的密码笔记20_更好的自己

1. 民营部门 1.1. 障碍最大的一步&#xff0c;与履行协议所需要的人才和技能有关 1.2. 多样性很好&#xff0c;不要过分依赖任何一种资源&#xff0c;因为政府会出于政治原因淡化问题&#xff0c;不尊重科学&#xff0c;甚至退出协议 1.2.1. 民营部门和非政府组织的强大联盟…

在Mac中打开终端的3种方法

在使用Mac时&#xff0c;有时需要深入研究设置&#xff0c;或者完成一些开发人员级的命令行任务。为此&#xff0c;你需要终端应用程序来访问macOS上的命令行。下面是如何启动它。 如何使用聚焦搜索打开终端 也许打开终端最简单、最快的方法是通过聚焦搜索。要启动聚焦搜索&a…

算法1: 素数个数统计

统计n以内的素数个数 素数&#xff1a;只能被1和自身整除的自然数&#xff0c;0和1除外&#xff1b; 举例&#xff1a; 输入&#xff1a;100 输出&#xff1a;25 import java.util.*; class Test1{public static void main(String[] args){int a 100; //输入数字//…