`
0dragon
  • 浏览: 26448 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

(转)重写common-net-ftp以适应内网Passive模式

阅读更多
转自http://www.diybl.com/course/3_program/java/javajs/20100719/453294.html
小心弹出窗口Ad

需要重写几个地方
i. org.apache.commons.net.SocketClient
/** 用来自定义 Passive 模式的 Host */
protected String _set_passive_host = "127.0.0.1";

    /**
     * Opens a Socket connected to a remote host at the specified port and
     * originating from the current host at a system assigned port.
     * Before returning, {@link #_connectAction_  _connectAction_() }
     * is called to perform connection initialization actions.
     * <p>
     * @param hostname  The name of the remote host.
     * @param port  The port to connect to on the remote host.
     * @exception SocketException If the socket timeout could not be set.
     * @exception IOException If the socket could not be opened.  In most
     *  cases you will only want to catch IOException since SocketException is
     *  derived from it.
     * @exception UnknownHostException If the hostname cannot be resolved.
     */
    public void connect(String hostname, int port)
    throws SocketException, IOException
    {
        // 将连接的hostname赋给_set_passive_host
        _set_passive_host = InetAddress.getByName(hostname).getHostAddress();
        _socket_= _socketFactory_.createSocket();
        _socket_.connect(new InetSocketAddress(hostname, port), connectTimeout);
        
        _connectAction_();
    }


ii. org.apache.commons.net.ftp.FTPClient
    private void __parsePassiveModeReply(String reply)
    throws MalformedServerReplyException
    {
        java.util.regex.Matcher m = __parms_pat.matcher(reply);
        if (!m.find()) {
            throw new MalformedServerReplyException(
                "Could not parse passive host information.\nServer Reply: " + reply);
        }
        reply = m.group();
        String parts[] = m.group().split(",");
        
        //__passiveHost = parts[0] + '.' + parts[1] + '.' + parts[2] + '.' + parts[3];
        // 此处将_set_passive_host赋给__passiveHost
        __passiveHost = _set_passive_host;
        System.out.println(">----------->> Real Host IP is : "+__passiveHost);
        try
        {
            int oct1 = Integer.parseInt(parts[4]);
            int oct2 = Integer.parseInt(parts[5]);
            __passivePort = (oct1 << 8) | oct2;
        }
        catch (NumberFormatException e)
        {
            throw new MalformedServerReplyException(
                "Could not parse passive host information.\nServer Reply: " + reply);
        }

    }
分享到:
评论

相关推荐

    commons-net-3.6.jar

    Apache Commons Net的FTPClient支持被动模式,通过设置passiveMode(),客户端能在服务器指定的端口上建立数据连接,解决此类网络问题。 五、源码解析 深入学习`commons-net-3.6.jar`的源码,可以帮助开发者理解FTP...

    Serv-U-FTP-Server最新版

    - FTP有两种工作模式:主动模式(Port模式)和被动模式(Passive模式)。主动模式下,客户端打开一个随机端口连接到服务器的20号端口,然后服务器反过来连接客户端指定的端口进行数据传输。被动模式则是服务器打开...

    ftp_Solaris ftp passive mode

    2. **配置FTP服务器**:编辑`/etc/ftpd/ftpaccess`配置文件,找到`Passive`选项,将其设置为`yes`以启用被动模式。例如: ``` Passive yes ``` 3. **设置防火墙**:在被动模式下,FTP服务器需要能够打开并监听一...

    主动模式下载ftp文件

    ftp服务器如果是主动模式,下载方法与被动模式有很大差异,本案例提供主动模式下载方案

    Ftp-Sever.rar_ftp_ftp sever_ftp 服务器_ftp-sev_ftp-sever

    5. ** passive模式与active模式**:FTP有两种工作模式,Passive(被动)模式和Active(主动)模式。Passive模式适用于防火墙或NAT环境,服务器会打开一个随机端口等待客户端连接,以避免被防火墙阻断。Active模式则...

    3-服务篇-FTP.pdf

    2. **被动模式(Passive Mode)**:在这种模式下,服务器在某个指定范围内的端口上被动等待客户端的连接。这种方式更加灵活,适用于客户端和服务器都处于防火墙后的场景。客户端向服务器发出PASV命令后,服务器会随机...

    linux-FTP--Order.rar_ftp_ftp linux_linux ftp

    - `passive`模式:在防火墙或NAT环境中启用,以避免端口问题。 - `prompt`:控制是否对每个文件操作提示确认。 - `quote`:直接执行FTP服务器支持的特殊命令。 4. **FTP脚本化**: 可以创建包含一系列FTP命令的...

    ftp服务器FtpServer

    4. **传输模式**:FTP有两种传输模式,主动(Active)和被动(Passive)。主动模式中,客户端打开一个端口向服务器发送数据;被动模式下,服务器打开一个端口等待客户端连接,用于解决防火墙和NAT设备下的连接问题。...

    default-passive-events:使{被动

    default-passive-events 当支持EventListenerOptions时,默认使{passive:true} 50行代码段,默认情况下启用某些事件的()。 基本上,每次您声明新的时,它都会自动设置{Passive:true} 。 安装 yarn add default...

    FTP-RFC959

    FTP协议还定义了一系列的文件结构和传输控制机制,以适应不同类型的文件和数据格式。例如,FTP可以处理行结构、页面结构以及无结构的二进制文件。为了确保数据的正确传输,FTP提供了结构化命令(如STRU),用于指定...

    ftp可登录但是无法下载,上传问题解决

    构建了一个ftp服务器,通过命令ftp可登录,登录后,无法下载,上传,ls也无法执行。 通过 passive 开启和关闭 PASV模式,再ls 也是同样的问题, # 主动模式 $ pftp -v -A -d 211.159.185.xxx Connected to 211...

    VC++ FTP下载程序(FTP客户端)

    (5)Port和Passive 2、WinInet的中FTP的基本操作 (1)头文件 (2)打开连接和关闭 (3)CFtpConnection的操作函数 三、完成进度-----------------------------------------5 1、已完成部分 2、未完成部分 3、还需...

    安装vsftpd搭建ftp服务器

    Passive Mode是FTP协议的一种模式,在这种模式下,FTP服务器会随机分配一个端口号用于数据传输。我们可以在`vsftpd.conf`文件中设置passive mode的端口号范围: ``` pasv_enable=YES pasv_min_port=64000 pasv_max...

    commons-net-3.6.zip

    3. **被动模式与主动模式**:FTP有两种数据传输模式,被动模式(Passive Mode)和主动模式(Active Mode)。在Java中,你可以通过FTPClient的setPassiveMode()或setActiveMode()方法来切换这两种模式。被动模式通常...

    ftp-code.rar_AUKG-238ftp

    3. 切换到被动模式:调用相应的FTP命令如"passive"。 4. 设置工作目录:根据需要上传或下载的文件路径。 5. 上传/下载文件:使用FTP的put或get命令,结合LR的Web_file_upload或Web_file_download函数。 6. 关闭FTP...

    Spring Boot整合FTPClient线程池的实现示例

    private Integer passiveMode = FTP.BINARY_FILE_TYPE; private String encoding="UTF-8"; private int clientTimeout=120000; private int bufferSize; private int transferFileType=FTP.BINARY_FILE_...

    ftp-server-source-code.rar_FTP source_ftp_ftp server source_ftp

    5. **数据传输**:FTP有两种数据传输模式,主动模式(Port)和被动模式(Passive)。在主动模式下,服务器主动连接客户端;被动模式下,客户端连接服务器指定的数据端口。源码中会有处理这两种模式的逻辑。 6. **...

    Laravel开发-ftp 让 Laravel 支持 FTP 操作

    'passive' =&gt; env('FTP_PASSIVE_MODE', true), // 是否启用被动模式 'ssl' =&gt; env('FTP_SSL', false), // 是否使用SSL连接 'timeout' =&gt; env('FTP_TIMEOUT', 30), // 连接超时时间 ], ``` 这些配置项可以从`.env...

    详细的FTP命令文档

    FTP支持两种主要的操作模式:主动模式(Active Mode)和被动模式(Passive Mode)。用户通过客户端软件连接到FTP服务器,可以执行各种文件管理操作。 #### 命令解析 ##### 连接到FTP服务器 - **ftp192.168.8.111**...

    ftp-0.17-54.el6.x86_64的RPM包

    FTP协议本身有两种主要的工作模式:主动模式(Port)和被动模式(Passive)。主动模式中,客户端指定一个端口,服务器会连接到这个端口进行数据传输。而在被动模式中,服务器开启一个随机端口,客户端连接到这个端口...

Global site tag (gtag.js) - Google Analytics