MCPcopy Create free account
hub / github.com/MorDavid/NetworkHound / resolve_single_computer

Method resolve_single_computer

core/dns_resolver.py:76–198  ·  view source on GitHub ↗

Enhanced IP resolution for a single computer using multiple methods

(self, computer, test_connectivity=False)

Source from the content-addressed store, hash-verified

74 return False
75
76 def resolve_single_computer(self, computer, test_connectivity=False):
77 """Enhanced IP resolution for a single computer using multiple methods"""
78 hostname = computer['dns_hostname'] if computer['dns_hostname'] else computer['computer_name']
79 if not hostname:
80 return {'ips': [], 'methods': [], 'connectivity': 'Unknown', 'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
81
82 logger.debug(f"Resolving: {hostname}")
83 computer_ips = []
84 resolution_methods = []
85
86 # Method 1: Standard socket resolution (primary IP)
87 try:
88 ip_address = socket.gethostbyname(hostname)
89 if ip_address not in computer_ips and self._is_valid_ip(ip_address):
90 computer_ips.append(ip_address)
91 resolution_methods.append("socket")
92 logger.debug(f"Socket resolved {hostname} -> {ip_address}")
93 except socket.gaierror as e:
94 logger.debug(f"Socket failed for {hostname}: {e}")
95
96 # Method 2: nslookup with specific DNS server (authoritative)
97 if self.dns_server:
98 try:
99 nslookup_cmd = ['nslookup']
100 # Add TCP flag if requested (some versions of nslookup support -vc for TCP)
101 if self.use_tcp:
102 nslookup_cmd.extend(['-vc']) # -vc = virtual circuit (TCP)
103 nslookup_cmd.extend([hostname, self.dns_server])
104
105 result = subprocess.run(nslookup_cmd,
106 capture_output=True, text=True, timeout=10)
107 if result.returncode == 0:
108 lines = result.stdout.split('\n')
109 for line in lines:
110 if 'Address:' in line and not line.startswith('Server:'):
111 ip_address = line.split('Address:')[1].strip()
112 if (ip_address and not ip_address.endswith('#53') and
113 ip_address not in computer_ips and self._is_valid_ip(ip_address)):
114 computer_ips.append(ip_address)
115 method_name = "nslookup-tcp" if self.use_tcp else "nslookup"
116 resolution_methods.append(method_name)
117 logger.debug(f"{method_name} found {hostname} -> {ip_address}")
118 except (subprocess.TimeoutExpired, subprocess.SubprocessError) as e:
119 logger.debug(f"nslookup failed for {hostname}: {e}")
120
121 # Method 3: dnspython library (if available)
122 if DNS_AVAILABLE:
123 try:
124 import dns.resolver
125 import dns.query
126 import dns.message
127 import dns.rdatatype
128
129 resolver = dns.resolver.Resolver()
130 if self.dns_server:
131 resolver.nameservers = [self.dns_server]
132
133 # Configure TCP if requested

Callers 1

Calls 2

_is_valid_ipMethod · 0.95
test_connectivityMethod · 0.95

Tested by

no test coverage detected