jnetpcap用于捕获HTTPS流量

时间:2015-03-05 13:08:25

标签: java packet-sniffers jnetpcap

我是第一次使用jnetpcap开发一个简单的Sniffer系统。我修改了一些代码,我现在可以读取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)数据包?

1 个答案:

答案 0 :(得分:0)

我是这样做的。你至少可以看到Handshake,在它结束之后,但是jnetpcap无法处理数据,所以你只需要Hexdump和它的ASCII。与packet.toString();格式化不太好 所以在你的nextPacket:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "showThisPage:", name: "showPage", object: nil)

func showThisPage(notification: NSNotification) {
    dispatch_async(dispatch_get_main_queue()) {
        self.becomeCurrentPage()
    }
}

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

*出于测试原因,我只是在我的编程中打印出端口。但你可以制作一个if语句并检查端口,如果其中一个是443,你可以完成剩下的工作。