使用jNetPcap在服务器上解码HTTPS请求有效负载

时间:2016-02-24 21:42:08

标签: java network-programming pcap packet-sniffers jnetpcap

在讨论问题之前,我想分享一下我的网络结构是什么。我有3台计算机,其中1台充当服务器,其余机器充当客户端。服务器连接到Internet并与其他两台计算机共享。 我一直在尝试使用Jnetpcap库在我的服务器上记录所有HTTPS请求。我已经非常轻松地记录了来自HTTP的所有请求。但是,无法控制HTTPS请求。

我的PacketHandler代码段是:

 PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {

            public void nextPacket(PcapPacket packet, String user) {

                System.out.printf("Received packet at %s caplen=%-4d len=%-4d %s\n",
                        new Date(packet.getCaptureHeader().timestampInMillis()),
                        packet.getCaptureHeader().caplen(), // Length actually captured  
                        packet.getCaptureHeader().wirelen(), // Original length   
                        user // User supplied object  
                );
            }
        };

作为回应,它返回

  

youtube.com.https ...... Blah Blah

但是,我没有返回我愿意捕获的YouTube视频ID。

1 个答案:

答案 0 :(得分:1)

“HTTPS”中的“S”就是问题所在。

HTTP请求和回复是纯文本。 HTTPS是HTTP-over-{SSL,TLS},并且在这些请求和回复中发送的纯文本几乎总是加密的。你必须解密它,这不容易 - Wireshark有代码可以有时做它,如果你提供正确的信息,但是,{{3} }表示,并且看一下解密的Wireshark代码将显示,涉及大量的工作。