由于我能够使用同一台计算机的filezilla连接,我不确定如何进行故障排除。 这里是我的代码
我还尝试了FluentFTP。 这是我的代码。 我得到例外
FtpWebClient
无法构建数据连接:不允许操作。
public void FtpStuff()
{
string url = "ftp://my.server.com";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("myname", "password");
request.EnableSsl = true;
request.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
// This is the line that throws the exception
string line = streamReader.ReadLine();
}
在这里是来自FluentFTP的记录信息。 我更改了真实的用户名和IP,但是其余数据(包括端口)是真实数据。 我的FTP服务提供商指定我必须在端口21上连接。问题似乎在发出public void FtpStuff()
{
FtpClient client = new FtpClient();
client.Host = "my.server.com";
client.Credentials = new NetworkCredential("myname", "password");
client.EncryptionMode = FtpEncryptionMode.Explicit;
client.Connect();
// This line gives me an exception.
var files = client.GetListing();
}
EPSV
我的filezilla logs。
# Connect() The thread 0x5514 has exited with code 0 (0x0). The thread 0xc80 has exited with code 0 (0x0). The thread 0x89d4 has exited with code 0 (0x0). Status: Connecting to 123.123.123.123:21 Response: 220 FTP Server Ready Command: AUTH TLS Response: 234 AUTH TLS successful Status: FTPS Authentication Successful Status: Time to activate encryption: 0h 0m 0s. Total Seconds: 0.1339995. Command: USER [email protected] The thread 0x6ddc has exited with code 0 (0x0). Response: 331 Password required for [email protected] Status: Testing connectivity using Socket.Poll()... Command: PASS *** Response: 230-*************************************************************************** Response: NOTICE TO USERS Response: This computer system is private property. It is for authorized use only. Response: Users (authorized or unauthorized) have no explicit or implicit Response: expectation of privacy. Response: Response: Any or all uses of this system and all files on this system may be Response: intercepted, monitored, recorded, copied, audited and inspected by Response: using this system, the user consents to such interception, monitoring, Response: recording, copying, auditing, inspection, and disclosure at the Response: discretion of such personnel or officials. Unauthorized or improper use Response: of this system may result in civil and criminal penalties and Response: administrative or disciplinary action, as appropriate. By continuing to Response: use this system you indicate your awareness of and consent to these terms Response: and conditions of use. LOG OFF IMMEDIATELY if you do not agree to the Response: conditions stated in this warning. Response: **************************************************************************** Response: 230 User [email protected] logged in Command: PBSZ 0 Response: 200 PBSZ 0 successful Command: PROT P Response: 200 Protection set to Private Command: FEAT Response: 211-Features: Response: AUTH TLS Response: CCC Response: CLNT Response: EPRT Response: EPSV Response: HOST Response: MDTM Response: MFF modify;UNIX.group;UNIX.mode; Response: MFMT Response: MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.groupname*;UNIX.mode*;UNIX.owner*;UNIX.ownername*; Response: PBSZ Response: PROT Response: REST STREAM Response: SIZE Response: SSCN Response: TVFS Response: 211 End Status: Text encoding: System.Text.ASCIIEncoding Command: SYST Response: 215 UNIX Type: L8 # GetListing(null, Auto) # GetWorkingDirectory() Command: PWD Response: 257 "/" is the current directory Command: TYPE I Response: 200 Type set to I # OpenPassiveDataStream(AutoPassive, "MLSD /", 0) Command: EPSV Response: 229 Entering Extended Passive Mode (|||50304|) Status: Connecting to 123.123.123.123:50304 Command: MLSD / Response: 150 Opening BINARY mode data connection for MLSD Status: FTPS Authentication Successful Status: Time to activate encryption: 0h 0m 0s. Total Seconds: 0.1210002. +---------------------------------------+ ----------------------------------------- Status: Disposing FtpSocketStream... # CloseDataStream() Response: 425 Unable to build data connection: Operation not permitted Status: Disposing FtpSocketStream... Exception thrown: 'FluentFTP.FtpCommandException' in FluentFTP.dll
i也可以使用winscp连接。如注释中所建议的,我确实检查了打开数据连接时是否重复使用TLS/SSL会话ID。看来是。
Status: Resolving address of mysite.com
Status: Connecting to 123.123.123.123:21...
Status: Connection established, waiting for welcome message...
Response: 220 FTP Server Ready
Command: AUTH TLS
Response: 234 AUTH TLS successful
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established.
Command: USER [email protected]
Response: 331 Password required for [email protected]
Command: PASS ************
Response: 230-***************************************************************************
Response: NOTICE TO USERS
Response: This computer system is private property. It is for authorized use only.
Response: Users (authorized or unauthorized) have no explicit or implicit
Response: expectation of privacy.
Response:
Response: Any or all uses of this system and all files on this system may be
Response: intercepted, monitored, recorded, copied, audited and inspected by
Response: using this system, the user consents to such interception, monitoring,
Response: recording, copying, auditing, inspection, and disclosure at the
Response: discretion of such personnel or officials. Unauthorized or improper use
Response: of this system may result in civil and criminal penalties and
Response: administrative or disciplinary action, as appropriate. By continuing to
Response: use this system you indicate your awareness of and consent to these terms
Response: and conditions of use. LOG OFF IMMEDIATELY if you do not agree to the
Response: conditions stated in this warning.
Response: ****************************************************************************
Response: 230 User [email protected] logged in
Command: SYST
Response: 215 UNIX Type: L8
Command: FEAT
Response: 211-Features:
Response: AUTH TLS
Response: CCC
Response: CLNT
Response: EPRT
Response: EPSV
Response: HOST
Response: MDTM
Response: MFF modify;UNIX.group;UNIX.mode;
Response: MFMT
Response: MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.groupname*;UNIX.mode*;UNIX.owner*;UNIX.ownername*;
Response: PBSZ
Response: PROT
Response: REST STREAM
Response: SIZE
Response: SSCN
Response: TVFS
Response: 211 End
Status: Server does not support non-ASCII characters.
Command: PBSZ 0
Response: 200 PBSZ 0 successful
Command: PROT P
Response: 200 Protection set to Private
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is the current directory
Command: TYPE I
Response: 200 Type set to I
Command: PASV
Response: 227 Entering Passive Mode (123,123,123,123,197,68).
Command: MLSD
Response: 150 Opening BINARY mode data connection for MLSD
Response: 226 Transfer complete
Status: Directory listing of "/" successful
.NET框架不支持TLS/SSL会话重复使用。如果您的服务器需要它
(看起来像是什么,以及如今非常常见的事物,以及对安全性是什么好处),您将无法使用
227 Entering Passive Mode (???)
MLSD
Connecting to ??? ...
Connection pending
Data connection opened
Trying reuse main TLS session ID
Session ID reused
150 Opening data channel for directory listing of "/"
Mywinscp.NET组装。
尽管与FluentFTP相反,但它不是本地.NET库,它对外部二进制具有依赖性。但这就是使它起作用的原因。
一些参考:
https://github.com/dotnet/runtime/issues/27916“身份验证失败了,因为远程方已关闭了传输流”,当时使用FluentFTP
通过TLS/SSL转移/从FTP服务器转移了运输流。
tls sessionreuse
FTP下载工作已有数年之后 - 根据这篇文章和其他地方的其他参考,TLS/SSL会话重复使用以.NET框架支持,但是有些,但是有些是在FTP下载工作已有多年的工作,但有些是在FTP下载工作多年的工作,但有些在其他地方支持TLS/SSL Session REUSE,但有些是在其他地方支持,但有些是在其他地方支持,但有些在其他地方支持TLS/SSL Session REUSE,但有些是在其他地方支持,但有些是在其他地方支持,但有些是在其他地方支持TLS/SSL Session REUSE,但有些是有些,但有些更新打破了它。在.NET [core]中它从未工作(另请参见上面的FtpWebRequest
github链接)。