自定义FTP客户端PASV数据连接被拒绝

时间:2011-11-16 16:09:29

标签: c# .net ftp firewall passive-mode

试着简短

我使用c#.net 3.5编写了一个自定义FTP实现。系统使用TcpClient(用于活动模式的TcpListener)来管理连接。在单个实例中出现了奇怪的行为,我想问可能的原因。

客户本身在内部运作良好,很多客户对此感到满意。但是,我们有一个我无法弄清楚的。我已被发送到wirehark的痕迹,但没有真正的快乐。客户端机器落后于我认为(从客户端描述)成为一个大型网络基础架构。从网络外部,到同一服务器的连接就像魅力一样。这就是我所看到的。

使用我的客户端,在被动模式下运行,发送tcp握手请求以进行数据连接(服务器进入被动模式并指定端口),但永远不会被确认。这会导致重试和最终超时。

使用Filezilla(以及Windows资源管理器和IE ...)客户端再次使用被动模式,连接可以顺利进行。令人讨厌的是,这导致客户和我的老板指责代码。

通过wireshark跟踪,我看不到TCP帧之间的任何差异。所有控制连接都命中端口21,并在两种情况下都得到确认。旗帜很相似。这同样适用于数据连接,除了它是一个高数字端口52000+(但在我的跟踪中不一样)。

当我们开始涉及较低级别的协议问题时,我不是网络编程专家,而且我对更大网络警告的理解非常有限。作为开发人员,我立刻哭了“防火墙问题”,但这并没有真正为任何人解决任何问题。

要最终确定,是否有人知道可能导致此类行为的硬件/防火墙类型?我怀疑在应用程序级别阻塞流量的东西,但你永远不知道。

感谢阅读。

1 个答案:

答案 0 :(得分:0)

好好擦亮我的鞋子。你是否相信它,结果可能是用户错误。

悬而未决的一个重要问题是'为什么filezilla和windows工作但你的软件没有'。好吧,我终于从服务器端得到了一些信息,告诉我发生了什么。

似乎filezilla和Windows回归到活动模式但没告诉你。由于端口20(被动模式,控制主机端口)和21(活动模式,客户端数据端口)众所周知,网络硬件可能允许它(并且通常,无论防火墙设置如何)。

但是,我们的软件不会自动回退到活动模式,因为作为一项功能,FTP圈子不建议这样做。相反,活动模式是在设置连接时选择的单独选项。奇怪的是,正在发送的客户端握手请求正在被防火墙摧毁,但发生了陌生的事情。我打算洗手这个,并且可能会自动退回到我们的客户手中。

编辑:是的,用户在他们的网络上有一个他们没有告诉我们的代理。听到pebcak警报!