Parte: 0 — Fundamentos y prerrequisitos · Fuente: Scapy Documentation / Black Hat Python ⏱️ Duración estimada: 120 min · Nivel: Fundamentos
Construir, enviar, capturar y diseccionar paquetes de red a bajo nivel con Scapy. Al terminar podrás forjar paquetes capa por capa, implementar tu propio ping y SYN scan, esnifar tráfico y automatizar pruebas de red, uniendo todo lo aprendido sobre TCP/IP y Python.
Al finalizar, el alumno podrá:
send, sr, sr1, srp.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Modelo de capas en Scapy | / apila capas |
| 2 | Construcción de paquetes | Control total de cabeceras |
| 3 | Envío y recepción | send/sr/sr1/srp |
| 4 | Sniffing | Capturar y procesar en vivo |
| 5 | Filtros BPF | Reducir ruido en la captura |
| 6 | SYN scan | Escaneo half-open a mano |
| 7 | ARP/ICMP | Descubrimiento de red |
| 8 | Análisis de respuestas | Interpretar flags y códigos |
IP()/TCP() apila capas con el operador /.sr pero a nivel de capa 2 (Ethernet). Clave: necesario para ARP.tcp port 80). Clave: evita procesar tráfico irrelevante.Instala Scapy en tu entorno virtual de Kali:
pip install scapy # o: sudo apt install python3-scapy
sudo scapy # consola interactiva (necesita root para enviar)
Trabaja siempre en la red interna del laboratorio. Ten Wireshark abierto en paralelo para verificar que tus paquetes forjados salen como esperas.
python
from scapy.all import *
pkt = IP(dst="10.10.10.6")/ICMP()
pkt.show()
sr1:python
resp = sr1(IP(dst="10.10.10.6")/ICMP(), timeout=2, verbose=0)
print("Vivo" if resp else "Sin respuesta")
python
ans, _ = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="10.10.10.0/24"),
timeout=2, verbose=0)
for _, r in ans: print(r.psrc, r.hwsrc)
python
r = sr1(IP(dst="10.10.10.6")/TCP(dport=22, flags="S"), timeout=2, verbose=0)
if r and r.haslayer(TCP):
print("abierto" if r[TCP].flags == 0x12 else "cerrado")
Envía luego un RST para cerrar limpiamente. 5. Sniffing con filtro BPF:
python
pkts = sniff(filter="tcp port 80", count=10, timeout=15)
pkts.summary()
⚠️ Nota ética: forjar y enviar paquetes se hace solo en tu laboratorio aislado. Inyectar tráfico en redes ajenas sin autorización es ilegal y puede causar daños.
traceroute manual.Implementa scapyscan.py, un escáner SYN con Scapy que reciba un objetivo y una lista de puertos, clasifique cada puerto como abierto/cerrado/filtrado según la respuesta, cierre con RST los que respondan SYN-ACK, y muestre un informe. Verifica con Wireshark que los paquetes salen correctos.
Criterio de aceptación: el clasificador coincide con nmap -sS sobre los mismos puertos de tu VM víctima (abierto/cerrado/filtrado), y en Wireshark se observa el patrón SYN → SYN-ACK → RST para los puertos abiertos. Ejecuta con privilegios y sin dejar conexiones a medias.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
PermissionError / no envía nada |
Scapy necesita root para raw sockets. Ejecuta con sudo. |
| Interfaz equivocada | Scapy usa la ruta por defecto. Especifica iface= si hace falta. |
sr1 devuelve None siempre |
Timeout corto o host filtrado. Sube el timeout y verifica conectividad. |
| Los paquetes no aparecen en Wireshark | Filtras mal o miras otra interfaz. Ajusta el filtro y la NIC. |
| El SYN scan deja conexiones a medias | No enviaste el RST. Cierra tú la conexión tras el SYN-ACK. |
❓ ¿Para qué usar Scapy si existe nmap? Scapy da control total del paquete: puedes forjar cabeceras arbitrarias, probar comportamientos anómalos y construir herramientas a medida que nmap no cubre. Es didáctico y flexible.
❓ ¿Por qué necesita root? Enviar paquetes forjados requiere raw sockets, una operación privilegiada. Por eso también es una capacidad potente que debe usarse con responsabilidad.
❓ ¿Scapy sirve para defensa? Sí: prototipar detecciones, generar tráfico de prueba para un IDS, o analizar capturas. No es solo ofensivo.
❓ ¿Puedo hacer sniffing sin promiscuo? Verás tu propio tráfico, pero para capturar el de otros hosts en una LAN conmutada necesitarías port mirroring o MITM (y autorización). Recuerda el marco legal.
Clase 016 — Python para seguridad: sockets y programación de red
Clase 018 — Git y control de versiones para profesionales de seguridad