RiccardoCataldi/access-point

GitHub: RiccardoCataldi/access-point

该工具利用 hostapd 和 dnsmasq 在 Linux 上快速创建虚假开放 Wi-Fi 接入点,用于受控环境中的流量捕获与客户端行为分析。

Stars: 6 | Forks: 1

# 虚假 Access Point 用于在受控环境中捕获流量的恶意开放 Wi-Fi AP。使用 `hostapd`(原生 nl80211 AP 模式)+ `dnsmasq`(DHCP/DNS)+ `iptables` NAT 转发至上行链路接口。 ![虚假 AP 运行截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ca20cb2cb3032631.png) ## 要求 - Linux,root 权限。 - 支持 AP 模式的无线网卡(`iw phy` → `Supported interface modes: ... AP`)。 - 软件包:`hostapd`、`dnsmasq`、`iw`、`iptables`、`rfkill`、`wireshark`。 ## 配置 编辑 `fake_ap.sh` 顶部的变量。 ### `INTERNET_IFACE` — 带有互联网的上行链路 这是已经具有默认路由的接口(以太网、USB 适配器、Wi‑Fi 客户端等)。名称因机器而异(`eth0`、`enp3s0`、`wlp3s0`,……)。 ``` ip route | grep default # default via 192.168.1.1 dev enp3s0 ... # ^^^^^^ # 使用此名称 ``` 将 `INTERNET_IFACE` 设置为 `dev` 之后的接口名称。 ### `AP_IFACE` — 用于虚假 AP 的无线网卡 使用 `iw dev` 输出的物理 Wi‑Fi 接口。通常是 `wlan0`,但也可能是 `wlp2s0` 或类似名称。 ``` iw dev # phy#0 # Interface wlan0 # ^^^^^ # 使用此名称 ``` 选择支持 AP 模式的物理接口(`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 ``` 该脚本将执行以下操作: 1. 在无线 phy 上以 managed 模式创建 AP 接口(例如 `wlan0`)。 2. 启动 `hostapd`,在选定信道上广播开放 SSID。 3. 启动 `dnsmasq`(DHCP + DNS 转发器,指向 1.1.1.1 / 8.8.8.8)。 4. 启用 IP 转发,并设置指向上行链路的 MASQUERADE。 5. 实时打印已连接的客户端(从租约中提取的 MAC + IP + 主机名)。 6. Ctrl+C 执行全面清理(iptables 规则、接口、NM、ip_forward)。 ## 实时监控 ``` 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`)上打开 Wireshark,并应用您需要的显示过滤器。 ### 识别设备 | 获取的信息 | 过滤器 | | --- | --- | | 主机名和供应商(DHCP 选项 12/55/60) | `dhcp` | | 设备名称 + 服务(Bonjour/AirPlay/Chromecast) | `mdns` | | Windows 主机名 / SMB | `nbns` | | 设备型号(UPnP) | `ssdp` | | 根据 MAC 获取的供应商 | `eth.addr == aa:bb:cc:dd:ee:ff` | | 来自单个客户端的所有流量 | `ip.addr == 10.0.0.X` | ### 正在浏览的内容(包括 HTTPS) | 获取的信息 | 过滤器 | | --- | --- | | 通过 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` | ### 凭证 / 表单(在 HTTPS 环境下较少见,但仍值得检查) | 获取的信息 | 过滤器 | | --- | --- | | HTTP POST(http:// 站点上的登录) | `http.request.method == "POST"` | | FTP 凭证 | `ftp.request.command in {"USER","PASS"}` | | Telnet | `telnet` | | 明文 SMTP/IMAP/POP3 | `smtp || imap || pop` | | payload 中的可疑字符串 | `frame contains "password"` | ### 实用组合 ``` # 一个客户端的加密流量 + 联系的域名 ip.src == 10.0.0.42 && (dns || tls.handshake.type == 1) # 被动发现手机型号 ip.src == 10.0.0.42 && (dhcp || mdns || ssdp || nbns) # 发往特定域名(例如社交网站)的流量 tls.handshake.extensions_server_name contains "instagram" # 排除 broadcast/multicast 噪声 not (eth.dst == ff:ff:ff:ff:ff:ff) && not (ip.dst >= 224.0.0.0 && ip.dst <= 239.255.255.255) ``` ### 提示 - 快速提取客户端访问的 **SNI**: sudo tshark -i wlan0 -Y 'tls.handshake.type==1 && ip.src==10.0.0.42' \ -T fields -e tls.handshake.extensions_server_name - 持续导出 pcap 数据包以供离线分析: sudo tcpdump -i wlan0 -w /tmp/capture.pcap - 无需 Wireshark,DNS 查询也可通过 `journalctl -t dnsmasq -f` 查看。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。 ## 法律声明 仅在您拥有或获得书面授权进行测试的网络和设备上使用。截获他人流量是违法行为。
标签:Cutter, Linux网络, Shell脚本, 流量劫持, 网络安全, 钓鱼WiFi, 防御绕过, 隐私保护