如何从 LPRT ftp 命令获取 IPv6

How to get IPv6 from LPRT ftp command

我正在创建一个 FTP 服务器。根据 FTP 规范,他们添加了名为 LPRT 的新命令。

它的格式是LPRT 6,16,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,2,193,160

现在我可以使用逻辑从中获取 FTP 端口 below.But 我还需要此字符串中的 IPV6 地址。

public static void main(String[] args) {
    StringTokenizer st = new StringTokenizer(
            "6,16,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,2,193,160");

      final String portStr = st.nextToken(); 
      final int lastDelimIdx =portStr.lastIndexOf(',', portStr.lastIndexOf(',') - 1);
      final StringTokenizer portst = new StringTokenizer(portStr.substring(lastDelimIdx + 1, portStr.length()), ",");
      final int p1 = Integer.parseInt(portst.nextToken());
      final int p2 = Integer.parseInt(portst.nextToken());
      final int dataPort = (p1 << 8) | p2;
      System.out.println(dataPort);
}

谁能帮我从这个字符串中找到 IPv6 地址。

LPRT 和 LPSV 被认为已过时,请参阅 https://www.iana.org/assignments/ftp-commands-extensions/ftp-commands-extensions.txt. To use IPv6 use EPSV and EPRT which are specified in RFC2428

如果您仍然需要知道如何处理 LPRT,请查看已过时的 RFC1639。例如:

LPRT 6,16,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,2,193,160

表示主机长度参数后面的16个数字是地址的字节,然后是端口地址长度后跟2个字节,即

[0000:0000:0000:0000:0300:0000:0000:0000]:49568

我创建了一个执行此提取的程序

    public static String longToIP(long[] ip) {
    String ipString = "";

    int flag = 0;
    for (long crtLong : ip) {

        if (flag == 2) {
            ipString = ipString + ":";
            flag = 0;
        }
        String s = Long.toHexString(crtLong & 0xFFFFFFFFL);
        if (s.length() == 1) {
            s = "0" + s;
        }
        ipString = ipString + "" + s;
        flag++;

    }
    return ipString;

}

输入 = { 0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0 }

输出 = {0000:0000:0000:0000:0300:0000:0000:0000}