起因:ftp协议八几年定的,那会还没有nat转换,ftp协议中pasv命令会把ip地址和端口返回给客户端,这些返回值是在网络包的数据部分,那么网络层的nat转换自然是不去转的了,除非防火墙带应用层包过滤功能,好像叫Alg吧,不然这个转换功能只能自己做.
举个例子:
ftp server对外IP: 192.168.56.34
[size=medium]一个机构的网络把这个ip转成内部地址:172.16.56.34 ,供内部使用.
内部客户发起ftp连接到172.16.56.34,没有问题连接成功.
发起pasv命令,这回服务器返回的是192.168.56.34而不是172.16.56.34,原因上面讲了.
客户收到后,解析,然后进行数据连接,很明显连不通.路由不到.
解决办法:
1. 防火墙使用应用层包过滤,可以解决.
2. 改客户端程序.
ftp客户端的用的是apache的common-net包,
FtpClient extends Ftp extends SocketClient
connect方法在SocketClient中,在SocketClient中加个变量_set_passive_host,把connect连接时的ip在connect方法里赋给_set_passive_host
然后还有一个方法就是解析pasv的返回值,方法在FtpClient中,名字我忘了.
里面解析完的ip是存放到_passive_host中,那么在这个方法里把_passive_host的值等于_set_passive_host就好了.
基于上面的改动,我们调用的程序不用做任何修改就可以适应这种网络环境了.
小结:基础知识要扎实呀,不然没得玩.呵
[/size]
分享到:
相关推荐
ftp upfile FTPClient java
赠送jar包:common-image-3.1.1.jar; 赠送原API文档:common-image-3.1.1-javadoc.jar; 赠送源代码:common-image-3.1.1-sources.jar; 赠送Maven依赖信息文件:common-image-3.1.1.pom; 包含翻译后的API文档:...
本教程将深入讲解如何利用Apache Commons Net库的3.3版本在Android应用中实现FTP功能。 首先,Apache Commons Net是一个Java库,提供了一系列用于网络通信的类和实用工具,包括FTP客户端组件。在Android项目中,...
使用commons-net-1.4.1.jar,FTPClient连接成功了,但是ftpClient.listFiles(path).length=0 ...不要增加类,也不要修改任何代码。 不要犹豫了,干掉commons-net-1.4.1.jar包,用这个替换吧,世界从此安静了。。。
赠送jar包:common-io-3.1.1.jar; 赠送原API文档:common-io-3.1.1-javadoc.jar; 赠送源代码:common-io-3.1.1-sources.jar; 赠送Maven依赖信息文件:common-io-3.1.1.pom; 包含翻译后的API文档:common-io-...
在Java编程领域,Apache Commons是开发人员常用的工具库之一,提供了许多实用的组件来简化...它们是任何Java项目中处理输入输出和网络通信的重要组成部分,尤其在处理FTP文件传输时,能显著提高代码的可读性和效率。
Telnet协议在commons-net中也有很好的实现,包括TelnetClient类,用于建立和管理Telnet会话。开发者可以通过它与远程服务器进行交互,执行命令或获取服务器输出。 4. **NNTP支持** 新闻组协议NNTP(Network News ...
赠送jar包:proto-google-common-protos-1.17.0.jar; 赠送原API文档:proto-google-common-protos-1.17.0-javadoc.jar; 赠送源代码:proto-google-common-protos-1.17.0-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:flink-table-common-1.12.7.jar; 赠送原API文档:flink-table-common-1.12.7-javadoc.jar; 赠送源代码:flink-table-common-1.12.7-sources.jar; 赠送Maven依赖信息文件:flink-table-common-1.12.7....
在本文中,我们将深入探讨如何使用Apache Commons Net库中的FTP客户端类来实现FTP文件传输操作。首先,我们需要理解FTP的基本概念。 FTP是一种应用层协议,用于在互联网上进行文件传输。它允许用户从远程服务器上传...
主要用于实现ftp文件传输,网上没有很清晰的资料,故而我把自己的资料与ftpclient挂钩,希望让你尽快实现自己的项目
赠送jar包:springfox-swagger-common-3.0.0.jar; 赠送原API文档:springfox-swagger-common-3.0.0-javadoc.jar; 赠送源代码:springfox-swagger-common-3.0.0-sources.jar; 赠送Maven依赖信息文件:springfox-...
这个"最全的common-FileUpload.jar包"包含了处理HTTP请求中的多部分数据,特别是文件上传的功能。它使得开发者能够方便地从Web表单中接收并处理文件。 Apache Commons FileUpload是Apache软件基金会的一个开源项目...
在Java开发中,`common`系列的jar包是由Apache软件基金会的Apache Commons项目提供的,旨在为开发者提供一些通用的功能库。这些库包含了处理输入/输出(I/O)、文件上传(FileUpload)等常见任务的工具类和接口。...
hadoop-common-2.2.0-bin-32.rarhadoop-common-2.2.0-bin-32.rarhadoop-common-2.2.0-bin-32.rarhadoop-common-2.2.0-bin-32.rarhadoop-common-2.2.0-bin-32.rarhadoop-common-2.2.0-bin-32.rarhadoop-common-2.2.0-...
Hadoop是大数据处理领域中的一个核心框架,由Apache软件基金会维护。它主要设计用于分布式存储和计算,使得大规模数据处理变得更加高效和便捷。Hadoop 2.7.3是Hadoop的一个版本,其中包含了`hadoop-common-2.7.3-bin...
赠送jar包:weixin-java-common-3.5.0.jar; 赠送原API文档:weixin-java-common-3.5.0-javadoc.jar; 赠送源代码:weixin-java-common-3.5.0-sources.jar; 赠送Maven依赖信息文件:weixin-java-common-3.5.0.pom;...
hadoop-common-2.7.2.jar
赠送jar包:activiti-common-rest-5.21.0.jar; 赠送原API文档:activiti-common-rest-5.21.0-javadoc.jar; 赠送源代码:activiti-common-rest-5.21.0-sources.jar; 赠送Maven依赖信息文件:activiti-common-rest-...
赠送jar包:wildfly-common-1.5.2.Final.jar; 赠送原API文档:wildfly-common-1.5.2.Final-javadoc.jar; 赠送源代码:wildfly-common-1.5.2.Final-sources.jar; 赠送Maven依赖信息文件:wildfly-common-1.5.2....