diff --git a/Integrations/DNSTest/dnstest.py b/Integrations/DNSTest/dnstest.py index 4ca4801..f52fc65 100644 --- a/Integrations/DNSTest/dnstest.py +++ b/Integrations/DNSTest/dnstest.py @@ -16,18 +16,22 @@ def resolve_domain(domain, timeout=1, iterations=100, delay=0): result = {} for resolver in resolvers: + result.setdefault(resolver, {}) for rtype in rtypes: demisto.debug(f'Resolving {domain} using {resolver} for {rtype} records...') # run every query 100 times to handle cases where the DNS server is not responding. errors = set() + result[resolver].setdefault(rtype, {'successes': 0, 'failures': 0, 'answers': set()}) + demisto.debug(f'{result[resolver][rtype]}') for i in range(iterations): - answers = [] + answers = False try: a = dns.resolver.resolve_at(resolver, domain, rtype, lifetime=timeout) if a: - answers = [str(answer) for answer in a] - answers.sort() + answers = True + for answer in a: + result[resolver][rtype]['answers'].add(str(answer)) except dns.resolver.NXDOMAIN: error = f'Domain {domain} does not exist.' @@ -48,34 +52,20 @@ def resolve_domain(domain, timeout=1, iterations=100, delay=0): demisto.info(f'Results for {resolver} and {rtype}: {answers}') - if resolver in result and rtype in result[resolver]: - demisto.debug(f'Previous results for {resolver} and {rtype} already exist.') - if answers: - if not result[resolver][rtype]['answers'] or answers == result[resolver][rtype]['answers']: - demisto.debug(f'incrementing successes') - result[resolver][rtype]['successes'] += 1 - else: - demisto.info(f'got different answer for {rtype} from {resolver}: {answerlist}') - result[resolver][rtype].setdefault('variants', []).append(answerlist) - demisto.debug(f'incrementing successes') - result[resolver][rtype]['successes'] += 1 - else: - demisto.debug(f'incrementing failures') - result[resolver][rtype]['failures'] += 1 - elif resolver in result: - demisto.debug(f'Adding initial record for {rtype} from {resolver}.') - if answers: - result[resolver][rtype] = {'answers': [str(answer) for answer in answers], 'successes': 1} - else: - result[resolver][rtype] = {'answers': [], 'failures': 1, 'successes': 0} + if answers: + demisto.debug(f'incrementing successes') + result[resolver][rtype]['successes'] += 1 + #if result[resolver][rtype]['answers'] and answers != result[resolver][rtype]['answers']: + # demisto.info(f'got different answer for {rtype} from {resolver}: {answers}') + # result[resolver][rtype].setdefault('variants', []).append(answers) else: - demisto.debug(f'Adding initial result for {resolver}.') - if answers: - result[resolver] = {rtype: {'answers': [str(answer) for answer in answers],'successes': 1}} - else: - result[resolver] = {rtype: {'answers': [], 'failures': 1, 'successes': 0}} + demisto.debug(f'incrementing failures') + result[resolver][rtype]['failures'] += 1 - sleep(delay) + if delay > 0: + sleep(delay) + + result[resolver][rtype]['answers'] = list(result[resolver][rtype]['answers']) if errors: demisto.debug(f'errors for {resolver} and {rtype}: {errors}') @@ -123,8 +113,9 @@ def main(): params = demisto.params() timeout = int(params.get('timeout', 1)) default_domain = params.get('default_domain', 'google.com') - delay = int(params.get('delay', 0)) - iterations = int(params.get('iterations', 100)) + # use command arguments if provided, then any custom default set, fallback to default delay + delay = int(args.get('delay', params.get('delay', 0))) + iterations = int(args.get('count', params.get('iterations', 100))) if command == 'dns-test-resolve-domain': domain = args.get('domain')