Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于捕获HTTPS流量的jnetpcap_Java_Packet Sniffers_Jnetpcap - Fatal编程技术网

Java 用于捕获HTTPS流量的jnetpcap

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) {

我第一次使用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());
        }}

    }; 
}
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流量的明文内容,答案是你不能。这就是重点。我知道我看不到纯文本内容(包括标题,对吗?)。不过,我还是想得到加密的内容。