我第一次使用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)数据包?
发布于 2016-02-26 22:43:02
这就是我是如何做到的。你至少可以看到握手,之后就结束了,但是jnetpcap不能处理数据,所以你只需要十六进制转储和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开/关,十六进制开/关)
*出于测试的原因,我只是在程序的后期打印出端口。但是您可以编写一个if语句并检查端口,如果其中一个端口是443,则可以执行其余的操作。
https://stackoverflow.com/questions/28878601
复制相似问题