Compare commits

...

2 Commits

Author SHA1 Message Date
7f601e84a7 Add mac changer 2024-01-26 19:40:27 +01:00
7dddcfaa28 Add port scan 2024-01-26 18:13:36 +01:00
4 changed files with 286 additions and 1 deletions

View 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()

View 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()

View File

@ -0,0 +1,100 @@
#!/usr/bin/env python3
"""
Cambiar la dirección mac
"""
import argparse
import re
import signal
import subprocess
import sys
from termcolor import colored
def def_handler(sig, frame):
print(colored(
f'\n[!] Saliendo del programa...', 'red'
))
sys.exit(1)
signal.signal(signal.SIGINT, def_handler)
def get_arguments():
parser = argparse.ArgumentParser(
description='Herramienta para cambiar la dirección mac'
)
parser.add_argument(
'-i', '--interface',
dest='interface',
help='Nombre de la interfaz de red',
required=True
)
parser.add_argument(
'-m', '--mac',
dest='new_mac',
help='Nueva dirección mac',
required=True
)
return parser.parse_args()
def is_valid_input(interface, new_mac):
is_valid_interface = re.match(
r'^[w|e][n|l][o]\d{1,2}$', interface
)
is_valid_mac = re.match(
r'^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$', new_mac
)
if not is_valid_interface:
print(colored(
f'\n[!] El nombre de la interfaz de red no es válida', 'red'
))
if not is_valid_mac:
print(colored(
f'\n[!] La dirección mac no es válida', 'red'
))
return is_valid_interface and is_valid_mac
def change_mac_address(interface, new_mac):
if is_valid_input(interface, new_mac):
print(colored(
f'\n[+] Cambiando la dirección mac de {interface} a {new_mac}', 'blue'
))
subprocess.run(["sudo", "ifconfig", interface, "down"])
subprocess.run(["sudo", "ifconfig", interface, "hw", "ether", new_mac])
subprocess.run(["sudo", "ifconfig", interface, "up"])
print(colored(
f'\n[+] Dirección mac cambiada correctamente', 'green'
))
def main():
args = get_arguments()
change_mac_address(args.interface, args.new_mac)
if __name__ == '__main__':
main()

View File

@ -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/) |