2013-07-28 5 views
1

Я использую простую программу из учебника jpcap. Я хочу прослушать порт 4444 для проверки моего другого клиент-серверного приложения. И у меня проблема: метод TCPPacket.getTCPData() возвращает массив byte [] с пределом в 30 элементов. Я знаю, что пакеты содержат более 30 байтов полезных данных, исключая байты заголовков TCP.Получить полные данные TCP-пакета с помощью jpcap

Как я могу получить более 30 байт данных пакета?

Я проверил, метод tcpPacket.getPayloadDataLength() возвращает более 500, а TCPPacket.getTCPData() возвращает массив из 30 байтов ... Почему только 30?

Код здесь

public class Test { 
    public static void main(String[] args) { 
     try { 
      Test test = new Test(PacketCapture.lookupDevices()[5].trim().split("\\s")[0]); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public Test(String device) throws Exception { 
     // Initialize jpcap 
     PacketCapture pcap = new PacketCapture(); 
     System.out.println("Using device '" + device + "'"); 
     pcap.open(device, true); 
     pcap.setFilter("port 4444", true); 
     pcap.addPacketListener(new PacketHandler()); 

     System.out.println("Capturing packets..."); 
     pcap.capture(-1); // -1 is infinite capturing 
    } 
} 


class PacketHandler implements PacketListener { 
    BufferedOutputStream stream; 

    public PacketHandler() throws IOException { 
     Path path = Paths.get("out.txt"); 
     stream = new BufferedOutputStream(
       Files.newOutputStream(path, StandardOpenOption.CREATE, StandardOpenOption.APPEND)); 
    } 

    public void packetArrived(Packet packet) { 
     try { 
      // only handle TCP packets 

      if(packet instanceof TCPPacket) { 
       TCPPacket tcpPacket = (TCPPacket)packet; 
       byte[] data; 
       data = tcpPacket.getTCPData(); 
       stream.write(data); 
       stream.write("\r\n----------\r\n".getBytes()); 
       stream.flush(); 
      } 
     } catch(Exception e) { 
      e.printStackTrace(System.out); 
     } 
    } 
} 

ответ

5

Вместо pcap.open(device, true);, попробуйте pcap.open(device, 65535, true, 1000); Длина снимка по умолчанию для jpcap составляет 96 байт, а это означает, что вы получите только первые 96 байт пакета, если вы просто открыть с pcap.open(device, true);

+0

o-la-la, это помогает! Спасибо! :) – Dumas45

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

  • Нет связанных вопросов^_^