使用 edtFTPnet/PRO 库连接到 FTPS 服务器。
public void Run(string serverAddress, int serverPort, string userName, string password)
{
ftpConnection.ServerAddress = serverAddress;
ftpConnection.ServerPort = serverPort;
ftpConnection.UserName = userName;
ftpConnection.Password = password;
// select explicit FTPS
ftpConnection.Protocol = FileTransferProtocol.FTPSExplicit;
// switch off server validation (unsafe - only do this when testing)
ftpConnection.ServerValidation = SecureFTPServerValidationType.None;
ftpConnection.MinSSLVersion = SSLFTPSSLVersion.TLS12;
// connect to server
ftpConnection.Connect();
// get the current working directory and files
ftpConnection.GetFiles();
ftpConnection.Close();
}
但是,当 lib 发送PBSZ 0
命令时,服务器会以 502 响应:
Reply: 220-Welcome
Reply: 220
Command: --->AUTH TLS
Reply: 234 SSL/TLS enabled...start negotiation
...
[Debug]: Synchronous handshake complete
[Debug]: Tls1, Tls11, Tls12 handshake complete.
Command: --->PBSZ 0
Reply: 502 Command unknown, not supported or not allowed...
[Debug]: Expected reply codes = [200,235](strict=False)
[Debug]: Purging task queue
[Debug]: Closing connection [instance=19,abrupt=False]
Command: --->QUIT
Reply: 221-
Reply: 221 Goodbye
如果我从 FileZilla 打开与同一 FTP 服务器的另一个连接,我会看到以下内容:
Status: Connection established, waiting for welcome message...
Trace: CFtpControlSocket::OnReceive()
Response: 220-Welcome
Response: 220
...
Command: AUTH TLS
Trace: CFtpControlSocket::OnReceive()
Response: 234 SSL/TLS enabled... start negotiation
Trace: CFtpLogonOpData::ParseResponse() in state 2
Status: Initializing TLS...
Trace: tls_layer_impl::client_handshake()
...
Status: Verifying certificate...
Trace: CFtpControlSocket::SetAsyncRequestReply
Status: TLS connection established.
...
Command: PBSZ 0
Trace: tls_layer_impl::on_read()
Trace: CFtpControlSocket::OnReceive()
Response: 200 PBSZ set to PBSZ 0
导致服务器响应 502 并响应 FileZilla 客户端的 200 的 C# 代码中缺少什么?