В jnetpcap, как я могу получить информацию DNS-запроса пакета?

Я использую библиотеку jnetpcap для чтения файла PCAP и получения необходимой информации.

Я могу получить данные IP, UDP и HTTP из пакета, но как именно я могу получить данные DNS-запросов?

Мой код выглядит так

public class PcapFile { //extends Activity
private static ArrayList<String>
        ethData = new ArrayList<>(),
        ipData = new ArrayList<>(),
        httpData = new ArrayList<>(),
        udpData = new ArrayList<>();

public static void SetPcapData(String directory){
    final StringBuilder errbuf = new StringBuilder();

    //archivo cargara en memoria el paquete .pcap
    Log.i("Abriendo PCAP desde", directory);
    Pcap pcapfile = Pcap.openOffline(directory, errbuf);

    if (pcapfile == null) {
        Log.e("Error al abrir PCAP", errbuf.toString());
    }

    Ethernet eth = new Ethernet();
    Http http = new Http();
    Ip4 ip = new Ip4();
    Tcp tcp = new Tcp();
    Udp udp = new Udp();

    PcapHeader hdr = new PcapHeader(JMemory.POINTER);
    //PcapPacket packet = new PcapPacket(JMemory.POINTER);
    JBuffer buf = new JBuffer(JMemory.POINTER);
    assert pcapfile != null;
    int id = JRegistry.mapDLTToId(pcapfile.datalink());
    int contIP, contETH, contHTTP, contHTTP_HOST, contHTTP_URL;
    contIP = contETH = contHTTP_HOST = contHTTP_URL = 1;

    while(pcapfile.nextEx(hdr, buf) == Pcap.NEXT_EX_OK){
        PcapPacket packet = new PcapPacket(hdr, buf);
        packet.scan(id);
        String str;

        if(packet.hasHeader(eth)){
            str = eth.toString();
            ethDatan.add(str);
        }

        if(packet.hasHeader(http)){
            str = http.toString();
            httpData.add(str);
        }

        if(packet.hasHeader(ip)){
            str = ip.toString();
            tcpDataDestination.add(str);
            tcpDataSource.add(str);
        }            

        if(packet.hasHeader(udp)) {
            str = udp.toString();
            udpData.add(str);
        }
    }

    pcapfile.close();
}

Я пытался, но я не понимаю структуру DNS-запроса или как организовать HTTP, UDP и IP, чтобы получить информацию, которая мне нужна. Я обнаружил, что DNS-запрос работает в порту 53, это правильно? У jnetpcap нет типа переменной DNS для получения запросов, поэтому мне нужна помощь, я не знаю, если только с IP и UDP можно получить доступ к информации запроса.

В NetworkMiner данные DNS выглядят так

введите описание изображения здесь

0 ответов

Другие вопросы по тегам