def findHttpServices(self, address): h = Helper() if ((h.ip_validate(address) is None) and (h.hostname_validate(address) is None)): return {} th = [] for tn in range(1, 100): t = threading.Thread(target=self.check, kwargs={'address': address}) t.setDaemon(True) th.append(t) for t in th: t.start() t.join() result = { 'hostname': address, 'addresses': h.resolve_dns(address), 'webservices': self.webservices } return result
def filter(self, address): h = Helper() # Direcciones IP que se está buscando actualmente, para recibir desde el # sniffer. self.remoteIpAddressStack = h.resolve_dns(address) # Corre el sniffer en busca de los paquetes de respuesta de puertos threadHandler = threading.Thread(target=self.sniffer) # Previene la impresión de mensajes de error al final del hilo # principal cuando se cancela el progreso con Conrol+C. threadHandler.setDaemon(True) # Ejecuta el hilo de proceso threadHandler.start() for ip in self.remoteIpAddressStack: # Realiza la búsqueda de puertos self.findPorts(address) # Iteración cada x segundos time.sleep(10) self.canContinue = False self.socketHandlerBind.close() # Espera a que finalice el hilo de proceso del sniffer. threadHandler.join() return self.result
def findPorts(self, ipaddress): h = Helper() # Omite los rangos locales # TODO: Puede ser requerido para pentesting. if h.ip_validate(ipaddress) is not None: if (IP(ipaddress).iptype() in ['PRIVATE', 'LOOPBACK']): return {'ports': []} self.ips = h.resolve_dns(ipaddress) response = [] for ip in self.ips: if ip == ipaddress: continue result = {'record': {'ip': []}} self.stack = list(reversed(range(1, 65535))) result['record']['ip'] = ip result['record']['ports'] = [] # Punteros de los hilos de proceso threadsHandlers = [] # Linux por defecto soporta 1024 threads a menos que se modifique # los límites en /etc/security/limits.conf # 500 hilos por defecto for threadNumber in range(1, 500): # Puntero del hilo de proceso threadHandler = threading.Thread(target=self.threadCheck, kwargs={'ipaddress': ip}) # Previene la impresión de mensajes de error al final del hilo # principal cuando se cancela el progreso con Conrol+C. threadHandler.setDaemon(True) # Obtiene el identificador único del hilo de proceso threadsHandlers.append(threadHandler) # Ejecuta el hilo de proceso threadHandler.start() for threadHandler in threadsHandlers: # Espera a que finalice el hilo de proceso threadHandler.join() result['record']['ports'] = sorted(self.ports) response.append(result) self.ports = [] return response