我是第一次使用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)数据包?
答案 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,你可以完成剩下的工作。