2015-06-10 7 views
0

Я создаю FTP-сервер. Согласно спецификациям FTP они добавили новую команду под названием LPRT.Как получить IPv6 из команды LPRT ftp

Его формат LPRT 6,16,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,2,193,160

сейчас Я могу получить FTP-порт из него, используя логику ниже. Но мне нужен адрес 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 из этой строки.

ответ

1

LPRT и LPSV считаются устаревшими, см. https://www.iana.org/assignments/ftp-commands-extensions/ftp-commands-extensions.txt. Для использования IPv6 используйте EPSV и EPRT, которые указаны в 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 
+0

Да, вы правы, но наша реализация говорит, что если EPRT терпит неудачу, то используйте LPRT, поэтому мы должны использовать его –

+0

Я проверил эту ссылку, но к сожалению, я не нашел, как они представляют IPv6 в формате –

+0

@ShowStopper: Я думаю, что это совершенно ясно, но см. пример в редактируемом вопросе. –

0

Я создал программу, которая делает этот экстракционный

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}

OutPut = {0000: 0000: 0000: 0000: 0300: 0000: 0000: 0000}

Смежные вопросы