关于java:目录为空时,NLST上的FTP超时

关于java:目录为空时,NLST上的FTP超时

FTP Timeout on NLST when directory is empty

编辑:了解到Webmethods实际上使用NLST,而不是LIST,如果这很重要

我们的企业使用WebMethods集成服务器来处理我们的大部分出站通信,其FTP功能尚有待改进。我们遇到的问题可能是WebMethods特有的,但是如果有人能指出可能导致这种情况的原因,我将不胜感激。

当轮询我们合作伙伴的两个FTP服务器时,我们连接没有问题,但是在空目录(没有文件和子目录)上执行NLST时,它会超时。实际错误是:

com.wm.net.ftpCException: [ISC.0064.9010] java.net.SocketTimeoutException: Accept timed out

它是在调用pub.client.ftp:ls服务期间抛出的。我已经使用多个FTP客户端登录到相同站点,没有问题。我已经在Windows,FileZilla和lftp中使用了默认的FTP客户端。一切都没有问题。据我所知,这些服务器本身不是相同的FTP服务器软件。一个是Microsoft FTP,另一个是我不确定的,但绝对不是Microsoft。

知道在空目录上等待NLST响应时,FTP客户端超时的原因是什么? FTP服务器的可见响应似乎相同,但是NLST对我不知道的空目录的响应方式有所不同吗?

在这两个服务器上,此问题是一致的。在其中包含文件或子目录的目录上,所有功能均正常运行,但在空目录下则不能正常运行。

任何想法或方向将不胜感激。

谢谢!

埃里克·西普尔


我在WebMethods IS版本6.5更新WmPRT_6-5-1_SP1,IS_6-5_SP3中尝试了此操作。

第一次成功。

我在FTP服务器(Debian的默认ftpd)上打开了调试功能。 WebMethods的NLST尊重传递给它的主动/被动参数。

NLST命令没有什么特别之处,也没有在空目录下的正确行为-如果LIST有效,那么RETR,STOR和NLST也应如此。如果NLST使用非空目录,则应使用空目录。

所以我的猜测是:

  • 您的WM版本有我的错误
  • 您的FTP服务器有我的错误
  • 您的系统中有一个古怪的协议感知防火墙,它不喜欢没有数据的FTP数据套接字。

防火墙供应商在FTP方面有点任性...
与其他客户端进行测试时,请确保它来自运行WebMethods Integration Server的同一台计算机。

仅作记录,这是活跃的NLST应该发生的情况

  • 客户端打开一个监听套接字,并发送带有该套接字详细信息的PORT命令
  • 客户端发送NLST命令
  • 服务器连接到客户端的侦听套接字(这是数据套接字)
  • 服务器通过数据套接字传输列表(在这种情况下为零字节)
  • 服务器关闭数据套接字

...并处于被动模式

  • 客户端发送PASV命令
  • 服务器打开一个监听套接字,并用包含其详细信息的PASV响应进行回复
  • 客户端连接到侦听套接字(这是数据套接字)
  • 客户端发送NLST命令
  • 服务器通过数据套接字传输列表(再次为零字节)
  • 服务器关闭数据套接字

Guillermo Vasconcelos的回答正确。有两种FTP模式,主动模式和被动模式。默认的FTP模式是活动的。活动服务器要求服务器通过某些TCP / IP端口连接回客户端。这不适用于防火墙,因为可能会阻塞此端口,或者如果您位于带有NAT(未映射)的路由器后面。

如果改用被动(PASV)模式,则不应挂起。


我不确定这是否是相同的问题,但是不久前我在Java(commons.net)中使用另一个FTP客户端时也遇到了类似的症状。原来是由连接的主动/被动模式引起的。
很抱歉,我无法为您提供更多详细信息,仅此而已...希望能有所帮助。


FTP要求通过防火墙同时打开指定的端口和该端口上的端口。当我遇到webMethods超时问题时,这是因为防火墙没有打开返回端口。

霍华德


我明天将在此处进行维护时运行一些将设置设为被动的新测试,但是我不确定这是问题所在。如果该目录中有文件或子目录,我们就能获得目录列表。仅当我们要进行NLST操作的目录为空时,它才会失败。

主动/被动差异只会在空目录中体现出来,还是存在另一种可能性?


推荐阅读

    linux执行命令超时?

    linux执行命令超时?,时间,代码,系统,名字,环境,工作,服务,下来,名称,地址,如

    linux执行命令超时?

    linux执行命令超时?,时间,代码,系统,名字,环境,工作,服务,下来,名称,地址,如

    linux服务器基本命令?

    linux服务器基本命令?,地址,系统,设备,网络,工作,标准,信息,电脑,命令,密码,l

    linux服务器下载命令?

    linux服务器下载命令?,服务,密码,系统,档案,工具,网络,公共,百度,地址,认证,l

    linux服务器常用命令?

    linux服务器常用命令?,工作,系统,地址,信息,命令,目录,管理,标准,设备,功能,

    linux服务器保存命令?

    linux服务器保存命令?,时间,状态,档案,电脑,命令,信息,位置,编辑,文件,模式,L

    linux服务器扫盘命令?

    linux服务器扫盘命令?,地址,工作,命令,目录,数据,单位,名称,系统,管理,信息,L

    linux命令切换服务器?

    linux命令切换服务器?,地址,名称,系统,环境,实时,命令,服务器,脚本,路径,版

    linux命令ssh超时?

    linux命令ssh超时?,时间,服务,网络,地址,系统,密码,管理,信息,服务器,命令,li

    linux服务器搭建命令?

    linux服务器搭建命令?,系统,服务,软件,地址,平台,在线,密码,工具,环境,百度,l

    linux命令超时检测?

    linux命令超时检测?,时间,网络,检测,系统,地址,状态,电脑,代码,软件,设备,lin

    服务器重启命令linux?

    服务器重启命令linux?,工作,标准,设备,服务,系统,名称,命令,百度,网络,密码,

    linux服务器删除命令?

    linux服务器删除命令?,系统,服务,管理,情况,命令,工作,互动,地址,软件,较大,l

    linux服务器负荷命令?

    linux服务器负荷命令?,信息,电脑,中科,环境,工具,系统,平均,检测,情况,状态,l

    linux常见服务器命令?

    linux常见服务器命令?,信息,工作,标准,地址,设备,系统,情况,时间,状态,命令,

    linux服务器基础命令?

    linux服务器基础命令?,设备,标准,工作,地址,服务,系统,信息,情况,图片,基础,

    服务器linux命令大全?

    服务器linux命令大全?,标准,工作,设备,系统,服务,信息,时间,命令,服务器,级

    重启linux服务器命令?

    重启linux服务器命令?,标准,设备,工作,命令,网络,系统,提示,主机,服务器,接

    linux命令执行超时?

    linux命令执行超时?,时间,网络,服务,系统,代码,电脑,工具,地址,管理,状态,Lin