最近几天我一直在为FTPS服务器而苦苦挣扎,该服务器需要我尝试通过.Net访问的" CCC"命令
我正在使用AlexFTPS库。我能够连接和协商AUTH TLS,我可以更改目录,但是当我尝试列出目录或下载文件时,服务器会要求"CCC"命令。当我发送"CCC"命令时,我收到"已启用 200 CCC 上下文"回复,但每当我收到服务器超时异常时,我都无法发送任何其他内容。
我做了进一步的测试:
- WS_FTP:如果我选中"SSL身份验证后使用未加密的命令通道"选项,则可以使用
- Filezilla :即使我将"CCC"添加为登录后命令也不起作用
- http://www.componentpro.com/ftp.net/:有效但不是开源 的
任何帮助将不胜感激...对不起,我不精通FTP...
这是我的代码:
Using Client As New AlexPilotti.FTPS.Client.FTPSClient
AddHandler Client.LogCommand, Sub(sender As Object, args As AlexPilotti.FTPS.Common.LogCommandEventArgs)
Console.WriteLine(args.CommandText)
End Sub
AddHandler Client.LogServerReply, Sub(sender As Object, args As AlexPilotti.FTPS.Common.LogServerReplyEventArgs)
Console.WriteLine(args.ServerReply)
End Sub
Dim cred = New Net.NetworkCredential("login", "password")
Client.Connect("ftps.server.com", cred, AlexPilotti.FTPS.Client.ESSLSupportMode.CredentialsRequired)
Client.SendCustomCommand("SYST")
Client.SendCustomCommand("PBSZ 0")
Client.SendCustomCommand("PROT P")
Client.SendCustomCommand("FEAT")
Client.SendCustomCommand("PWD")
Client.SendCustomCommand("TYPE A")
Client.SendCustomCommand("PASV")
Client.SendCustomCommand("CCC")
Client.SendCustomCommand("LIST")
Console.ReadKey()
End Using
谢谢!
CCC("清除命令通道")是一个特殊的命令,它将连接从SSL(以AUTH TLS
开头)再次降级回未加密。因此,仅仅将其声明为在已建立的控制连接上发送的自定义命令是不够的,必须像FTPS库AUTH TLS
类似的处理方式进行处理,以便在命令完成后发生TLS降级。