dpa(1)

πŸ“¦
version 1.9.2 Β· 3 versions
, in alpine 3.22, alpine 3.23, alpine 3.24, arch rolling, debian trixie, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, opensuse-leap 16.0, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– dpa(1) β€” the DNS Packet Analyzer, bestie edition πŸ’–

okay so real talk: this is the dpa manual page from the General Commands Manual section (section 1, aka "commands you just type"), and she is everything. dpa stands for DNS Packet Analyzer β€” she reads your ip trace files and pulls apart every DNS packet in them like it's gossip. ✨


πŸ¦‹ NAME πŸ¦‹

dpa β€” DNS Packet Analyzer. Analyze DNS packets in ip trace files πŸ’…


🌸 SYNOPSIS 🌸

dpa [ OPTION ] TRACEFILE

✨ DESCRIPTION ✨

So dpa is used to analyze dns packets in trace files. No cap, that's literally her whole job. 🫢

She's got 3 main options, and the girlies need to know them:

  • count
  • filter
  • count uniques (i.e. count all different occurrences) β€” this one is the "how many distinct vibes" option, iykyk 🌈

πŸ‘‘ OPTIONS πŸ‘‘

  • -c expressionlist β€” Count occurrences of matching expressions. It's giving tally marks but make it DNS. πŸ”₯
  • -f expression β€” Filter: only process packets that match the expression. Everything else? Not invited to the party. πŸ™ˆ
  • -h β€” Show usage.
  • -p β€” Show the total number of correct DNS packets, and percentage of -u and -c values (of the total of matching on the -f filter. if no filter is given, percentages are on all correct dns packets). So yes, this one is percentage o'clock ⭐
  • -of file β€” Write all packets that match the -f flag to file, as pcap data. πŸ’Ύ
  • -ofh file β€” Write all packets that match the -f flag to file, in hexadecimal format, readable by drill. Fancy hex dump energy ✨
  • -s β€” Show possible match names.
  • -s matchname β€” show possible match operators and values for name.
  • -sf β€” Only evaluate packets (in representation format) that match the -f filter. If no -f was given, evaluate all correct dns packets.
  • -u matchnamelist β€” Count every occurrence of every value of the matchname (for instance, count all packetsizes, see EXAMPLES in ldns-dpa(1)). 🧚
  • -ua β€” For every matchname in -u, show the average value of all matches. Behaviour for match types that do not have an integer value is undefined. 🚨 (yeah bestie, undefined means undefined, don't come for me)
  • -uac β€” For every matchname in -u, show the average number of times this value was encountered.
  • -um number β€” Only show the results from -u for values that occurred more than number times. Gatekeeping the little guys πŸ’…
  • -v level β€” Set verbosity to level (1-5, 5 being the highest). Mostly used for debugging. Turn it up to 5 for the full unhinged experience πŸ”Š
  • -notip file β€” Write packets that were not recognized as IP packets to file (as pcap data).
  • -baddns file β€” Write dns packets that were too mangled to parse to file (as pcap data). 😭 the poor things
  • -version β€” Show version and exit. Bye bestie πŸ‘‹

🌈 LIST AND MATCHES 🌈

A <matchnamelist> is a comma separated list of match names (use -s to see possible match names). A <expressionlist> is a comma separated list of expressions. Comma separated, comma separated, say it with me β€” commas are the glue of this whole operation. πŸ“

An expression has the following form:

<expr>: (<expr>)
        <expr> | <expr>
        <expr> & <expr>
        <match>
<match>:        <matchname> <operator> <value>
<operator>:      =    equal to <value>      !=   not equal to <value>
     >    greater than <value>      <    lesser than <value>
     >=   greater than or equal to <value>      <=   lesser than or equal to <value>      ~=   contains <value>

See the -s option for possible matchnames, operators and values. 🌸


πŸŽ€ EXAMPLES πŸŽ€

Like, the actual receipts. Copy these exactly, bestie, I'm not kidding:

ldns-dpa -u packetsize -p test.tr

Count all different packetsizes in test.tr and show the percentages. πŸ“Š

ldns-dpa -f "edns=1&qr=0" -of edns.tr test.tr

Filter out all edns enable queries in test.tr and put them in edns.tr. 🫢

ldns-dpa -f edns=1 -c tc=1 -u rcode test.tr

For all edns packets, count the number of truncated packets and all their rcodes in test.tr.

ldns-dpa -c tc=1,qr=0,qr=1,opcode=QUERY test.tr

For all packets, count the number of truncated packets, the number of packets with qr=0, the number of packets with qr=1 and the number of queries in test.tr.

ldns-dpa -u packetsize -ua test.tr

Show all packet sizes and the average packet size per packet. Math class but make it iconic ✨

ldns-dpa -u srcaddress -uac test.tr

Show all packet source addresses and the average number of packets sent from this address.

sudo tcpdump -i eth0 -s 0 -U -w - port 53 | ldns-dpa -f qr=0 -sf

Print all query packets seen on the specified interface. Main character pipeline energy πŸ”₯


πŸ’œ AUTHOR πŸ’œ

Written by Jelte Jansen for NLnetLabs. We stan. πŸ‘‘


πŸ› REPORTING BUGS πŸ›

Report bugs to <dns-team@nlnetlabs.nl>. Tell them everything, they can handle it πŸ’–


Copyright (C) 2005 NLnet Labs. This is free software. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. So like, she's free, but she's also not your mom. 🚨


and that's the whole page bestie β€” dpa(1), dated 1 Nov 2005, part of the dpa(1) family, and now you know her fr fr πŸ’…βœ¨πŸ¦‹