这是最初发布到StackOverflow,但由于代码的作品,这很可能是一个networking/防火墙的问题,我想我会问这里。
正如标题所述,我可以通过FileZilla Client从我的服务器连接到另一台机器,但是我不能通过代码(.Net – FTPWebRequest)
我知道代码是好的,因为它从另一台机器上运行。 我遇到的特定机器是在NAT后面,但是SA已经打开了所有与我们正在谈话的主机的通信的端口。
任何build议 – 我错过了明显的东西?
我尝试连接的例外是:
"Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond."
而且,我们试图连接的机器的日志显示:
7/26/2010 12:40:23 PM - (not logged in) (xx.xx.xxx.xxx)> Connected, sending welcome message... 7/26/2010 12:40:23 PM - (not logged in) (xx.xx.xxx.xxx)> 220-FileZilla Server version 0.9.32 beta 7/26/2010 12:40:23 PM - (not logged in) (xx.xx.xxx.xxx)> 220 ftp.xxxxxxxxxx.com 7/26/2010 12:40:23 PM - (not logged in) (xx.xx.xxx.xxx)> AUTH TLS 7/26/2010 12:40:24 PM - (not logged in) (xx.xx.xxx.xxx)> 234 Using authentication type TLS 7/26/2010 12:41:24 PM - (not logged in) (xx.xx.xxx.xxx)> 421 Login time exceeded. Closing control connection. 7/26/2010 12:41:24 PM - (not logged in) (xx.xx.xxx.xxx)> disconnected.
编辑:我使用代码和filezilla连接的被动模式。 根据要求,以下是代码(在另一台机器上)的成功ftps连接(LIST)的日志:
7/26/2010 12:45:03 PM – (还未login)(xx.xx.xxx.xxx)>已连接,正在发送欢迎信息…
7/26/2010 12:45:03 PM – (没有login)(xx.xx.xxx.xxx)> 220-FileZilla服务器版本0.9.32 beta
7/26/2010 12:45:03 PM – (没有login)(xx.xx.xxx.xxx)> 220 ftp.xxxxxxxxxx.com
7/26/2010 12:45:03 PM – (还未login)(xx.xx.xxx.xxx)> AUTH TLS
7/26/2010 12:45:04 PM – (not logged in)(xx.xx.xxx.xxx)> 234使用authenticationtypesTLS
2010/7/26 12:45:04 – (没有login)(xx.xx.xxx.xxx)>build立了SSL连接
7/26/2010 12:45:04 PM – (还未login)(xx.xx.xxx.xxx)> PBSZ 0
7/26/2010 12:45:04 PM – (还未login)(xx.xx.xxx.xxx)> 200 PBSZ = 0
7/26/2010 12:45:05 PM – (还未login)(xx.xx.xxx.xxx)> PROT P
7/26/2010 12:45:05 PM – (not logged in)(xx.xx.xxx.xxx)> 200保护级别设置为P
2010/7/26 12:45:05 – (没有login)(xx.xx.xxx.xxx)> USER用户名
7/26/2010 12:45:05 PM – (没有login)(xx.xx.xxx.xxx)> 331用户名所需的密码
7/26/2010 12:45:05 PM – (没有登入)(xx.xx.xxx.xxx)> PASS xxxxxxxxxx
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> 230login
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> OPTS utf8 on
2010/7/26 12:45:05 – 用户名(xx.xx.xxx.xxx)>启用了200个UTF8模式
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> PWD
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> 257“/”是当前目录。
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> CWD /
7/26/2010 12:45:05 PM – 用户名(xx.xx.xxx.xxx)> 250 CWD成功。 “/”是当前目录。
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> TYPE I
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> 200 Type设置为I
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> PASV
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> 227进入被动模式(xx,xx,xxx,xxx,xxx,xxx)
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> LIST
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> 150接受连接
7/26/2010 12:45:05 PM – 用户名(xx.xx.xxx.xxx)>build立数据连接的SSL连接
7/26/2010 12:45:05 PM – username(xx.xx.xxx.xxx)> 226传输OK
7/26/2010 12:46:43 PM – 用户名(xx.xx.xxx.xxx)>断开。
编辑 – 这里是使用FileZilla客户端从同一台机器成功尝试的日志
7/28/2010 10:01:53 AM – (未login)(xx.xx.xxx.xxx)>已连接,正在发送欢迎信息…
7/28/2010 10:01:53 AM – (没有login)(xx.xx.xxx.xxx)> 220-FileZilla服务器版本0.9.32 beta
7/28/2010 10:01:53 AM – (没有登入)(xx.xx.xxx.xxx)> 220 ftp.xxxxxxxx.com
7/28/2010 10:01:53 AM – (未login)(xx.xx.xxx.xxx)>build立了SSL连接
2010/7/28 10:01:53 – (没有login)(xx.xx.xxx.xxx)> USER用户名
2010/7/28 10:01:53 – (没有login)(xx.xx.xxx.xxx)> 331用户名所需的密码
7/28/2010 10:01:53 AM – (没有登入)(xx.xx.xxx.xxx)> PASS ********
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> 230login
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> SYST
7/28/2010 10:01:53 AM – 用户名(xx.xx.xxx.xxx)> 215由FileZilla模拟的UNIX
7/28/2010 10:01:53 AM – 用户名(xx.xx.xxx.xxx)> FEAT
7/28/2010 10:01:53 AM – 用户名(xx.xx.xxx.xxx)> 211-特征:
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> MDTM
2010/7/28 10:01:53 – username(xx.xx.xxx.xxx)> REST STREAM
2010/7/28 10:01:53 – username(xx.xx.xxx.xxx)> SIZE
7/28/2010 10:01:53 AM – 用户名(xx.xx.xxx.xxx)> MLSTtypes*;大小*;修改*;
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> MLSD
2010/7/28 10:01:53 – username(xx.xx.xxx.xxx)> AUTH SSL
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> AUTH TLS
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> UTF8
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> CLNT
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> MFMT
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> 211结束
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> PBSZ 0
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> 200 PBSZ = 0
7/28/2010 10:01:53 AM – 用户名(xx.xx.xxx.xxx)> PROT P
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> 200保护级别设置为P
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)>密码
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> 257“/”是当前目录。
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> TYPE I
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> 200types设置为I
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> PASV
7/28/2010 10:01:53 AM – username(xx.xx.xxx.xxx)> 227进入被动模式(xx,xx,xxx,xxx,xxx,xxx)
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> MLSD
2010/7/28 10:01:53 – 用户名(xx.xx.xxx.xxx)> 150接受连接
2010/7/28 10:01:53 – username(xx.xx.xxx.xxx)>build立数据连接的SSL连接
7/28/2010 10:01:53 AM – 用户名(xx.xx.xxx.xxx)> 226传输OK
2010/7/28 10:02:18 – 用户名(xx.xx.xxx.xxx)>断开。
处理这些types的问题可能很困难,因为日志通常只告诉你正在发生的事情的一部分。
在这一点上,最好的办法是使用数据包捕获和分析软件(如最优秀的免费Wireshark )来查看线路上发生了什么。
确保您捕获您的机器和远程系统之间的所有stream量,并尝试查看可以在工作连接和代码之间发现什么差异。 这可能会给你一个指示问题出在哪里。
请特别注意TLS连接的方式,因为它可能指出了实际问题(在IBM的文档中有一个相当好的和简单的理解文档)。 例如:
如果您看到TLS通道已经成功关联,那么您必须使用大枪:获取服务器的私钥并解码TLS通信。 这只会是可能的,但是,如果TLS连接不首先使用DH密钥交换 ,禁用在您的服务器或客户端。
一旦DH已被禁用,你有私钥,你可以按照Wireshark的维基页面上关于SSL / TLS的说明,这个说明在相当多的细节上解释了这个过程,或者这个博客文章可能更容易遵循。
我错过了一些明显的东西
你可能会犯一个错误,认为只有一种连接到ftp服务器的方法,因此假设你的代码和FileZilla客户端做的是一样的。
当它没有连接时显示日志。 您需要将其与成功连接的日志进行比较,以了解客户端如何连接。 (它可能不使用AUTH TLS或可能使用被动模式等)
另外,我对FileZilla一无所知,但是configuration(即FTP,TLS和NAT)可能会导致问题,以至于有些FTP服务器将自己描述为NAT-Friendly。