【问题标题】:Ftp client cannot transfer file using IPV6Ftp 客户端无法使用 IPV6 传输文件
【发布时间】:2023-04-01 15:20:02
【问题描述】:

我正在编写 java 代码以通过 ftp 发送文件,如下所示。我使用的服务器是本地主机上的 FileZilla Server 软件。

    public static void main(String[] args) {
    try {
        String host = "fe80::21a:a0ff:fe8d:fe63"; //No problem if ipv4
        int port = 1998;
        String username = "joe";
        String password = "123";
        String directory = "D:/ftp_share";
        File fileToTransfer = new File("D:/RND/samplefile.txt");
        String fileName = fileToTransfer.getName();
        FTPClient ftp = new FTPClient();
        ftp.connect(host, port);
        ftp.login(username, password);
        FileInputStream in = new FileInputStream(fileToTransfer);
        if (!(directory == null || "".equals(directory))) {
            ftp.changeWorkingDirectory(directory);
        }
        ftp.setFileType(FTP.BINARY_FILE_TYPE);
        ftp.appendFile(fileName, (InputStream) in);
        System.out.println("File " + fileName + " succesfully sent via ftp to " + host + " at port " + port);

    } catch (SocketException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

问题是我只能通过 IPV4 发送,但不能使用 IPv6。 java例外是

org.apache.commons.net.ftp.FTPConnectionClosedException: FTP response 421 received.  Server closed connection.
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:360)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:474)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:547)
    at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:680)
    at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551)
    at org.apache.commons.net.ftp.FTPClient.appendFile(FTPClient.java:1765)
    at rnd.Main.main(Main.java:44)

文件zilla服务器中的消息是

(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> Connected, sending welcome message...
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> 220-FileZilla Server version 0.9.39 beta
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> 220-written by Tim Kosse (Tim.Kosse@gmx.de)
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> 220 Please visit http://sourceforge.net/projects/filezilla/
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> USER joe
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> 331 Password required for joe
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> PASS ***
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 230 Logged on
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> CWD D:/RND/ftp_share
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 550 CWD failed. "/D:/RND/ftp_share": directory not found.
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> TYPE I
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 200 Type set to I
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> EPRT |1|0.0.0.0|2885|
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 200 Port command successful
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> APPE jawapannya.txt
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 421 Can't create socket

任何 1 都可以帮助如何使用 IPV6 进行发送。

注意:我的本地已经有 IPV6。

【问题讨论】:

  • 你确定它失败是因为 IPv6 而不是550 CWD failed. "/D:/Tecforte/ftp_share": directory not found.
  • 您也可以尝试使用 ftp4j (sauronsoftware.it/projects/ftp4j)——commons-ftpclient 的一个很好的替代品
  • 我曾尝试使用 ftp4j。是的,成功用于 IPV4。谁能给我 IPv6 的样本。我从 filezilla 服务器收到此消息“500 您使用 IPv6 进行连接。PASV 仅适用于 IPv4。您必须改用 EPSV 命令。”

标签: java ipv6 ftp-client ftp-server


【解决方案1】:

那个 EPRT 命令是假的,它请求服务器连接到一个未指定的 IPv4 地址。

使用本地主机地址 ::1 或全局地址可能比链接本地地址更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多