from scapy.all import sniff from scapy.layers.inet import IP, TCP, UDP, ICMP from scapy.packet import Raw import os import datetime def save_packet_to_file(packet): """Guarda el paquete en un archivo de registro para análisis posterior.""" with open("packet_log.txt", "a") as log_file: log_file.write(f"{datetime.datetime.now()} - {packet.summary()}\n") log_file.write(f"{packet.show(dump=True)}\n\n") def packet_callback(packet): """Procesa y muestra información del paquete capturado.""" if IP in packet: ip_layer = packet[IP] print(f"\n[+] Capturado un paquete:") print(f" Origen: {ip_layer.src}") print(f" Destino: {ip_layer.dst}") print(f" Protocolo: {ip_layer.proto}") if TCP in packet: tcp_layer = packet[TCP] print(f" Puerto origen: {tcp_layer.sport}") print(f" Puerto destino: {tcp_layer.dport}") elif UDP in packet: udp_layer = packet[UDP] print(f" Puerto origen: {udp_layer.sport}") print(f" Puerto destino: {udp_layer.dport}") elif ICMP in packet: print(" Tipo de ICMP detectado.") if Raw in packet: payload = packet[Raw].load.decode(errors="ignore") print(f" Datos (Raw): {payload}") if "youtube.com" in payload or "YouTube" in payload: print(f"\n[!!!] Posible enlace de YouTube detectado:") print(payload) print(f"[Paquete completo]: {packet.summary()}") # Guardar el paquete en un archivo save_packet_to_file(packet) def start_sniffer(): """Inicia la captura de paquetes.""" print("Iniciando captura de paquetes. Presiona Ctrl+C para detener.") print("Opciones disponibles:") print("1. Capturar todo el tráfico IP") print("2. Filtrar por TCP") print("3. Filtrar por UDP") print("4. Filtrar por ICMP") print("5. Salir") choice = input("Selecciona una opción (1-5): ") try: if choice == "1": sniff(prn=packet_callback, filter="ip", store=0) elif choice == "2": sniff(prn=packet_callback, filter="tcp", store=0) elif choice == "3": sniff(prn=packet_callback, filter="udp", store=0) elif choice == "4": sniff(prn=packet_callback, filter="icmp", store=0) elif choice == "5": print("Saliendo del programa.") return else: print("Opción no válida. Intenta de nuevo.") start_sniffer() except KeyboardInterrupt: print("\nCaptura detenida.") if __name__ == "__main__": if os.path.exists("packet_log.txt"): os.remove("packet_log.txt") start_sniffer()