0

我第一次使用 jnetpcap 开发一个简单的嗅探器系统。我修改了一些代码,目前可以读取 HTTP 流量(端口 80)并打印其字段。

private void packetHandler(){
    jpacketHandler = new PcapPacketHandler<String>() {   
    Http httpheader = new Http();

    public void nextPacket(PcapPacket packet, String user) {  
        if(packet.hasHeader(httpheader)){
            System.out.println(httpheader.toString());
            if(httpheader.hasPayload()){
               System.out.println("HTTP payload: (string length is "
                     +new String(httpheader.getPayload()).length()+")");
               System.out.println(new String(httpheader.getPayload()));
               System.out.println("HTTP truncated? "
                     +httpheader.isPayloadTruncated());
            }
            //System.out.println(packet.toString());
        }}

    }; 
}

然后我遍历它。如何使用 jnetpcap 处理 HTTPS(端口 443)数据包?

4

1 回答 1

0

这是我的做法。你至少可以看到握手,之后就结束了,但是 jnetpcap 不能处理数据,所以你只有 Hexdump 和那个 ASCII。它的格式不像 packet.toString() 那样好;) 所以在你的 nextPacket 中:

    if (packet.hasHeader(tcp)) {  
      * tcpst = "Dport: "+tcp.destination()+"; Sport: "+tcp.source();
      int payloadstart = tcp.getOffset() + tcp.size();
      JBuffer buffer = new JBuffer(64 * 1024);
      buffer.peer(packet, payloadstart, packet.size() - payloadstart);
      payload = buffer.toHexdump(packet.size(), false, true, true);
    }

payloadstart 是 tcp 标头的开头 + tcp 标头的大小。
buffer.peer 复制字节(从数据包开始,字节数)。
有效载荷是一个字符串。toHexdump(多少字节,地址开/关,ASCII开/关,HEX开/关)

*出于测试原因,我只是在我的 prog 后期打印端口。但是你可以做一个 if 语句并检查端口,如果其中一个是 443,你可以做剩下的。

于 2016-02-26T14:43:02.240 回答