
不正なオープンWi-Fiアクセスポイントで、hostapd、dnsmasq、iptables NATを用いて制御されたトラフィックキャプチャを実現。リアルタイムのクライアント監視、DNS/DHCPログ記録、Wiresharkベースのトラフィック分析を可能にします。
wiresharkfake_ap.shの先頭にある変数を編集してください。
INTERNET_IFACE — インターネットへのアップリンクこれはすでにデフォルトルートを持つインターフェースです(イーサネット、USBアダプター、Wi‑Fiクライアントなど)。名前はマシンによって異なります(eth0、enp3s0、wlp3s0、…)。
ip route | grep default
# default via 192.168.1.1 dev enp3s0 ...
# ^^^^^^
# use this name
INTERNET_IFACE を dev の後のインターフェース名に設定します。
AP_IFACE — 偽装AP用のワイヤレスカードiw dev から物理Wi‑Fiインターフェースを使用します。多くの場合 wlan0 ですが、wlp2s0 などの場合もあります。
iw dev
# phy#0
# Interface wlan0
# ^^^^^
# use this name
APモードをサポートするphy上のインターフェースを選択します(iw phy → Supported interface modes: ... AP)。Dockerブリッジ(docker0、br-*)や仮想インターフェース(veth*)は使用しないでください。
FAKE_SSID="Free_Public_WiFi"
CHANNEL="6"
INTERNET_IFACE="enp3s0"
AP_IFACE="wlan0"
GATEWAY_IP="10.0.0.1"
sudo ./fake_ap.sh
スクリプトの動作:
wlan0)をマネージドモードで作成します。hostapdを起動します。dnsmasq(DHCP + DNSフォワーダー(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
WiresharkをAPインターフェース(例:wlan0)で開き、必要な表示フィルターを適用します。
| 学習内容 | フィルター |
|---|---|
| ホスト名とベンダー(DHCPオプション12/55/60) | dhcp |
| デバイス名 + サービス(Bonjour/AirPlay/Chromecast) | mdns |
| Windowsホスト名 / SMB | nbns |
| デバイスモデル(UPnP) | ssdp |
| MACからのベンダー | eth.addr == aa:bb:cc:dd:ee:ff |
| 1台のクライアントからの全トラフィック | ip.addr == 10.0.0.X |
| 学習内容 | フィルター |
|---|---|
| DNSで解決されたドメイン | dns.qry.name |
| HTTPSドメイン(ClientHelloのSNI) | tls.handshake.type == 1 |
| 解決されたIPを含むDNSレスポンス | dns.flags.response == 1 |
| QUIC接続(Google、YouTube、Meta) | quic |
| 平文HTTP(完全なURL) | http.request |
| アプリ/ブラウザのUser-Agent | http.user_agent |
| 学習内容 | フィルター |
|---|---|
| SYNのみ(新しいTCP接続) | tcp.flags.syn == 1 && tcp.flags.ack == 0 |
| 進行中のTLSハンドシェイク | tls.handshake |
| 大規模転送(TLS上のHTTP/2) | tcp.len > 1000 |
| ICMP(クライアント診断ping) | icmp |
| 学習内容 | フィルター |
|---|---|
| HTTP POST(http://サイトへのログイン) | http.request.method == "POST" |
| FTP認証情報 | ftp.request.command in {"USER","PASS"} |
| Telnet | telnet |
| 平文SMTP/IMAP/POP3 | `smtp |
| ペイロード内の不審な文字列 | frame contains "password" |
# 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で確認できます。MIT — LICENSEを参照。
所有している、またはテストのための書面による許可を得ているネットワークとデバイスでのみ使用してください。他人のトラフィックを傍受することは違法です。