0

使用 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# 代码中缺少什么?

4

0 回答 0