def findPorts(self, address): h = Helper() # Omite los rangos locales # TODO: Puede ser requerido para pentesting. if h.ip_validate(address) is not None: if (IP(address).iptype() in ['PRIVATE', 'LOOPBACK']): return interface = Interface() tcpHelper = TCPHelper() # Dirección IP local donde llegarán los paquetes localIpAddress = interface.getSourceAddress() # Rango de puertos a revisar for port in range(1, 65535): # Envía un paquete syn a modo de señuelo mientras que el hilo de # proceso del socket a escucha está listo para recibir las # respuestas. try: tcpHelper.sendSyn(sourceIp=localIpAddress, toAddress=address, dstPort=port) except Exception as e: # Ok, puede suceder, es normal. # Por alguna extraña razón el socket en cierto punto arroja un # acceso denegado indicando que no tengo permisos para la # operación a pesar de tener privilegios elevados, pero de todas # maneras el paquete se envía sin problemas. pass
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 run_server(langbuf, param): h = Helper() c = param.split(':') ip = '127.0.0.1' port = 3000 debug = 'on' if len(c): for v in c: if h.ip_validate(v) is not None: ip = v elif h.port_validate(v) is not None: port = v else: if v in ['on', 'off']: debug = v http = HttpServer(ip, port, debug) http.start()
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