我有两台机器位于同一个防火墙/路由器后面 - 一台是 Windows 7 工作站,另一台是 Windows 2003 服务器。问题在于传出使用 FileZilla FTP 进行 FTP 访问客户(注意:不是服务器)在 Windows 2003 服务器上。
使用 Win7 工作站上的 FileZilla 客户端,我能够使用被动模式连接到外部 FTP 站点,没有任何问题。但是,当我尝试从 Windows 2003 服务器上的 FileZilla 客户端执行相同操作时,它在尝试检索目录列表时挂起。日志输出如下:
Status: Resolving address of xxxxx.com
Status: Connecting to xxx.xxx.xxx.xxx:21...
Status: Connection established, waiting for welcome message...
Response: 220---------- Welcome to ...
Command: USER ...
Response: 331 User ... OK. Password required
Command: PASS *************
Response: 230 OK. Current directory is /
Command: SYST
Response: 215 UNIX Type: L8
Command: FEAT
Response: 211-Extensions supported:
Response: EPRT
Response: IDLE
Response: MDTM
Response: SIZE
Response: REST STREAM
Response: MLST type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;
Response: MLSD
Response: ESTP
Response: PASV
Response: EPSV
Response: SPSV
Response: 211 End.
Status: Connected
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is your current location
Command: TYPE I
Response: 200 TYPE is now 8-bit binary
Command: PASV
Response: 227 Entering Passive Mode (xxx,xxx,xxx,xxx,164,24)
Command: MLSD
Error: Connection timed out
Error: Failed to retrieve directory listing
如您所见,已通过端口 21 建立连接,并且请求进入被动模式导致端口 42008 建立。但尝试通过该端口检索数据失败。这在 Win7 机器上完美运行。
我非常了解被动模式与主动模式。在这种情况下,Windows Server 2003 似乎阻止了某些端口上的流量。Windows 防火墙服务未在此设备上运行,因此我可以排除它是罪魁祸首。如果您有任何其他关于如何追踪此问题的建议,我将不胜感激。
更新 事实证明,它特定于一个 FTP 站点。我可以使用被动模式顺利连接到另一个站点。不同之处似乎是端口号。我可以访问的站点上的被动端口号是 4693。我无法访问的站点上的被动端口号超过 42000。这与情况有什么关系吗?
更新 我编写了一个小型套接字服务器程序,该程序在 Win7 工作站上运行,监听端口 50000,然后从 Windows 2003 框中运行 telnet 到工作站的地址/端口,然后...它成功了。因此,在 LAN 内,Windows 2003 允许流量。不知何故,它不允许流量通过互联网。令人困惑。
更新 问题出在 FTP 服务器上。查看答案以下。
答案1
在 Windows Server 2003 和 Windows XP 上,客户端应用程序使用的临时端口的默认范围是 1025 到 5000。在某些情况下,默认范围内的可用端口可能会被耗尽。
netstat -n
或netstat -b
查看活动连接
增加动态分配给客户端 TCP/IP 套接字连接的临时端口的上限范围。
- 启动注册表编辑器。
- 浏览到注册表中的以下项,然后单击该项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- 在“编辑”菜单上,单击“新建”、“DWORD 值”,然后添加以下注册表值以增加可以动态分配给客户端的临时端口数:值名称 MaxUserPort 值数据
- 关闭注册表编辑器。
注意:您必须重新启动计算机才能使此更改生效。
注意:增加用于客户端 TCP/IP 连接的临时端口范围会消耗 Windows 内核内存。请勿将此设置的上限值增加到高于容纳客户端应用程序套接字连接所需的值,以尽量减少不必要的 Windows 内核内存消耗。
答案2
所以现在看来,这是 FTP 服务器 (PureFTPd) 的问题。管理员调整了一些东西,重新启动了服务器,然后,一切都开始正常工作了。我不得不停止总是假设问题出在我的代码/配置上。
感谢所有做出贡献的人。