
Punto de acceso Wi‑Fi abierto no autorizado para captura de tráfico en entornos controlados. Usa hostapd (modo AP nativo nl80211) + dnsmasq (DHCP/DNS) + iptables NAT hacia una interfaz de enlace ascendente.

iw phy → Supported interface modes: ... AP).hostapd, dnsmasq, iw, iptables, rfkill, wireshark.Edita las variables al principio de fake_ap.sh.
INTERNET_IFACE — enlace ascendente con internetEsta es la interfaz que ya tiene una ruta por defecto (Ethernet, adaptador USB, cliente Wi‑Fi, etc.). Los nombres varían según la máquina (eth0, enp3s0, wlp3s0, …).
ip route | grep default
# default via 192.168.1.1 dev enp3s0 ...
# ^^^^^^
# use this name
Establece INTERNET_IFACE a la interfaz después de dev.
AP_IFACE — tarjeta inalámbrica para el AP falsoUsa la interfaz Wi‑Fi física de iw dev. A menudo es wlan0, pero puede ser wlp2s0 o similar.
iw dev
# phy#0
# Interface wlan0
# ^^^^^
# use this name
Elige la interfaz en el phy que soporte el modo AP (iw phy → Supported interface modes: ... AP). No uses puentes Docker (docker0, br-*) ni interfaces virtuales (veth*).
FAKE_SSID="Free_Public_WiFi"
CHANNEL="6"
INTERNET_IFACE="enp3s0"
AP_IFACE="wlan0"
GATEWAY_IP="10.0.0.1"
sudo ./fake_ap.sh
El script:
wlan0) en modo gestionado en el phy inalámbrico.hostapd con un SSID abierto en el canal elegido.dnsmasq (DHCP + reenviador DNS a 1.1.1.1 / 8.8.8.8).sudo journalctl -t dnsmasq -f # concesiones DHCP + cada consulta DNS del cliente
sudo wireshark -i wlan0 # captura el tráfico L3 del cliente (usa tu AP_IFACE)
sudo iw dev wlan0 station dump # estado L2 del cliente (RSSI, tasa, tráfico)
cat /var/lib/misc/dnsmasq.leases # concesiones activas
Abre Wireshark en tu interfaz AP (p. ej. wlan0) y aplica el filtro de visualización que necesites.
| Qué aprendes | Filtro |
|---|---|
| Solo SYN (nuevas conexiones TCP) | tcp.flags.syn == 1 && tcp.flags.ack == 0 |
| Handshakes TLS en curso |
# tráfico cifrado de un cliente + dominios contactados
ip.src == 10.0.0.42 && (dns || tls.handshake.type == 1)
# descubrimiento pasivo del modelo de teléfono
ip.src == 10.0.0.42 && (dhcp || mdns || ssdp || nbns)
# tráfico hacia un dominio específico (p. ej. redes sociales)
tls.handshake.extensions_server_name contains "instagram"
# excluir ruido de broadcast/multicast
not (eth.dst == ff:ff:ff:ff:ff:ff) && not (ip.dst >= 224.0.0.0 && ip.dst <= 239.255.255.255)
sudo tshark -i wlan0 -Y 'tls.handshake.type==1 && ip.src==10.0.0.42' \
-T fields -e tls.handshake.extensions_server_name
sudo tcpdump -i wlan0 -w /tmp/capture.pcap
journalctl -t dnsmasq -f sin Wireshark.MIT — consulta LICENSE.
Úsalo solo en redes y dispositivos que sean tuyos o sobre los que tengas autorización por escrito para realizar pruebas. Interceptar el tráfico de otros es ilegal.
| Qué aprendes | Filtro |
|---|
| Hostname y proveedor (opciones DHCP 12/55/60) | dhcp |
| Nombre del dispositivo + servicios (Bonjour/AirPlay/Chromecast) | mdns |
| Hostname de Windows / SMB | nbns |
| Modelo del dispositivo (UPnP) | ssdp |
| Proveedor según la MAC | eth.addr == aa:bb:cc:dd:ee:ff |
| Todo el tráfico de un cliente | ip.addr == 10.0.0.X |
| Qué aprendes | Filtro |
|---|
| Dominios resueltos vía DNS | dns.qry.name |
| Dominios HTTPS (SNI en ClientHello) | tls.handshake.type == 1 |
| Respuestas DNS con IPs resueltas | dns.flags.response == 1 |
| Conexiones QUIC (Google, YouTube, Meta) | quic |
| HTTP plano (URL completa) | http.request |
| User-Agent de la app/navegador | http.user_agent |
tls.handshake |
| Transferencias grandes (HTTP/2 sobre TLS) | tcp.len > 1000 |
| ICMP (pings de diagnóstico del cliente) | icmp |
| Qué aprendes | Filtro |
|---|
| POST HTTP (inicio de sesión en sitios http://) | http.request.method == "POST" |
| Credenciales FTP | ftp.request.command in {"USER","PASS"} |
| Telnet | telnet |
| SMTP/IMAP/POP3 planos | `smtp |
| Cadenas sospechosas en el payload | frame contains "password" |