501 抱歉,但我不会连接到小于 1024 的端口
这是什么意思?我突然无法通过 FTP 传输任何内容。
答案1
在我看来,这听起来就像您的本地系统管理员刚刚锁定了您的代理。
答案2
您正在连接的服务器正在运行纯FTPd,并且您的 FTP 客户端处于主动模式。这意味着您的客户端通过端口 21 连接到服务器,服务器连接回您的客户端进行数据传输。在主动模式下,客户端指定服务器要连接的端口。历史上,这个端口是端口 20,但实际上并没有什么要求。Pure-FTPd 被硬编码为拒绝连接到指定小于 1024 的端口号的客户端:
/* from src/ftpd.c */
void doport2(struct sockaddr_storage a, unsigned int p)
{
/* ... */
if (p < 1024U) {
addreply_noformat(501, MSG_BAD_PORT);
return;
}
/* from src/messages_en.h */
#define MSG_BAD_PORT "Sorry, but I won't connect to ports < 1024"
1024 以下的 TCP/UDP 端口被视为特权端口,在 Unix/Linux 上,这意味着只有 root 才能绑定到这些端口。此代码可能是为了阻止用户以 root 身份连接,因为当前的最佳做法是尽可能少地以 root 用户身份执行操作。
最好的猜测是,您连接的 FTP 站点已将 FTP 服务器软件从其他软件更改为 Pure-FTPd。您可以通过以下两种方式之一来处理此问题:
- 更改为被动 (PASV) 模式。具体如何操作取决于您的客户端,但几乎所有 FTP 客户端都支持该模式。在被动模式下,客户端会与服务器建立连接以进行控制和数据传输。服务器永远不会与客户端建立连接。
- 将客户端提供给服务器的数据端口更改为 1024 或更高,以进行主动模式连接。我怀疑支持此功能的客户端比支持被动模式的客户端要少,但我确信有些客户端支持此功能。
如果您没有出站访问限制,或者服务器位于您的本地网络中,则使用被动模式通常更容易。如果您有出站访问限制,则两种模式实际上都不比另一种更容易使用,最好的办法是咨询负责网络安全的人员。