Search in sources :

Example 1 with DnsPacket

use of net.ripe.hadoop.pcap.packet.DnsPacket in project hadoop-pcap by RIPE-NCC.

the class DnsPcapReader method processPacketPayload.

@Override
protected void processPacketPayload(Packet packet, byte[] payload) {
    String protocol = (String) packet.get(Packet.PROTOCOL);
    if (!PcapReader.PROTOCOL_UDP.equals(protocol) && !PcapReader.PROTOCOL_TCP.equals(protocol))
        return;
    DnsPacket dnsPacket = (DnsPacket) packet;
    if (DNS_PORT == (Integer) packet.get(Packet.SRC_PORT) || DNS_PORT == (Integer) packet.get(Packet.DST_PORT)) {
        if (PROTOCOL_TCP.equals(protocol) && // TODO Support DNS responses with multiple messages (as used for XFRs)
        payload.length > 2)
            // First two bytes denote the size of the DNS message, ignore them
            payload = Arrays.copyOfRange(payload, 2, payload.length);
        try {
            Message msg = new Message(payload);
            Header header = msg.getHeader();
            dnsPacket.put(DnsPacket.QUERYID, header.getID());
            dnsPacket.put(DnsPacket.FLAGS, header.printFlags());
            dnsPacket.put(DnsPacket.QR, header.getFlag(Flags.QR));
            dnsPacket.put(DnsPacket.OPCODE, Opcode.string(header.getOpcode()));
            dnsPacket.put(DnsPacket.RCODE, Rcode.string(header.getRcode()));
            dnsPacket.put(DnsPacket.QUESTION, convertRecordToString(msg.getQuestion()));
            dnsPacket.put(DnsPacket.QNAME, convertRecordOwnerToString(msg.getQuestion()));
            dnsPacket.put(DnsPacket.QTYPE, convertRecordTypeToInt(msg.getQuestion()));
            dnsPacket.put(DnsPacket.ANSWER, convertRecordsToStrings(msg.getSectionArray(Section.ANSWER)));
            dnsPacket.put(DnsPacket.AUTHORITY, convertRecordsToStrings(msg.getSectionArray(Section.AUTHORITY)));
            dnsPacket.put(DnsPacket.ADDITIONAL, convertRecordsToStrings(msg.getSectionArray(Section.ADDITIONAL)));
        } catch (Exception e) {
        // If we cannot decode a DNS packet we ignore it
        }
    }
}
Also used : Message(org.xbill.DNS.Message) Header(org.xbill.DNS.Header) DnsPacket(net.ripe.hadoop.pcap.packet.DnsPacket) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)1 DnsPacket (net.ripe.hadoop.pcap.packet.DnsPacket)1 Header (org.xbill.DNS.Header)1 Message (org.xbill.DNS.Message)1