1. 30 May, 2018 1 commit
  2. 15 Jun, 2017 1 commit
    • Petr Špaček's avatar
      Respdiff second generation: reachitecture, support for parallel processing · 527d6f91
      Petr Špaček authored
      The original monolitic Respdif (one f in the name) by Jan Holusa
      was reachitected and split into separate tools which (when chained
      together) do very similar job but much faster and flexibly.
      
      The second generation is conceptually chain of independent tools:
      1. generate queries in wire format
      2. send pre-generated wire format to resolvers and gather answers
      3. analyze answers
      
      This split allows us to repeat steps using the same data as necessary,
      e.g. run analysis with different parameters without re-querying the
      resolvers.
      
      This first version is using filesystem to store queries and answers.
      
      Tool "makedirs.py" reads list of queries in text format <name> <RR type>
      and creates directory structure with subdirectory for each query. File
      "q.dns" in each subdirectory contains query in DNS wire format.
      
      Tool "orchestrator.py" then reads this stored wire format, sends it to
      resolvers and stores answer from each resolver into separate file.
      
      Directory structure for one query is:
      00001/            - subdirectory name == query ID
      00001/q.dns       - query in wire format
      00001/bind.dns    - answer from BIND in wire format
      00001/kresd.dns   -             kresd
      00001/unbound.dns -             Unbound
      
      Resulting files can be analyzed using tool "msgdiff.py".
      The tool refers to one resolver as "target" and to remaining resolvers
      as "others". Msgdiff compares specified fields in the answers and
      compute statistics based on comparion results.
      
      Answers where "others" do not agree with each other are simply counted but
      not processed further. Answers where "others" agree but the "target"
      returned a different answer than all "others" are counted separately
      with higher granularity, producing stats for each field in DNS message
      (rcode, flags, answer section ...).
      
      This very first version lacks proper user interface and values are
      hardcoded into Python scripts, see orchestrator.py.
      527d6f91