bug fixes

This commit is contained in:
Nikola Mitev 2024-11-12 11:59:42 +00:00
parent 02e2c3592a
commit d8caa60712

View File

@ -16,18 +16,22 @@ def resolve_domain(domain, timeout=1, iterations=100, delay=0):
result = {} result = {}
for resolver in resolvers: for resolver in resolvers:
result.setdefault(resolver, {})
for rtype in rtypes: for rtype in rtypes:
demisto.debug(f'Resolving {domain} using {resolver} for {rtype} records...') 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. # run every query 100 times to handle cases where the DNS server is not responding.
errors = set() errors = set()
result[resolver].setdefault(rtype, {'successes': 0, 'failures': 0, 'answers': set()})
demisto.debug(f'{result[resolver][rtype]}')
for i in range(iterations): for i in range(iterations):
answers = [] answers = False
try: try:
a = dns.resolver.resolve_at(resolver, domain, rtype, lifetime=timeout) a = dns.resolver.resolve_at(resolver, domain, rtype, lifetime=timeout)
if a: if a:
answers = [str(answer) for answer in a] answers = True
answers.sort() for answer in a:
result[resolver][rtype]['answers'].add(str(answer))
except dns.resolver.NXDOMAIN: except dns.resolver.NXDOMAIN:
error = f'Domain {domain} does not exist.' error = f'Domain {domain} does not exist.'
@ -48,35 +52,21 @@ def resolve_domain(domain, timeout=1, iterations=100, delay=0):
demisto.info(f'Results for {resolver} and {rtype}: {answers}') 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 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') demisto.debug(f'incrementing successes')
result[resolver][rtype]['successes'] += 1 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: else:
demisto.debug(f'incrementing failures') demisto.debug(f'incrementing failures')
result[resolver][rtype]['failures'] += 1 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}
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}}
if delay > 0:
sleep(delay) sleep(delay)
result[resolver][rtype]['answers'] = list(result[resolver][rtype]['answers'])
if errors: if errors:
demisto.debug(f'errors for {resolver} and {rtype}: {errors}') demisto.debug(f'errors for {resolver} and {rtype}: {errors}')
result[resolver][rtype]['errors'] = list(errors) result[resolver][rtype]['errors'] = list(errors)
@ -123,8 +113,9 @@ def main():
params = demisto.params() params = demisto.params()
timeout = int(params.get('timeout', 1)) timeout = int(params.get('timeout', 1))
default_domain = params.get('default_domain', 'google.com') default_domain = params.get('default_domain', 'google.com')
delay = int(params.get('delay', 0)) # use command arguments if provided, then any custom default set, fallback to default delay
iterations = int(params.get('iterations', 100)) delay = int(args.get('delay', params.get('delay', 0)))
iterations = int(args.get('count', params.get('iterations', 100)))
if command == 'dns-test-resolve-domain': if command == 'dns-test-resolve-domain':
domain = args.get('domain') domain = args.get('domain')