Last active
April 26, 2017 01:32
Revisions
-
vulpicastor revised this gist
Apr 26, 2017 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -99,7 +99,7 @@ def main(): wait = DEFAULT_INTERVAL timeout = 0 time.sleep(wait) except dns.exception.Timeout as err: zwrite.zwrite(str(err) + "\nRetry in {} seconds".format(wait), zsig=domain, **DEFAULT_ARGS) wait = randrange(0, BACKOFF_START * 2**timeout) timeout += 1 -
vulpicastor revised this gist
Oct 14, 2016 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -7,9 +7,9 @@ from random import randrange import zwrite DEFAULT_ARGS = {"classname": "test", "instance": "dns", "sender": "dns_bot", "opcode": "auto"} TEMPLATE = "{:15} SOA Serial: @b({})" -
vulpicastor revised this gist
Oct 14, 2016 . 1 changed file with 22 additions and 7 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -4,15 +4,19 @@ import sys import time import dns.resolver, dns.exception from random import randrange import zwrite DEFAULT_ARGS = {"classname": "slz-auto", "instance": "dns", "sender": "slz_bot", "opcode": "auto"} TEMPLATE = "{:15} SOA Serial: @b({})" DEFAULT_INTERVAL = 300 BACKOFF_START = 10 def find_nameservers(domain): nameservers = [] try: @@ -75,20 +79,31 @@ def main(): try: resolver_ips = find_ips(find_nameservers(domain)) except (dns.exception.Timeout, dns.resolver.NXDOMAIN, dns.resolver.YXDOMAIN, dns.resolver.NoAnswer, dns.resolver.NoNameservers) as err: if len(sys.argv) > 2: resolver_ips = sys.argv[2:] else: zwrite.zwrite(str(err), zsig=domain, **DEFAULT_ARGS) raise resolvers = spawn_resolvers(resolver_ips) serials = {} for r in resolvers: serials[r.nameservers[0]] = "0" wait = DEFAULT_INTERVAL timeout = 0 while True: try: message = check_soa_serial(domain, resolvers, serials) if message: zwrite.zwrite(message, zsig=domain, **DEFAULT_ARGS) wait = DEFAULT_INTERVAL timeout = 0 time.sleep(wait) except dns.exception.Timeout: zwrite.zwrite(str(err) + "\nRetry in {} seconds".format(wait), zsig=domain, **DEFAULT_ARGS) wait = randrange(0, BACKOFF_START * 2**timeout) timeout += 1 time.sleep(wait) if __name__ == "__main__": main() -
vulpicastor revised this gist
Jul 17, 2016 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -91,4 +91,4 @@ def main(): time.sleep(300) if __name__ == "__main__": main() -
vulpicastor revised this gist
Jul 17, 2016 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -6,9 +6,9 @@ import dns.resolver, dns.exception import zwrite DEFAULT_ARGS = {"classname": "test", "instance": "dns", "sender": "bot", "opcode": "auto"} TEMPLATE = "{:15} SOA Serial: @b({})" -
vulpicastor revised this gist
Jul 17, 2016 . 1 changed file with 36 additions and 22 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -3,22 +3,26 @@ from __future__ import print_function import sys import time import dns.resolver, dns.exception import zwrite DEFAULT_ARGS = {"classname": "slz-auto", "instance": "dns", "sender": "slz_bot", "opcode": "auto"} TEMPLATE = "{:15} SOA Serial: @b({})" def find_nameservers(domain): nameservers = [] try: answer = dns.resolver.query(domain, "NS") for ns in answer: nameservers.append(ns.target) return nameservers except dns.resolver.NoNameservers: print("Error: Cannot find name servers for {}.".format(domain)) raise def find_ips(domains): ips = [] @@ -28,7 +32,6 @@ def find_ips(domains): ips.append(a.address) return ips def spawn_resolvers(nameservers): resolvers = [] for ns in nameservers: @@ -48,25 +51,36 @@ def check_soa_serial(domain, resolvers, serials): new_serials = {} updated = False for r in resolvers: n = r.nameservers[0] try: soa = r.query(domain, "SOA") s = soa[0].serial if serials_gt(s, serials[n]): answers.append(TEMPLATE.format(n, s) + " @b(@color(green)UPDATE)") updated = True elif serials_eq(s, serials[n]): if updated: answers.append(TEMPLATE.format(n, s) + " @b(@color(yellow)UNCHANGED)") else: answers.append(TEMPLATE.format(n, s) + " @b(@color(red)REGRESSION)") updated = True new_serials[n] = s except dns.resolver.NoNameservers: answers.append(TEMPLATE.format(n, "@color(red)UNKNOWN")) serials.update(new_serials) return "\n".join(answers) def main(): domain = sys.argv[1] try: resolver_ips = find_ips(find_nameservers(domain)) except (dns.exception.Timeout, dns.resolver.NXDOMAIN, dns.resolver.YXDOMAIN, dns.resolver.NoAnswer, dns.resolver.NoNameservers): if len(sys.argv) > 2: resolver_ips = sys.argv[2:] else: raise resolvers = spawn_resolvers(resolver_ips) serials = {} for r in resolvers: serials[r.nameservers[0]] = "0" @@ -77,4 +91,4 @@ def main(): time.sleep(300) if __name__ == "__main__": main() -
vulpicastor revised this gist
Jul 15, 2016 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -6,9 +6,9 @@ import dns.resolver import zwrite DEFAULT_ARGS = {"classname": "test", "instance": "dns", "sender": "bot", "opcode": "auto"} TEMPLATE = "{:15} SOA Serial: @b({})" -
vulpicastor revised this gist
Jul 15, 2016 . 1 changed file with 16 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -6,22 +6,29 @@ import dns.resolver import zwrite DEFAULT_ARGS = {"classname": "slz-auto", "instance": "dns", "sender": "slz_bot", "opcode": "auto"} TEMPLATE = "{:15} SOA Serial: @b({})" def find_nameservers(domain): nameservers = [] answer = dns.resolver.query(domain, "NS") for ns in answer: nameservers.append(ns.target) return nameservers def find_ips(domains): ips = [] for d in domains: answer = dns.resolver.query(d) for a in answer: ips.append(a.address) return ips def spawn_resolvers(nameservers): resolvers = [] for ns in nameservers: @@ -59,15 +66,14 @@ def check_soa_serial(domain, resolvers, serials): def main(): domain = sys.argv[1] resolvers = spawn_resolvers(find_ips(find_nameservers(domain))) serials = {} for r in resolvers: serials[r.nameservers[0]] = "0" while True: message = check_soa_serial(domain, resolvers, serials) if message: zwrite.zwrite(message, zsig=domain, **DEFAULT_ARGS) time.sleep(300) if __name__ == "__main__": -
vulpicastor revised this gist
Jul 14, 2016 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -37,7 +37,7 @@ def serials_eq(a, b): return int(a) == int(b) def check_soa_serial(domain, resolvers, serials): answers = [] new_serials = {} updated = False for r in resolvers: @@ -67,7 +67,7 @@ def main(): while True: message = check_soa_serial(domain, resolvers, serials) if message: zwrite.zwrite("\n".join((domain, message)), **DEFAULT_ARGS) time.sleep(300) if __name__ == "__main__": -
vulpicastor revised this gist
Jul 14, 2016 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -71,4 +71,4 @@ def main(): time.sleep(300) if __name__ == "__main__": main() -
vulpicastor revised this gist
Jul 14, 2016 . 1 changed file with 4 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -47,10 +47,11 @@ def check_soa_serial(domain, resolvers, serials): if serials_gt(s, serials[n]): answers.append(TEMPLATE.format(n, s) + " @b(@color(green)UPDATE)") updated = True elif serials_eq(s, serials[n]): if updated: answers.append(TEMPLATE.format(n, s) + " @b(@color(yellow)UNCHANGED)") else: answers.append(TEMPLATE.format(n, s) + " @b(@color(red)REGRESSION)") updated = True new_serials[n] = s serials.update(new_serials) -
vulpicastor revised this gist
Jul 14, 2016 . 1 changed file with 2 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -52,6 +52,8 @@ def check_soa_serial(domain, resolvers, serials): else: answers.append(TEMPLATE.format(n, s) + " @b(@color(yellow)REGRESSION)") updated = True new_serials[n] = s serials.update(new_serials) return "\n".join(answers) def main(): -
vulpicastor created this gist
Jul 14, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,71 @@ #!/usr/bin/env python3 from __future__ import print_function import sys import time import dns.resolver import zwrite DEFAULT_ARGS = {"classname": "message", "instance": "dns", "sender": "bot", "zsig": "dnscheck.py", "opcode": "auto"} TEMPLATE = "{:15} SOA Serial: @b({})" def find_nameservers(domain): nameservers = [] ns = dns.resolver.query(domain, "NS") for rrset in ns.response.additional: for a in rrset: nameservers.append(a.address) return nameservers def spawn_resolvers(nameservers): resolvers = [] for ns in nameservers: resolvers.append(dns.resolver.Resolver()) resolvers[-1].nameservers = [ns] return resolvers def serials_gt(a, b): # TODO: actually use the algorithm specified in RFC 1982 return int(a) > int(b) def serials_eq(a, b): return int(a) == int(b) def check_soa_serial(domain, resolvers, serials): answers = [domain] new_serials = {} updated = False for r in resolvers: soa = r.query(domain, "SOA") n = r.nameservers[0] s = soa[0].serial if serials_gt(s, serials[n]): answers.append(TEMPLATE.format(n, s) + " @b(@color(green)UPDATE)") updated = True elif serials_eq(s, serials[n]) and updated: answers.append(TEMPLATE.format(n, s) + " @b(@color(yellow)UNCHANGED)") else: answers.append(TEMPLATE.format(n, s) + " @b(@color(yellow)REGRESSION)") updated = True return "\n".join(answers) def main(): domain = sys.argv[1] print(domain) resolvers = spawn_resolvers(find_nameservers(domain)) serials = {} for r in resolvers: serials[r.nameservers[0]] = "0" while True: message = check_soa_serial(domain, resolvers, serials) if message: zwrite.zwrite(message, **DEFAULT_ARGS) time.sleep(300) if __name__ == "__main__": main()