
https://github.com/joseluisinigo/extractipandports-nmap
Este código es un script de Python que extrae las direcciones IP y los puertos abiertos de un archivo de salida de Nmap. Nmap es un escáner de red muy utilizado para mapear dispositivos y servicios en una red. El archivo de salida de Nmap contiene información detallada sobre los dispositivos escaneados, incluyendo las direcciones IP y los puertos abiertos.
El script comienza importando la librería "re" (expresiones regulares) que se utiliza para buscar patrones en el texto. Luego se define la función "extract_ips_ports" que toma como entrada el archivo de salida de Nmap como una cadena, y utiliza expresiones regulares para buscar las direcciones IP y los puertos abiertos.
Las direcciones IP se identifican utilizando la expresión regular "Nmap scan report for (.*)", que busca la cadena "Nmap scan report for" seguida de cualquier carácter. Los puertos abiertos se identifican utilizando la expresión regular "^(\d+)", que busca cualquier dígito al principio de una línea. El script crea entonces un diccionario con las direcciones IP como claves y los puertos abiertos como valores.
La función principal lee el archivo de salida de Nmap y llama a la función "extract_ips_ports", pasando el contenido del archivo como una cadena. El diccionario resultante se escribe entonces en un archivo de salida 'extract.txt' y se imprime en la consola, en el formato de IP seguida de puertos separados por comas.
import re
def extract_ips_ports(text):
ip_pattern = "Nmap scan report for (.*)"
port_pattern = "^(\d+)"
ips_ports = {}
for line in text.split("\n"):
ip_match = re.match(ip_pattern, line)
if ip_match:
ip = ip_match.group(1)
ports = []
continue
port_match = re.match(port_pattern, line)
if port_match:
port = port_match.group(1).replace("/tcp", "").replace("/udp", "")
ports.append(port)
if not line.strip():
ips_ports[ip] = ports
return ips_ports
def main():
with open('nmapoutput.txt', 'r') as f:
text = f.read()
ips_ports = extract_ips_ports(text)
with open('extract.txt', 'w') as f:
for ip, ports in ips_ports.items():
ports_str = ",".join(ports)
f.write(f"{ip} {ports_str}\n")
print(f"{ip} {ports_str}")
if __name__ == '__main__':
main()