解密使用pcap4J HTTPS数据包

问题描述 投票:1回答:1

Java我使用pcap4J捕捉到我的计算机上运行其他应用程序的网络流量。我使用的是做到这一点的代码如下:

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应用然而能够解密流量就好了,没有任何特殊配置或服务器的私有密钥。提琴手可以显示被交换的JSON结构,我很感兴趣,我如何做同样的事情在Java代码,以便与捕获JSON对象工作? (这个问题是关于解密的一部分,而不是事后分析)

java ssl https fiddler pcap4j
1个回答
1
投票

正如在这个问题提意见:

根据定义,你不能解密任何TLS流量(让包括HTTPS),如果你不控制任何一方或能够有任何一方给你协商的主密钥和客户端随机使用。只是想解密任何随机TLS交通将是不可能的。 Fiddler通过被其他两台计算机之间直接发送一个人在这方面的中间人,而不是通过解密流量做的。虽然Fiddler不需要特殊配置的客户端需要一个特殊的配置,即它需要信任使用Fiddler动态创建证书的证书颁发机构。

© www.soinside.com 2019 - 2024. All rights reserved.