Add port scan
This commit is contained in:
parent
386c544294
commit
7dddcfaa28
39
python-ofensivo/12_escaner_puertos/port_scanner_01.py
Normal file
39
python-ofensivo/12_escaner_puertos/port_scanner_01.py
Normal file
@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env/ python3
|
||||
"""
|
||||
Escaner de puertos
|
||||
"""
|
||||
|
||||
import socket as s
|
||||
import os
|
||||
|
||||
|
||||
os.system("clear")
|
||||
print("""
|
||||
##################
|
||||
Escaner de puertos
|
||||
##################
|
||||
""")
|
||||
os.system("sleep 0.6")
|
||||
|
||||
host = input("\n[+] Introduce la IP a escanear: ")
|
||||
port = int(input("[+] Introduce el puerto a escanear: "))
|
||||
|
||||
def port_scanner():
|
||||
|
||||
sock = s.socket(s.AF_INET, s.SOCK_STREAM)
|
||||
sock.settimeout(0.9)
|
||||
|
||||
if not sock.connect_ex((host, port)):
|
||||
print(f"[+] El puerto {port} está abierto")
|
||||
else:
|
||||
print(f"[!] El puerto {port} está cerrado")
|
||||
|
||||
sock.close()
|
||||
|
||||
|
||||
def main():
|
||||
port_scanner()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
145
python-ofensivo/12_escaner_puertos/port_scanner_02.py
Normal file
145
python-ofensivo/12_escaner_puertos/port_scanner_02.py
Normal file
@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env/ python3
|
||||
"""
|
||||
Escaner de puertos
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import socket as s
|
||||
import signal
|
||||
import sys
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from termcolor import colored
|
||||
|
||||
open_sockets = []
|
||||
|
||||
|
||||
def def_handler(sig, frame):
|
||||
"""
|
||||
Función para manejar la señal SIGINT (Ctrl + C).
|
||||
"""
|
||||
|
||||
print(colored("\n[!] Saliendo...", "blue"))
|
||||
|
||||
for sock in open_sockets:
|
||||
|
||||
sock.close()
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
signal.signal(signal.SIGINT, def_handler) # CTRL + C
|
||||
|
||||
|
||||
def get_arguments():
|
||||
"""
|
||||
Función para obtener los argumentos de la línea de comandos.
|
||||
"""
|
||||
|
||||
parser = argparse.ArgumentParser(description="Escaner de puertos TCP")
|
||||
parser.add_argument(
|
||||
"-t", "--target", dest="target", required=True,
|
||||
help="IP objetivo a escanear (Ej: -t 192.168.1.1)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-p", "--port", dest="port", required=True,
|
||||
help="""Rango de puertos a escanear
|
||||
(Ej: -p 80 or -p 50-100 or -p 80,443,8080)"""
|
||||
)
|
||||
options = parser.parse_args()
|
||||
|
||||
return options.target, options.port
|
||||
|
||||
|
||||
def port_scanner(port, host):
|
||||
"""
|
||||
Función para escanear un puerto en un host dado.
|
||||
"""
|
||||
|
||||
with s.socket(s.AF_INET, s.SOCK_STREAM) as sock:
|
||||
|
||||
try:
|
||||
|
||||
sock.settimeout(2)
|
||||
|
||||
open_sockets.append(sock)
|
||||
|
||||
sock.connect((host, port))
|
||||
|
||||
sock.sendall(b"HEAD / HTTP/1.0\r\n\r\n")
|
||||
response = sock.recv(1024)
|
||||
response = response.decode(errors="ignore").split("\n")
|
||||
|
||||
if response:
|
||||
print(
|
||||
colored(
|
||||
f"\n[+] El puerto {port} está abierto", "green"
|
||||
)
|
||||
)
|
||||
# print(
|
||||
# colored(
|
||||
# f"\t[+] Respuesta del puerto {port}: {response}",
|
||||
# "blue"
|
||||
# )
|
||||
# )
|
||||
|
||||
for line in response:
|
||||
print(colored(line, "grey"))
|
||||
|
||||
else:
|
||||
print(
|
||||
colored(
|
||||
f"\n[+] El puerto {port} está abierto",
|
||||
"green"
|
||||
)
|
||||
)
|
||||
|
||||
except (s.timeout, ConnectionRefusedError):
|
||||
pass
|
||||
|
||||
finally:
|
||||
sock.close()
|
||||
|
||||
|
||||
def scan_ports(ports, target):
|
||||
"""
|
||||
Función para escanear una lista de puertos en un host dado.
|
||||
"""
|
||||
|
||||
with ThreadPoolExecutor(max_workers=100) as executor:
|
||||
|
||||
executor.map(lambda port: port_scanner(port, target), ports)
|
||||
|
||||
|
||||
def parse_ports(ports_str):
|
||||
"""
|
||||
Función para analizar la cadena de puertos y devolver una secuencia de puertos.
|
||||
"""
|
||||
|
||||
if "-" in ports_str:
|
||||
|
||||
start_port, end_port = map(int, ports_str.split("-"))
|
||||
|
||||
return range(start_port - 1, end_port + 1)
|
||||
|
||||
elif "," in ports_str:
|
||||
|
||||
return map(int, ports_str.split(","))
|
||||
|
||||
else:
|
||||
|
||||
return int(ports_str),
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Función principal del programa.
|
||||
"""
|
||||
|
||||
target, ports_str = get_arguments()
|
||||
ports = parse_ports(ports_str)
|
||||
|
||||
scan_ports(ports, target)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@ -13,7 +13,7 @@ Quizá encuentres aquí cosas que no están en el vídeo, o viceversa, son apunt
|
||||
|
||||
| Ejercicios y apuntes |
|
||||
| -------------------------------------------------------------------- |
|
||||
| 0. [Cajón de sastre de ejercicios](./00_ejercicios/) |
|
||||
| 0. [Cajón de sastre de ejercicios](./00_ejercicios/) |
|
||||
| 1. [Ejemplos de oneliner en python](./01_oneliner/README.md) |
|
||||
| 2. [Shebang y convenios](./02_shebang_convenios/README.md) |
|
||||
| 3. [Proyecto biblioteca](./03_proyecto_biblioteca/) |
|
||||
@ -25,3 +25,4 @@ Quizá encuentres aquí cosas que no están en el vídeo, o viceversa, son apunt
|
||||
| 9. [Bloc de notas](./09_bloc_notas/) |
|
||||
| 10. [Calculadora](./10_calculadora/) |
|
||||
| 11. [Chat cifrado con E2E](./11_chat_cifrado_E2E/) |
|
||||
| 12 [Escaner de puertos](./12_escaner_puertos/) |
|
||||
|
Loading…
Reference in New Issue
Block a user