
AP Wi-Fi aperto non autorizzato per l'acquisizione controllata del traffico utilizzando hostapd, dnsmasq e iptables NAT. Consente il monitoraggio dei client in tempo reale, la registrazione DNS/DHCP e l'analisi del traffico tramite Wireshark.
AP Wi‑Fi aperto falso per la cattura del traffico in ambienti controllati. Usa hostapd (modalità AP nl80211 nativa) + dnsmasq (DHCP/DNS) + iptables NAT verso un'interfaccia uplink.

iw phy → Supported interface modes: ... AP).hostapd, dnsmasq, iw, iptables, rfkill, wireshark.Modifica le variabili all'inizio di fake_ap.sh.
INTERNET_IFACE — uplink con internetQuesta è l'interfaccia che ha già una route predefinita (Ethernet, adattatore USB, client Wi‑Fi, ecc.). I nomi variano in base alla macchina (eth0, enp3s0, wlp3s0, …).
ip route | grep default
# default via 192.168.1.1 dev enp3s0 ...
# ^^^^^^
# use this name
Imposta INTERNET_IFACE sull'interfaccia dopo dev.
AP_IFACE — scheda wireless per il falso APUsa l'interfaccia Wi‑Fi fisica da iw dev. Spesso wlan0, ma può essere wlp2s0 o simile.
iw dev
# phy#0
# Interface wlan0
# ^^^^^
# use this name
Scegli l'interfaccia sul phy che supporta la modalità AP (iw phy → Supported interface modes: ... AP). Non usare bridge Docker (docker0, br-*) o interfacce virtuali (veth*).
FAKE_SSID="Free_Public_WiFi"
CHANNEL="6"
INTERNET_IFACE="enp3s0"
AP_IFACE="wlan0"
GATEWAY_IP="10.0.0.1"
sudo ./fake_ap.sh
Lo script:
wlan0) in modalità gestita sul phy wireless.hostapd con un SSID aperto sul canale scelto.dnsmasq (DHCP + forwarder DNS verso 1.1.1.1 / 8.8.8.8).sudo journalctl -t dnsmasq -f # DHCP leases + every client DNS query
sudo wireshark -i wlan0 # capture client L3 traffic (use your AP_IFACE)
sudo iw dev wlan0 station dump # client L2 state (RSSI, rate, traffic)
cat /var/lib/misc/dnsmasq.leases # active leases
Apri Wireshark sull'interfaccia AP (es. wlan0) e applica il filtro di visualizzazione che ti serve.
| Cosa impari | Filtro |
|---|---|
| Solo SYN (nuove connessioni TCP) | tcp.flags.syn == 1 && tcp.flags.ack == 0 |
| Handshake TLS in corso |
# one client's encrypted traffic + contacted domains
ip.src == 10.0.0.42 && (dns || tls.handshake.type == 1)
# passive phone model discovery
ip.src == 10.0.0.42 && (dhcp || mdns || ssdp || nbns)
# traffic to a specific domain (e.g. social)
tls.handshake.extensions_server_name contains "instagram"
# exclude broadcast/multicast noise
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 senza Wireshark.MIT — vedi LICENSE.
Utilizzare solo su reti e dispositivi di tua proprietà o per i quali hai autorizzazione scritta per test. Intercettare il traffico altrui è illegale.
| Cosa impari | Filtro |
|---|
| Nome host e vendor (opzioni DHCP 12/55/60) | dhcp |
| Nome dispositivo + servizi (Bonjour/AirPlay/Chromecast) | mdns |
| Nome host Windows / SMB | nbns |
| Modello dispositivo (UPnP) | ssdp |
| Vendor dal MAC | eth.addr == aa:bb:cc:dd:ee:ff |
| Tutto il traffico da un client | ip.addr == 10.0.0.X |
| Cosa impari | Filtro |
|---|
| Domini risolti tramite DNS | dns.qry.name |
| Domini HTTPS (SNI in ClientHello) | tls.handshake.type == 1 |
| Risposte DNS con IP risolti | dns.flags.response == 1 |
| Connessioni QUIC (Google, YouTube, Meta) | quic |
| HTTP semplice (URL completo) | http.request |
| User-Agent di app/browser | http.user_agent |
tls.handshake| Grandi trasferimenti (HTTP/2 su TLS) | tcp.len > 1000 |
| ICMP (ping diagnostici client) | icmp |
| Cosa impari | Filtro |
|---|
| HTTP POST (login su siti http://) | http.request.method == "POST" |
| Credenziali FTP | ftp.request.command in {"USER","PASS"} |
| Telnet | telnet |
| SMTP/IMAP/POP3 in chiaro | `smtp |
| Stringhe sospette nel payload | frame contains "password" |