Java 用于捕获HTTPS流量的jnetpcap
我第一次使用jnetpcap开发了一个简单的嗅探系统。我修改了一些代码,目前可以读取HTTP流量(端口80)并打印其字段Java 用于捕获HTTPS流量的jnetpcap,java,packet-sniffers,jnetpcap,Java,Packet Sniffers,Jnetpcap,我第一次使用jnetpcap开发了一个简单的嗅探系统。我修改了一些代码,目前可以读取HTTP流量(端口80)并打印其字段 private void packetHandler(){ jpacketHandler = new PcapPacketHandler<String>() { Http httpheader = new Http(); public void nextPacket(PcapPacket packet, String user) {
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());
}}
};
}
private void packetHandler(){
jpacketHandler=新的PcapPacketHandler(){
Http httpheader=新Http();
public void nextPacket(PcapPacket数据包,字符串用户){
if(packet.hashheader(httpheader)){
System.out.println(httpheader.toString());
if(httpheader.hasPayload()){
System.out.println(“HTTP有效负载:(字符串长度为”
+新字符串(httpheader.getPayload()).length()+”);
System.out.println(新字符串(httpheader.getPayload());
System.out.println(“HTTP被截断了?”
+httpheader.isPayloadTruncated());
}
//System.out.println(packet.toString());
}}
};
}
然后我循环了一遍。如何使用jnetpcap处理HTTPS(端口443)数据包?以下是我的操作方法。您至少可以看到握手,握手结束后,jnetpcap无法处理数据,因此您只需要Hexdump和ASCII。它的格式不像packet.toString();)那样好 因此,在您的下一个数据包中:
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流量的明文内容,答案是你不能。这就是重点。我知道我看不到纯文本内容(包括标题,对吗?)。不过,我还是想得到加密的内容。