diff --git a/changelog.txt b/changelog.txt
index be83b2f7..0f62c9ad 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,5 +1,8 @@
jc changelog
+20200326 v1.9.3
+- Add axfr support for dig command parser
+
20200312 v1.9.2
- Updated arp parser to fix OSX detection for some edge cases
diff --git a/jc/cli.py b/jc/cli.py
index 75573519..769fd913 100644
--- a/jc/cli.py
+++ b/jc/cli.py
@@ -13,7 +13,7 @@ import jc.utils
class info():
- version = '1.9.2'
+ version = '1.9.3'
description = 'jc cli output JSON conversion tool'
author = 'Kelly Brazil'
author_email = 'kellyjonbrazil@gmail.com'
diff --git a/jc/parsers/dig.py b/jc/parsers/dig.py
index 6966942d..b0b39871 100644
--- a/jc/parsers/dig.py
+++ b/jc/parsers/dig.py
@@ -324,7 +324,7 @@ import jc.utils
class info():
- version = '1.0'
+ version = '1.1'
description = 'dig command parser'
author = 'Kelly Brazil'
author_email = 'kellyjonbrazil@gmail.com'
@@ -402,6 +402,14 @@ def process(proc_data):
except (ValueError):
entry[key] = None
+ if 'axfr' in entry:
+ for ax in entry['axfr']:
+ try:
+ ttl_int = int(ax['ttl'])
+ ax['ttl'] = ttl_int
+ except (ValueError):
+ ax['ttl'] = None
+
if 'answer' in entry:
for ans in entry['answer']:
try:
@@ -507,6 +515,24 @@ def parse_answer(answer):
'ttl': answer_ttl,
'data': answer_data}
+def parse_axfr(axfr):
+ #; <<>> DiG 9.11.14-3-Debian <<>> @81.4.108.41 axfr zonetransfer.me +nocookie
+ #; (1 server found)
+ #;; global options: +cmd
+ #zonetransfer.me. 7200 IN A 5.196.105.14
+ axfr = axfr.split(maxsplit=4)
+ axfr_name = axfr[0]
+ axfr_ttl = axfr[1]
+ axfr_class = axfr[2]
+ axfr_type = axfr[3]
+ axfr_data = axfr[4]
+
+ return {'name': axfr_name,
+ 'ttl': axfr_ttl,
+ 'class': axfr_class,
+ 'type': axfr_type,
+ 'data': axfr_data}
+
def parse(data, raw=False, quiet=False):
"""
@@ -534,23 +560,38 @@ def parse(data, raw=False, quiet=False):
question = False
authority = False
answer = False
+ axfr = False
output_entry = {}
for line in cleandata:
- if line.find(';; ->>HEADER<<-') == 0:
+ if line.startswith('; <<>> ') and line.lower().find(' axfr ') != -1:
+ question = False
+ authority = False
+ answer = False
+ axfr = True
+ axfr_list = []
+ continue
+
+ if line.find(';') == -1 and axfr:
+ axfr_list.append(parse_axfr(line))
+ output_entry.update({'axfr': axfr_list})
+ continue
+
+ if line.startswith(';; ->>HEADER<<-'):
output_entry = {}
output_entry.update(parse_header(line))
continue
- if line.find(';; flags:') == 0:
+ if line.startswith(';; flags:'):
output_entry.update(parse_flags_line(line))
continue
- if line.find(';; QUESTION SECTION:') == 0:
+ if line.startswith(';; QUESTION SECTION:'):
question = True
authority = False
answer = False
+ axfr = False
continue
if question:
@@ -558,12 +599,14 @@ def parse(data, raw=False, quiet=False):
question = False
authority = False
answer = False
+ axfr = False
continue
- if line.find(';; AUTHORITY SECTION:') == 0:
+ if line.startswith(';; AUTHORITY SECTION:'):
question = False
authority = True
answer = False
+ axfr = False
authority_list = []
continue
@@ -572,10 +615,11 @@ def parse(data, raw=False, quiet=False):
output_entry.update({'authority': authority_list})
continue
- if line.find(';; ANSWER SECTION:') == 0:
+ if line.startswith(';; ANSWER SECTION:'):
question = False
authority = False
answer = True
+ axfr = False
answer_list = []
continue
@@ -586,24 +630,29 @@ def parse(data, raw=False, quiet=False):
# footer consists of 4 lines
# footer line 1
- if line.find(';; Query time:') == 0:
+ if line.startswith(';; Query time:'):
output_entry.update({'query_time': line.split(':')[1].lstrip()})
continue
# footer line 2
- if line.find(';; SERVER:') == 0:
+ if line.startswith(';; SERVER:'):
output_entry.update({'server': line.split(':')[1].lstrip()})
continue
# footer line 3
- if line.find(';; WHEN:') == 0:
+ if line.startswith(';; WHEN:'):
output_entry.update({'when': line.split(':', maxsplit=1)[1].lstrip()})
continue
# footer line 4 (last line)
- if line.find(';; MSG SIZE rcvd:') == 0:
+ if line.startswith(';; MSG SIZE rcvd:'):
output_entry.update({'rcvd': line.split(':')[1].lstrip()})
+ if output_entry:
+ raw_output.append(output_entry)
+ elif line.startswith(';; XFR size:'):
+ output_entry.update({'size': line.split(':')[1].lstrip()})
+
if output_entry:
raw_output.append(output_entry)
diff --git a/setup.py b/setup.py
index 405b5dea..f2d1eccb 100755
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ with open('README.md', 'r') as f:
setuptools.setup(
name='jc',
- version='1.9.2',
+ version='1.9.3',
author='Kelly Brazil',
author_email='kellyjonbrazil@gmail.com',
description='This tool serializes the output of popular command line tools and filetypes to structured JSON output.',
diff --git a/tests/fixtures/centos-7.7/dig-axfr.json b/tests/fixtures/centos-7.7/dig-axfr.json
new file mode 100644
index 00000000..b5e2c669
--- /dev/null
+++ b/tests/fixtures/centos-7.7/dig-axfr.json
@@ -0,0 +1 @@
+[{"axfr": [{"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "SOA", "data": "nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600"}, {"name": "zonetransfer.me.", "ttl": 300, "class": "IN", "type": "HINFO", "data": "\"Casio fx-700G\" \"Windows XP\""}, {"name": "zonetransfer.me.", "ttl": 301, "class": "IN", "type": "TXT", "data": "\"google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA\""}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "0 ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "10 ALT1.ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "10 ALT2.ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX2.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX3.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX4.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX5.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "5.196.105.14"}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "NS", "data": "nsztm1.digi.ninja."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "NS", "data": "nsztm2.digi.ninja."}, {"name": "_acme-challenge.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "TXT", "data": "\"6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI\""}, {"name": "_sip._tcp.zonetransfer.me.", "ttl": 14000, "class": "IN", "type": "SRV", "data": "0 0 5060 www.zonetransfer.me."}, {"name": "14.105.196.5.IN-ADDR.ARPA.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "PTR", "data": "www.zonetransfer.me."}, {"name": "asfdbauthdns.zonetransfer.me.", "ttl": 7900, "class": "IN", "type": "AFSDB", "data": "1 asfdbbox.zonetransfer.me."}, {"name": "asfdbbox.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "asfdbvolume.zonetransfer.me.", "ttl": 7800, "class": "IN", "type": "AFSDB", "data": "1 asfdbbox.zonetransfer.me."}, {"name": "canberra-office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "202.14.81.230"}, {"name": "contact.zonetransfer.me.", "ttl": 2592000, "class": "IN", "type": "TXT", "data": "\"Remember to call or email Pippa on +44 123 4567890 or pippa@zonetransfer.me when making DNS changes\""}, {"name": "dc-office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "143.228.181.132"}, {"name": "deadbeef.zonetransfer.me.", "ttl": 7201, "class": "IN", "type": "AAAA", "data": "dead:beaf::"}, {"name": "dr.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "LOC", "data": "53 20 56.558 N 1 38 33.526 W 0.00m 1m 10000m 10m"}, {"name": "DZC.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"AbCdEfG\""}, {"name": "email.zonetransfer.me.", "ttl": 2222, "class": "IN", "type": "NAPTR", "data": "1 1 \"P\" \"E2U+email\" \"\" email.zonetransfer.me.zonetransfer.me."}, {"name": "email.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "74.125.206.26"}, {"name": "Hello.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"Hi to Josh and all his class\""}, {"name": "home.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "Info.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"ZoneTransfer.me service provided by Robin Wood - robin@digi.ninja. See http://digi.ninja/projects/zonetransferme.php for more information.\""}, {"name": "internal.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "NS", "data": "intns1.zonetransfer.me."}, {"name": "internal.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "NS", "data": "intns2.zonetransfer.me."}, {"name": "intns1.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "A", "data": "81.4.108.41"}, {"name": "intns2.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "A", "data": "167.88.42.94"}, {"name": "office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "4.23.39.254"}, {"name": "ipv6actnow.org.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "AAAA", "data": "2001:67c:2e8:11::c100:1332"}, {"name": "owa.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "207.46.197.32"}, {"name": "robinwood.zonetransfer.me.", "ttl": 302, "class": "IN", "type": "TXT", "data": "\"Robin Wood\""}, {"name": "rp.zonetransfer.me.", "ttl": 321, "class": "IN", "type": "RP", "data": "robin.zonetransfer.me. robinwood.zonetransfer.me."}, {"name": "sip.zonetransfer.me.", "ttl": 3333, "class": "IN", "type": "NAPTR", "data": "2 3 \"P\" \"E2U+sip\" \"!^.*$!sip:customer-service@zonetransfer.me!\" ."}, {"name": "sqli.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "TXT", "data": "\"' or 1=1 --\""}, {"name": "staging.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "CNAME", "data": "www.sydneyoperahouse.com."}, {"name": "alltcpportsopen.firewall.test.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "testing.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "CNAME", "data": "www.zonetransfer.me."}, {"name": "vpn.zonetransfer.me.", "ttl": 4000, "class": "IN", "type": "A", "data": "174.36.59.154"}, {"name": "www.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "5.196.105.14"}, {"name": "xss.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "TXT", "data": "\"'>\""}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "SOA", "data": "nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600"}], "query_time": 182, "server": "81.4.108.41#53(81.4.108.41)", "when": "Wed Mar 25 20:01:47 PDT 2020", "size": "50 records (messages 1, bytes 1994)"}]
diff --git a/tests/fixtures/centos-7.7/dig-axfr.out b/tests/fixtures/centos-7.7/dig-axfr.out
new file mode 100644
index 00000000..c004f610
--- /dev/null
+++ b/tests/fixtures/centos-7.7/dig-axfr.out
@@ -0,0 +1,60 @@
+
+; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @81.4.108.41 AXFR zonetransfer.me +nocookie
+; (1 server found)
+;; global options: +cmd
+zonetransfer.me. 7200 IN SOA nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600
+zonetransfer.me. 300 IN HINFO "Casio fx-700G" "Windows XP"
+zonetransfer.me. 301 IN TXT "google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA"
+zonetransfer.me. 7200 IN MX 0 ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 10 ALT1.ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 10 ALT2.ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX2.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX3.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX4.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX5.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN A 5.196.105.14
+zonetransfer.me. 7200 IN NS nsztm1.digi.ninja.
+zonetransfer.me. 7200 IN NS nsztm2.digi.ninja.
+_acme-challenge.zonetransfer.me. 301 IN TXT "6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI"
+_sip._tcp.zonetransfer.me. 14000 IN SRV 0 0 5060 www.zonetransfer.me.
+14.105.196.5.IN-ADDR.ARPA.zonetransfer.me. 7200 IN PTR www.zonetransfer.me.
+asfdbauthdns.zonetransfer.me. 7900 IN AFSDB 1 asfdbbox.zonetransfer.me.
+asfdbbox.zonetransfer.me. 7200 IN A 127.0.0.1
+asfdbvolume.zonetransfer.me. 7800 IN AFSDB 1 asfdbbox.zonetransfer.me.
+canberra-office.zonetransfer.me. 7200 IN A 202.14.81.230
+cmdexec.zonetransfer.me. 300 IN TXT "; ls"
+contact.zonetransfer.me. 2592000 IN TXT "Remember to call or email Pippa on +44 123 4567890 or pippa@zonetransfer.me when making DNS changes"
+dc-office.zonetransfer.me. 7200 IN A 143.228.181.132
+deadbeef.zonetransfer.me. 7201 IN AAAA dead:beaf::
+dr.zonetransfer.me. 300 IN LOC 53 20 56.558 N 1 38 33.526 W 0.00m 1m 10000m 10m
+DZC.zonetransfer.me. 7200 IN TXT "AbCdEfG"
+email.zonetransfer.me. 2222 IN NAPTR 1 1 "P" "E2U+email" "" email.zonetransfer.me.zonetransfer.me.
+email.zonetransfer.me. 7200 IN A 74.125.206.26
+Hello.zonetransfer.me. 7200 IN TXT "Hi to Josh and all his class"
+home.zonetransfer.me. 7200 IN A 127.0.0.1
+Info.zonetransfer.me. 7200 IN TXT "ZoneTransfer.me service provided by Robin Wood - robin@digi.ninja. See http://digi.ninja/projects/zonetransferme.php for more information."
+internal.zonetransfer.me. 300 IN NS intns1.zonetransfer.me.
+internal.zonetransfer.me. 300 IN NS intns2.zonetransfer.me.
+intns1.zonetransfer.me. 300 IN A 81.4.108.41
+intns2.zonetransfer.me. 300 IN A 167.88.42.94
+office.zonetransfer.me. 7200 IN A 4.23.39.254
+ipv6actnow.org.zonetransfer.me. 7200 IN AAAA 2001:67c:2e8:11::c100:1332
+owa.zonetransfer.me. 7200 IN A 207.46.197.32
+robinwood.zonetransfer.me. 302 IN TXT "Robin Wood"
+rp.zonetransfer.me. 321 IN RP robin.zonetransfer.me. robinwood.zonetransfer.me.
+sip.zonetransfer.me. 3333 IN NAPTR 2 3 "P" "E2U+sip" "!^.*$!sip:customer-service@zonetransfer.me!" .
+sqli.zonetransfer.me. 300 IN TXT "' or 1=1 --"
+sshock.zonetransfer.me. 7200 IN TXT "() { :]}; echo ShellShocked"
+staging.zonetransfer.me. 7200 IN CNAME www.sydneyoperahouse.com.
+alltcpportsopen.firewall.test.zonetransfer.me. 301 IN A 127.0.0.1
+testing.zonetransfer.me. 301 IN CNAME www.zonetransfer.me.
+vpn.zonetransfer.me. 4000 IN A 174.36.59.154
+www.zonetransfer.me. 7200 IN A 5.196.105.14
+xss.zonetransfer.me. 300 IN TXT "'>"
+zonetransfer.me. 7200 IN SOA nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600
+;; Query time: 182 msec
+;; SERVER: 81.4.108.41#53(81.4.108.41)
+;; WHEN: Wed Mar 25 20:01:47 PDT 2020
+;; XFR size: 50 records (messages 1, bytes 1994)
+
+
diff --git a/tests/fixtures/osx-10.14.6/dig-axfr.json b/tests/fixtures/osx-10.14.6/dig-axfr.json
new file mode 100644
index 00000000..b01ba206
--- /dev/null
+++ b/tests/fixtures/osx-10.14.6/dig-axfr.json
@@ -0,0 +1 @@
+[{"axfr": [{"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "SOA", "data": "nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600"}, {"name": "zonetransfer.me.", "ttl": 300, "class": "IN", "type": "HINFO", "data": "\"Casio fx-700G\" \"Windows XP\""}, {"name": "zonetransfer.me.", "ttl": 301, "class": "IN", "type": "TXT", "data": "\"google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA\""}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "0 ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "10 ALT1.ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "10 ALT2.ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX2.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX3.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX4.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX5.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "5.196.105.14"}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "NS", "data": "nsztm1.digi.ninja."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "NS", "data": "nsztm2.digi.ninja."}, {"name": "_acme-challenge.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "TXT", "data": "\"6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI\""}, {"name": "_sip._tcp.zonetransfer.me.", "ttl": 14000, "class": "IN", "type": "SRV", "data": "0 0 5060 www.zonetransfer.me."}, {"name": "14.105.196.5.IN-ADDR.ARPA.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "PTR", "data": "www.zonetransfer.me."}, {"name": "asfdbauthdns.zonetransfer.me.", "ttl": 7900, "class": "IN", "type": "AFSDB", "data": "1 asfdbbox.zonetransfer.me."}, {"name": "asfdbbox.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "asfdbvolume.zonetransfer.me.", "ttl": 7800, "class": "IN", "type": "AFSDB", "data": "1 asfdbbox.zonetransfer.me."}, {"name": "canberra-office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "202.14.81.230"}, {"name": "contact.zonetransfer.me.", "ttl": 2592000, "class": "IN", "type": "TXT", "data": "\"Remember to call or email Pippa on +44 123 4567890 or pippa@zonetransfer.me when making DNS changes\""}, {"name": "dc-office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "143.228.181.132"}, {"name": "deadbeef.zonetransfer.me.", "ttl": 7201, "class": "IN", "type": "AAAA", "data": "dead:beaf::"}, {"name": "dr.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "LOC", "data": "53 20 56.558 N 1 38 33.526 W 0.00m 1m 10000m 10m"}, {"name": "DZC.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"AbCdEfG\""}, {"name": "email.zonetransfer.me.", "ttl": 2222, "class": "IN", "type": "NAPTR", "data": "1 1 \"P\" \"E2U+email\" \"\" email.zonetransfer.me.zonetransfer.me."}, {"name": "email.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "74.125.206.26"}, {"name": "Hello.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"Hi to Josh and all his class\""}, {"name": "home.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "Info.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"ZoneTransfer.me service provided by Robin Wood - robin@digi.ninja. See http://digi.ninja/projects/zonetransferme.php for more information.\""}, {"name": "internal.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "NS", "data": "intns1.zonetransfer.me."}, {"name": "internal.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "NS", "data": "intns2.zonetransfer.me."}, {"name": "intns1.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "A", "data": "81.4.108.41"}, {"name": "intns2.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "A", "data": "167.88.42.94"}, {"name": "office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "4.23.39.254"}, {"name": "ipv6actnow.org.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "AAAA", "data": "2001:67c:2e8:11::c100:1332"}, {"name": "owa.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "207.46.197.32"}, {"name": "robinwood.zonetransfer.me.", "ttl": 302, "class": "IN", "type": "TXT", "data": "\"Robin Wood\""}, {"name": "rp.zonetransfer.me.", "ttl": 321, "class": "IN", "type": "RP", "data": "robin.zonetransfer.me. robinwood.zonetransfer.me."}, {"name": "sip.zonetransfer.me.", "ttl": 3333, "class": "IN", "type": "NAPTR", "data": "2 3 \"P\" \"E2U+sip\" \"!^.*$!sip:customer-service@zonetransfer.me!\" ."}, {"name": "sqli.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "TXT", "data": "\"' or 1=1 --\""}, {"name": "staging.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "CNAME", "data": "www.sydneyoperahouse.com."}, {"name": "alltcpportsopen.firewall.test.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "testing.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "CNAME", "data": "www.zonetransfer.me."}, {"name": "vpn.zonetransfer.me.", "ttl": 4000, "class": "IN", "type": "A", "data": "174.36.59.154"}, {"name": "www.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "5.196.105.14"}, {"name": "xss.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "TXT", "data": "\"'>\""}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "SOA", "data": "nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600"}], "query_time": 170, "server": "81.4.108.41#53(81.4.108.41)", "when": "Thu Mar 26 16:31:06 PDT 2020", "size": "50 records (messages 1, bytes 1994)"}]
diff --git a/tests/fixtures/osx-10.14.6/dig-axfr.out b/tests/fixtures/osx-10.14.6/dig-axfr.out
new file mode 100644
index 00000000..37d725a8
--- /dev/null
+++ b/tests/fixtures/osx-10.14.6/dig-axfr.out
@@ -0,0 +1,59 @@
+
+; <<>> DiG 9.10.6 <<>> @81.4.108.41 AXFR zonetransfer.me
+; (1 server found)
+;; global options: +cmd
+zonetransfer.me. 7200 IN SOA nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600
+zonetransfer.me. 300 IN HINFO "Casio fx-700G" "Windows XP"
+zonetransfer.me. 301 IN TXT "google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA"
+zonetransfer.me. 7200 IN MX 0 ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 10 ALT1.ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 10 ALT2.ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX2.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX3.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX4.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX5.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN A 5.196.105.14
+zonetransfer.me. 7200 IN NS nsztm1.digi.ninja.
+zonetransfer.me. 7200 IN NS nsztm2.digi.ninja.
+_acme-challenge.zonetransfer.me. 301 IN TXT "6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI"
+_sip._tcp.zonetransfer.me. 14000 IN SRV 0 0 5060 www.zonetransfer.me.
+14.105.196.5.IN-ADDR.ARPA.zonetransfer.me. 7200 IN PTR www.zonetransfer.me.
+asfdbauthdns.zonetransfer.me. 7900 IN AFSDB 1 asfdbbox.zonetransfer.me.
+asfdbbox.zonetransfer.me. 7200 IN A 127.0.0.1
+asfdbvolume.zonetransfer.me. 7800 IN AFSDB 1 asfdbbox.zonetransfer.me.
+canberra-office.zonetransfer.me. 7200 IN A 202.14.81.230
+cmdexec.zonetransfer.me. 300 IN TXT "; ls"
+contact.zonetransfer.me. 2592000 IN TXT "Remember to call or email Pippa on +44 123 4567890 or pippa@zonetransfer.me when making DNS changes"
+dc-office.zonetransfer.me. 7200 IN A 143.228.181.132
+deadbeef.zonetransfer.me. 7201 IN AAAA dead:beaf::
+dr.zonetransfer.me. 300 IN LOC 53 20 56.558 N 1 38 33.526 W 0.00m 1m 10000m 10m
+DZC.zonetransfer.me. 7200 IN TXT "AbCdEfG"
+email.zonetransfer.me. 2222 IN NAPTR 1 1 "P" "E2U+email" "" email.zonetransfer.me.zonetransfer.me.
+email.zonetransfer.me. 7200 IN A 74.125.206.26
+Hello.zonetransfer.me. 7200 IN TXT "Hi to Josh and all his class"
+home.zonetransfer.me. 7200 IN A 127.0.0.1
+Info.zonetransfer.me. 7200 IN TXT "ZoneTransfer.me service provided by Robin Wood - robin@digi.ninja. See http://digi.ninja/projects/zonetransferme.php for more information."
+internal.zonetransfer.me. 300 IN NS intns1.zonetransfer.me.
+internal.zonetransfer.me. 300 IN NS intns2.zonetransfer.me.
+intns1.zonetransfer.me. 300 IN A 81.4.108.41
+intns2.zonetransfer.me. 300 IN A 167.88.42.94
+office.zonetransfer.me. 7200 IN A 4.23.39.254
+ipv6actnow.org.zonetransfer.me. 7200 IN AAAA 2001:67c:2e8:11::c100:1332
+owa.zonetransfer.me. 7200 IN A 207.46.197.32
+robinwood.zonetransfer.me. 302 IN TXT "Robin Wood"
+rp.zonetransfer.me. 321 IN RP robin.zonetransfer.me. robinwood.zonetransfer.me.
+sip.zonetransfer.me. 3333 IN NAPTR 2 3 "P" "E2U+sip" "!^.*$!sip:customer-service@zonetransfer.me!" .
+sqli.zonetransfer.me. 300 IN TXT "' or 1=1 --"
+sshock.zonetransfer.me. 7200 IN TXT "() { :]}; echo ShellShocked"
+staging.zonetransfer.me. 7200 IN CNAME www.sydneyoperahouse.com.
+alltcpportsopen.firewall.test.zonetransfer.me. 301 IN A 127.0.0.1
+testing.zonetransfer.me. 301 IN CNAME www.zonetransfer.me.
+vpn.zonetransfer.me. 4000 IN A 174.36.59.154
+www.zonetransfer.me. 7200 IN A 5.196.105.14
+xss.zonetransfer.me. 300 IN TXT "'>"
+zonetransfer.me. 7200 IN SOA nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600
+;; Query time: 170 msec
+;; SERVER: 81.4.108.41#53(81.4.108.41)
+;; WHEN: Thu Mar 26 16:31:06 PDT 2020
+;; XFR size: 50 records (messages 1, bytes 1994)
+
diff --git a/tests/fixtures/ubuntu-18.04/dig-axfr.json b/tests/fixtures/ubuntu-18.04/dig-axfr.json
new file mode 100644
index 00000000..b7548c91
--- /dev/null
+++ b/tests/fixtures/ubuntu-18.04/dig-axfr.json
@@ -0,0 +1 @@
+[{"axfr": [{"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "SOA", "data": "nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600"}, {"name": "zonetransfer.me.", "ttl": 300, "class": "IN", "type": "HINFO", "data": "\"Casio fx-700G\" \"Windows XP\""}, {"name": "zonetransfer.me.", "ttl": 301, "class": "IN", "type": "TXT", "data": "\"google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA\""}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "0 ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "10 ALT1.ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "10 ALT2.ASPMX.L.GOOGLE.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX2.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX3.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX4.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "MX", "data": "20 ASPMX5.GOOGLEMAIL.COM."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "5.196.105.14"}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "NS", "data": "nsztm1.digi.ninja."}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "NS", "data": "nsztm2.digi.ninja."}, {"name": "_acme-challenge.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "TXT", "data": "\"6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI\""}, {"name": "_sip._tcp.zonetransfer.me.", "ttl": 14000, "class": "IN", "type": "SRV", "data": "0 0 5060 www.zonetransfer.me."}, {"name": "14.105.196.5.IN-ADDR.ARPA.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "PTR", "data": "www.zonetransfer.me."}, {"name": "asfdbauthdns.zonetransfer.me.", "ttl": 7900, "class": "IN", "type": "AFSDB", "data": "1 asfdbbox.zonetransfer.me."}, {"name": "asfdbbox.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "asfdbvolume.zonetransfer.me.", "ttl": 7800, "class": "IN", "type": "AFSDB", "data": "1 asfdbbox.zonetransfer.me."}, {"name": "canberra-office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "202.14.81.230"}, {"name": "contact.zonetransfer.me.", "ttl": 2592000, "class": "IN", "type": "TXT", "data": "\"Remember to call or email Pippa on +44 123 4567890 or pippa@zonetransfer.me when making DNS changes\""}, {"name": "dc-office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "143.228.181.132"}, {"name": "deadbeef.zonetransfer.me.", "ttl": 7201, "class": "IN", "type": "AAAA", "data": "dead:beaf::"}, {"name": "dr.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "LOC", "data": "53 20 56.558 N 1 38 33.526 W 0.00m 1m 10000m 10m"}, {"name": "DZC.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"AbCdEfG\""}, {"name": "email.zonetransfer.me.", "ttl": 2222, "class": "IN", "type": "NAPTR", "data": "1 1 \"P\" \"E2U+email\" \"\" email.zonetransfer.me.zonetransfer.me."}, {"name": "email.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "74.125.206.26"}, {"name": "Hello.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"Hi to Josh and all his class\""}, {"name": "home.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "Info.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "TXT", "data": "\"ZoneTransfer.me service provided by Robin Wood - robin@digi.ninja. See http://digi.ninja/projects/zonetransferme.php for more information.\""}, {"name": "internal.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "NS", "data": "intns1.zonetransfer.me."}, {"name": "internal.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "NS", "data": "intns2.zonetransfer.me."}, {"name": "intns1.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "A", "data": "81.4.108.41"}, {"name": "intns2.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "A", "data": "167.88.42.94"}, {"name": "office.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "4.23.39.254"}, {"name": "ipv6actnow.org.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "AAAA", "data": "2001:67c:2e8:11::c100:1332"}, {"name": "owa.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "207.46.197.32"}, {"name": "robinwood.zonetransfer.me.", "ttl": 302, "class": "IN", "type": "TXT", "data": "\"Robin Wood\""}, {"name": "rp.zonetransfer.me.", "ttl": 321, "class": "IN", "type": "RP", "data": "robin.zonetransfer.me. robinwood.zonetransfer.me."}, {"name": "sip.zonetransfer.me.", "ttl": 3333, "class": "IN", "type": "NAPTR", "data": "2 3 \"P\" \"E2U+sip\" \"!^.*$!sip:customer-service@zonetransfer.me!\" ."}, {"name": "sqli.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "TXT", "data": "\"' or 1=1 --\""}, {"name": "staging.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "CNAME", "data": "www.sydneyoperahouse.com."}, {"name": "alltcpportsopen.firewall.test.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "A", "data": "127.0.0.1"}, {"name": "testing.zonetransfer.me.", "ttl": 301, "class": "IN", "type": "CNAME", "data": "www.zonetransfer.me."}, {"name": "vpn.zonetransfer.me.", "ttl": 4000, "class": "IN", "type": "A", "data": "174.36.59.154"}, {"name": "www.zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "A", "data": "5.196.105.14"}, {"name": "xss.zonetransfer.me.", "ttl": 300, "class": "IN", "type": "TXT", "data": "\"'>\""}, {"name": "zonetransfer.me.", "ttl": 7200, "class": "IN", "type": "SOA", "data": "nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600"}], "query_time": 105, "server": "81.4.108.41#53(81.4.108.41)", "when": "Wed Mar 25 14:34:55 EDT 2020", "size": "50 records (messages 1, bytes 1994)"}]
diff --git a/tests/fixtures/ubuntu-18.04/dig-axfr.out b/tests/fixtures/ubuntu-18.04/dig-axfr.out
new file mode 100644
index 00000000..c7e6a744
--- /dev/null
+++ b/tests/fixtures/ubuntu-18.04/dig-axfr.out
@@ -0,0 +1,57 @@
+; <<>> DiG 9.11.14-3-Debian <<>> @81.4.108.41 axfr zonetransfer.me +nocookie
+; (1 server found)
+;; global options: +cmd
+zonetransfer.me. 7200 IN SOA nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600
+zonetransfer.me. 300 IN HINFO "Casio fx-700G" "Windows XP"
+zonetransfer.me. 301 IN TXT "google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA"
+zonetransfer.me. 7200 IN MX 0 ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 10 ALT1.ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 10 ALT2.ASPMX.L.GOOGLE.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX2.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX3.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX4.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN MX 20 ASPMX5.GOOGLEMAIL.COM.
+zonetransfer.me. 7200 IN A 5.196.105.14
+zonetransfer.me. 7200 IN NS nsztm1.digi.ninja.
+zonetransfer.me. 7200 IN NS nsztm2.digi.ninja.
+_acme-challenge.zonetransfer.me. 301 IN TXT "6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI"
+_sip._tcp.zonetransfer.me. 14000 IN SRV 0 0 5060 www.zonetransfer.me.
+14.105.196.5.IN-ADDR.ARPA.zonetransfer.me. 7200 IN PTR www.zonetransfer.me.
+asfdbauthdns.zonetransfer.me. 7900 IN AFSDB 1 asfdbbox.zonetransfer.me.
+asfdbbox.zonetransfer.me. 7200 IN A 127.0.0.1
+asfdbvolume.zonetransfer.me. 7800 IN AFSDB 1 asfdbbox.zonetransfer.me.
+canberra-office.zonetransfer.me. 7200 IN A 202.14.81.230
+cmdexec.zonetransfer.me. 300 IN TXT "; ls"
+contact.zonetransfer.me. 2592000 IN TXT "Remember to call or email Pippa on +44 123 4567890 or pippa@zonetransfer.me when making DNS changes"
+dc-office.zonetransfer.me. 7200 IN A 143.228.181.132
+deadbeef.zonetransfer.me. 7201 IN AAAA dead:beaf::
+dr.zonetransfer.me. 300 IN LOC 53 20 56.558 N 1 38 33.526 W 0.00m 1m 10000m 10m
+DZC.zonetransfer.me. 7200 IN TXT "AbCdEfG"
+email.zonetransfer.me. 2222 IN NAPTR 1 1 "P" "E2U+email" "" email.zonetransfer.me.zonetransfer.me.
+email.zonetransfer.me. 7200 IN A 74.125.206.26
+Hello.zonetransfer.me. 7200 IN TXT "Hi to Josh and all his class"
+home.zonetransfer.me. 7200 IN A 127.0.0.1
+Info.zonetransfer.me. 7200 IN TXT "ZoneTransfer.me service provided by Robin Wood - robin@digi.ninja. See http://digi.ninja/projects/zonetransferme.php for more information."
+internal.zonetransfer.me. 300 IN NS intns1.zonetransfer.me.
+internal.zonetransfer.me. 300 IN NS intns2.zonetransfer.me.
+intns1.zonetransfer.me. 300 IN A 81.4.108.41
+intns2.zonetransfer.me. 300 IN A 167.88.42.94
+office.zonetransfer.me. 7200 IN A 4.23.39.254
+ipv6actnow.org.zonetransfer.me. 7200 IN AAAA 2001:67c:2e8:11::c100:1332
+owa.zonetransfer.me. 7200 IN A 207.46.197.32
+robinwood.zonetransfer.me. 302 IN TXT "Robin Wood"
+rp.zonetransfer.me. 321 IN RP robin.zonetransfer.me. robinwood.zonetransfer.me.
+sip.zonetransfer.me. 3333 IN NAPTR 2 3 "P" "E2U+sip" "!^.*$!sip:customer-service@zonetransfer.me!" .
+sqli.zonetransfer.me. 300 IN TXT "' or 1=1 --"
+sshock.zonetransfer.me. 7200 IN TXT "() { :]}; echo ShellShocked"
+staging.zonetransfer.me. 7200 IN CNAME www.sydneyoperahouse.com.
+alltcpportsopen.firewall.test.zonetransfer.me. 301 IN A 127.0.0.1
+testing.zonetransfer.me. 301 IN CNAME www.zonetransfer.me.
+vpn.zonetransfer.me. 4000 IN A 174.36.59.154
+www.zonetransfer.me. 7200 IN A 5.196.105.14
+xss.zonetransfer.me. 300 IN TXT "'>"
+zonetransfer.me. 7200 IN SOA nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600
+;; Query time: 105 msec
+;; SERVER: 81.4.108.41#53(81.4.108.41)
+;; WHEN: Wed Mar 25 14:34:55 EDT 2020
+;; XFR size: 50 records (messages 1, bytes 1994)
diff --git a/tests/test_dig.py b/tests/test_dig.py
index 7e8ba712..6e7ad431 100644
--- a/tests/test_dig.py
+++ b/tests/test_dig.py
@@ -28,6 +28,33 @@ class MyTests(unittest.TestCase):
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/ubuntu-18.04/dig-aaaa.out'), 'r', encoding='utf-8') as f:
self.ubuntu_18_4_dig_aaaa = f.read()
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/centos-7.7/dig-axfr.out'), 'r', encoding='utf-8') as f:
+ self.centos_7_7_dig_axfr = f.read()
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/ubuntu-18.04/dig-axfr.out'), 'r', encoding='utf-8') as f:
+ self.ubuntu_18_4_dig_axfr = f.read()
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.11.6/dig.out'), 'r', encoding='utf-8') as f:
+ self.osx_10_11_6_dig = f.read()
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.11.6/dig-x.out'), 'r', encoding='utf-8') as f:
+ self.osx_10_11_6_dig_x = f.read()
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.11.6/dig-aaaa.out'), 'r', encoding='utf-8') as f:
+ self.osx_10_11_6_dig_aaaa = f.read()
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/dig.out'), 'r', encoding='utf-8') as f:
+ self.osx_10_14_6_dig = f.read()
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/dig-x.out'), 'r', encoding='utf-8') as f:
+ self.osx_10_14_6_dig_x = f.read()
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/dig-aaaa.out'), 'r', encoding='utf-8') as f:
+ self.osx_10_14_6_dig_aaaa = f.read()
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/dig-axfr.out'), 'r', encoding='utf-8') as f:
+ self.osx_10_14_6_dig_axfr = f.read()
+
# output
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/centos-7.7/dig.json'), 'r', encoding='utf-8') as f:
self.centos_7_7_dig_json = json.loads(f.read())
@@ -47,6 +74,33 @@ class MyTests(unittest.TestCase):
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/ubuntu-18.04/dig-aaaa.json'), 'r', encoding='utf-8') as f:
self.ubuntu_18_4_dig_aaaa_json = json.loads(f.read())
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/centos-7.7/dig-axfr.json'), 'r', encoding='utf-8') as f:
+ self.centos_7_7_dig_axfr_json = json.loads(f.read())
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/ubuntu-18.04/dig-axfr.json'), 'r', encoding='utf-8') as f:
+ self.ubuntu_18_4_dig_axfr_json = json.loads(f.read())
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.11.6/dig.json'), 'r', encoding='utf-8') as f:
+ self.osx_10_11_6_dig_json = json.loads(f.read())
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.11.6/dig-x.json'), 'r', encoding='utf-8') as f:
+ self.osx_10_11_6_dig_x_json = json.loads(f.read())
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.11.6/dig-aaaa.json'), 'r', encoding='utf-8') as f:
+ self.osx_10_11_6_dig_aaaa_json = json.loads(f.read())
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/dig.json'), 'r', encoding='utf-8') as f:
+ self.osx_10_14_6_dig_json = json.loads(f.read())
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/dig-x.json'), 'r', encoding='utf-8') as f:
+ self.osx_10_14_6_dig_x_json = json.loads(f.read())
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/dig-aaaa.json'), 'r', encoding='utf-8') as f:
+ self.osx_10_14_6_dig_aaaa_json = json.loads(f.read())
+
+ with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/dig-axfr.json'), 'r', encoding='utf-8') as f:
+ self.osx_10_14_6_dig_axfr_json = json.loads(f.read())
+
def test_dig_centos_7_7(self):
"""
Test 'dig' on Centos 7.7
@@ -83,6 +137,60 @@ class MyTests(unittest.TestCase):
"""
self.assertEqual(jc.parsers.dig.parse(self.ubuntu_18_4_dig_aaaa, quiet=True), self.ubuntu_18_4_dig_aaaa_json)
+ def test_dig_axfr_centos_7_7(self):
+ """
+ Test 'dig axfr' on Centos 7.7
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.centos_7_7_dig_axfr, quiet=True), self.centos_7_7_dig_axfr_json)
+
+ def test_dig_axfr_ubuntu_18_4(self):
+ """
+ Test 'dig axfr' on Ubuntu 18.4
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.ubuntu_18_4_dig_axfr, quiet=True), self.ubuntu_18_4_dig_axfr_json)
+
+ def test_dig_osx_10_11_6(self):
+ """
+ Test 'dig' on OSX 10.11.6
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.osx_10_11_6_dig, quiet=True), self.osx_10_11_6_dig_json)
+
+ def test_dig_x_osx_10_11_6(self):
+ """
+ Test 'dig -x' on OSX 10.11.6
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.osx_10_11_6_dig_x, quiet=True), self.osx_10_11_6_dig_x_json)
+
+ def test_dig_aaaa_osx_10_11_6(self):
+ """
+ Test 'dig -aaaa' on OSX 10.11.6
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.osx_10_11_6_dig_aaaa, quiet=True), self.osx_10_11_6_dig_aaaa_json)
+
+ def test_dig_osx_10_14_6(self):
+ """
+ Test 'dig' on OSX 10.14.6
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.osx_10_14_6_dig, quiet=True), self.osx_10_14_6_dig_json)
+
+ def test_dig_x_osx_10_14_6(self):
+ """
+ Test 'dig -x' on OSX 10.14.6
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.osx_10_14_6_dig_x, quiet=True), self.osx_10_14_6_dig_x_json)
+
+ def test_dig_aaaa_osx_10_14_6(self):
+ """
+ Test 'dig -aaaa' on OSX 10.14.6
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.osx_10_14_6_dig_aaaa, quiet=True), self.osx_10_14_6_dig_aaaa_json)
+
+ def test_dig_axfr_osx_10_14_6(self):
+ """
+ Test 'dig axfr' on OSX 10.14.6
+ """
+ self.assertEqual(jc.parsers.dig.parse(self.osx_10_14_6_dig_axfr, quiet=True), self.osx_10_14_6_dig_axfr_json)
+
if __name__ == '__main__':
unittest.main()