首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pcap4J解密HTTPS数据包

用pcap4J解密HTTPS数据包
EN

Stack Overflow用户
提问于 2018-08-16 19:55:42
回答 1查看 896关注 0票数 1

Java中,我使用pcap4J捕获在我的计算机上运行的另一个应用程序的网络流量。我使用的代码如下:

代码语言:javascript
复制
import org.pcap4j.core.*;
import org.pcap4j.packet.Packet;
import org.pcap4j.util.NifSelector;

import java.io.IOException;

import static org.pcap4j.core.BpfProgram.BpfCompileMode.OPTIMIZE;
import static org.pcap4j.core.PcapNetworkInterface.PromiscuousMode.PROMISCUOUS;

public class Pcap4jLoop
{
    public static void main(String[] arguments) throws Exception
    {
        PcapNetworkInterface networkDevice = getNetworkDevice();

        try (PcapHandle handle = networkDevice.openLive(65536, PROMISCUOUS, 50))
        {
            String serverIP = "..."; // Filter for packets with just one server
            String bpfExpression = "dst host " + serverIP + " || src host " + serverIP;
            handle.setFilter(bpfExpression, OPTIMIZE);

            PacketListener listener = packet -> printPacket(packet, handle);

            handle.loop(Integer.MAX_VALUE, listener);

            //noinspection InfiniteLoopStatement,StatementWithEmptyBody
            while (true)
            {

            }
        }
    }

    private static PcapNetworkInterface getNetworkDevice() throws IOException
    {
        NifSelector nifSelector = new NifSelector();
        PcapNetworkInterface nif = nifSelector.selectNetworkInterface();
        if (nif == null)
        {
            System.exit(1);
        }
        return nif;
    }

    private static void printPacket(Packet packet, PcapHandle pcapHandle)
    {
        StringBuilder sb = new StringBuilder();
        sb.append("A packet captured at ")
                .append(pcapHandle.getTimestampPrecision())
                .append(":");
        System.out.println(sb);
        System.out.println(packet);
    }
}

不幸的是,流量是加密的,因此无法进行分析。但是,另一个名为Fiddler的应用程序能够很好地解密通信量,而不需要服务器的任何特殊配置或私钥。Fiddler可以显示我感兴趣的正在交换的JSON结构。如何在Java代码中执行相同的操作以处理捕获的JSON对象?(这个问题是关于解密部分,而不是后面的解析)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-11 15:51:55

正如对这一问题的评论:

根据定义,如果您不能控制任何一方或能够让任何一方给您协商的主密钥和客户端随机使用,您就不能解密任何TLS通信量(因此包括HTTPS)。仅仅试图解密任意的TLS流量是不可能的。Fiddler之所以做到这一点,是因为它是一个中间人,而不是通过解密其他两台计算机之间直接发送的通信量来实现的。虽然Fiddler不需要特殊配置,但客户端需要特殊配置,即它需要信任Fiddler用于动态创建证书的证书颁发机构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51884434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档