From e826dc663bf66c2031a266cea39405025be967d6 Mon Sep 17 00:00:00 2001 From: NotoriousRebel Date: Wed, 21 Nov 2018 01:36:36 -0500 Subject: [PATCH] Fixed most byte and str improper concats and now need to work on sockets not connecting properly. --- discovery/DNS/Base.py | 21 +++++++++++++++++---- discovery/DNS/Lib.py | 10 +++++----- discovery/dnssearch.py | 4 +++- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/discovery/DNS/Base.py b/discovery/DNS/Base.py index 23b6eff4..ad1d08ad 100644 --- a/discovery/DNS/Base.py +++ b/discovery/DNS/Base.py @@ -55,7 +55,7 @@ def DiscoverNameServers(): import win32dns defaults['server'] = win32dns.RegistryResolve() else: - return ParseResolvConf(resolv_path="/etc/resolv.conf") + return ParseResolvConf() class DnsRequest: @@ -65,7 +65,7 @@ class DnsRequest: def __init__(self, *name, **args): self.donefunc = None #fix maybe? - self.asyn= False + self.asyn = False #self.async = None #TODO FIX async is a keyword self.defaults = {} self.argparse(name, args) @@ -148,7 +148,18 @@ def processReply(self): # Lib.dumpM(u) def conn(self): - self.s.connect((self.ns, self.port)) + """print('self.ns is: ',self.ns) + print('self.port is: ',self.port) + print('type of self.ns is: ',type(self.ns)) + print('type of self.port is: ',self.port)""" + if not isinstance(self.ns,str): + self.ns = str(self.ns) + #print('self.ns is: ',self.ns) + #print('self.ns type is: ',type(self.ns)) + try: + self.s.connect((self.ns, self.port)) + except Exception: + pass def req(self, *name, **args): " needs a refactoring " @@ -210,7 +221,9 @@ def sendUDPRequest(self, server): self.s.send(self.request) self.response = self.processUDPReply() # except socket.error: - except Exception: + except Exception as e: + print('getting exception: ', e) + import traceback; print(traceback.print_exc()) continue break if not self.response: diff --git a/discovery/DNS/Lib.py b/discovery/DNS/Lib.py index e4d13a89..1a1b921e 100644 --- a/discovery/DNS/Lib.py +++ b/discovery/DNS/Lib.py @@ -70,7 +70,7 @@ class Packer: " packer base class. supports basic byte/16bit/32bit/addr/string/name " def __init__(self): - self.buf = '' + self.buf = b'' self.index = {} def getbuf(self): @@ -141,7 +141,7 @@ def addname(self, name): buf = buf + pack16bit(pointer | 0xC000) else: buf = buf + '\0' - self.buf = self.buf + buf + self.buf = self.buf + bytes(buf, encoding='utf-8') for key, value in index: self.index[key] = value @@ -207,10 +207,10 @@ def getstring(self): def getname(self): # Domain name unpacking (section 4.1.4) c = self.getbyte() - i = ord(c) + i = ord(chr(c)) if i & 0xC0 == 0xC0: d = self.getbyte() - j = ord(d) + j = ord(chr(d)) pointer = ((i << 8) | j) & ~0xC000 save_offset = self.offset try: @@ -226,7 +226,7 @@ def getname(self): if not remains: return domain else: - return domain + '.' + remains + return domain + b'.' + remains # Test program for packin/unpacking (section 4.1.4) diff --git a/discovery/dnssearch.py b/discovery/dnssearch.py index b0f404df..67796a72 100644 --- a/discovery/dnssearch.py +++ b/discovery/dnssearch.py @@ -12,6 +12,7 @@ def __init__(self, range, verbose=True): self.verbose = verbose try: DNS.ParseResolvConf("/etc/resolv.conf") + #DNS.ParseResolvConf("/etc/resolv.conf") nameserver = DNS.defaults['server'][0] except: print("Error in DNS resolvers") @@ -83,6 +84,7 @@ def __init__(self, domain, dnsserver, verbose=False): def getdns(self, domain): DNS.ParseResolvConf("/etc/resolv.conf") + #DNS.ParseResolvConf("/etc/resolv.conf") # nameserver=DNS.defaults['server'][0] dom = domain if self.subdo == True: @@ -107,7 +109,7 @@ def getdns(self, domain): #check if variable is defined test except NameError: - print("Error test is not defined") + print("Error, test is not defined") sys.exit() if test.header['status'] != "NOERROR": print("Error")