DilshanHarshajith/GhostAP

GitHub: DilshanHarshajith/GhostAP

一款综合性的 Bash 脚本无线接入点工具,集成了网络共享、数据包捕获、DNS 欺骗、强制门户和代理路由等安全测试功能。

Stars: 6 | Forks: 0

# GhostAP - 无线接入点创建工具 一个功能全面的 Bash 脚本,用于创建无线接入点,具备高级功能,包括网络共享、数据包捕获、DNS 欺骗、代理路由、强制门户和监听模式功能。 ## 功能 - **无线接入点创建**:设置安全 (WPA2/WPA3) 或开放的 WiFi 网络 - **以太网 AP 模式**:在没有 hostapd 的情况下通过下游硬件路由流量 — 适用于下游路由器/AP,或直接通过直通以太网电缆连接的单台 PC - **AP 克隆**:通过 SSID 自动配置,快速克隆现有网络 - **网络共享**:通过 NAT 共享来自其他接口的互联网连接 - **实时客户端监控**:跟踪已连接设备的 MAC、IP 和主机名 - **数据包捕获**:使用 tshark 进行实时流量监控和 PCAP 导出 - **DNS 欺骗**:将特定域名重定向到自定义 IP 地址 - **DoH 阻断**:阻断 DNS-over-HTTPS 以强制执行 DNS 欺骗 - **强制门户**:使用可自定义的门户页面拦截客户端;捕获凭证并在通过验证后将客户端加入白名单 - **代理集成**:以工具无关的方式支持本地透明代理、redsocks (上游) 和远程 DNAT - **VPN 路由**:通过 OpenVPN、WireGuard 或预配置的 VPN 接口安全路由所有 AP 流量 - **VPN 终止开关**:内置防火墙终止开关防止流量泄漏 - **拦截流量**:轻松将流量桥接到 `mitmproxy`、`Burp Suite` 或 `Wireshark` 等工具 - **交互模式和 CLI 模式**:灵活的配置选项 - **配置管理**:通过 CLI 参数覆盖保存和加载配置 - **全面日志记录**:为所有服务提供详细的操作日志 ## 要求 ### 系统要求 - 具有 root 访问权限的 Linux 系统 - Bash 版本 4.0 或更高 - 支持 AP 模式的无线网络接口 ### 必需依赖 ``` sudo apt update sudo apt install hostapd dnsmasq wireless-tools net-tools iptables iproute2 ``` ### 可选依赖 ``` # 用于 packet capture sudo apt install wireshark-common # 用于 proxy routing sudo apt install redsocks # 用于 VPN routing(可选) sudo apt install openvpn wireguard-tools # 用于 advanced interception(可选) sudo apt install mitmproxy ``` ## 安装说明 1. 克隆仓库: git clone https://github.com/DilshanHarshajith/GhostAP.git cd GhostAP chmod +x GhostAP.sh 2. 使用 root 权限运行: sudo ./GhostAP.sh ### 安装为 Debian 软件包(推荐) 1. 从 [Releases](https://github.com/DilshanHarshajith/GhostAP/releases) 页面下载最新的 `.deb` 软件包。 2. 使用 `apt` 安装: sudo apt install ./ghostap_*.deb 3. 从任何地方运行: sudo ghostap ## 用法 ### 交互模式(推荐初学者使用) ``` sudo ./GhostAP.sh --interactive ``` ### 快速入门示例 #### 基础开放接入点 ``` sudo ./GhostAP.sh -i wlan0 -s "MyOpenAP" -c 6 --security open ``` #### 具有网络共享的安全 WPA2 接入点 ``` sudo ./GhostAP.sh -i wlan0 -s "MySecureAP" -c 6 --security wpa2 --password "password123" --internet -si eth0 ``` #### 具有数据包捕获的接入点 ``` sudo ./GhostAP.sh -i wlan0 -s "MonitorAP" --capture # 或者 sudo ./GhostAP.sh -i wlan0 -s "MonitorAP" --capture "capture.pcap" ``` #### 具有代理路由的接入点 ``` sudo ./GhostAP.sh -i wlan0 -s "ProxyAP" --proxy --proxy-host 127.0.0.1 --proxy-port 8080 --proxy-type http ``` #### 克隆现有接入点 ``` sudo ./GhostAP.sh -i wlan0 --clone "Target_SSID" ``` #### 以太网 AP 模式(下游路由器作为无线电,或直接连接的 PC) `--eth-ap` 跳过 hostapd 并直接在以太网端口上管理 DHCP/NAT/功能, 而不是使用 WiFi 无线电。该接口可以面向下游路由器(其 WiFi 无线电为客户端提供服务),也可以面向直接通过直通以太网电缆插入的单台 PC/笔记本电脑 — 两者之间不需要交换机或路由器。在这两种情况下,GhostAP 都是 DHCP 服务器和该电缆另一端设备的网关,因此同样适用 DNS 欺骗、代理、捕获和 VPN 路由功能。 ``` # 处于 bridge/AP 模式的 Downstream router(禁用其 DHCP+NAT) # 基础 ethernet AP —— 互联网连接从 eth0 共享,GhostAP 在 eth1 上管理 DHCP sudo ./GhostAP.sh --eth-ap -i eth1 --internet -si eth0 # 相同的命令也可以将互联网和 interface 访问权限直接提供给 # 通过以太网线缆连接到 eth1 的第二台 PC —— 只需将该 PC 的 NIC # 设置为 DHCP,它就会自动从 GhostAP 获取 address/gateway。 ``` #### 本地透明拦截 ``` sudo ./GhostAP.sh --local-proxy -s "InterceptAP" ``` #### 强制门户(在授予互联网访问权限之前拦截客户端) ``` # 带有互联网共享的内置 portal 页面 sudo ./GhostAP.sh -i wlan0 -s "FreeWifi" --security open --captive --internet -si eth0 # 使用自定义 HTML 模板 sudo ./GhostAP.sh -i wlan0 -s "FreeWifi" --captive --internet -si eth0 \ --captive-template /path/to/portal/index.html ``` #### 具有 VPN 路由的安全接入点 ``` # 使用 OpenVPN 配置 sudo ./GhostAP.sh -i wlan0 -s "VPNAccess" --vpn "/path/to/vpn.ovpn" # 使用 WireGuard 配置 sudo ./GhostAP.sh -i wlan0 -s "VPNAccess" --vpn "/path/to/wg0.conf" # 通过现有 VPN interface 路由 sudo ./GhostAP.sh -i wlan0 -s "VPNAccess" --vpn-interface tun0 ``` ## 命令行选项 ### 基本选项 | 选项 | 描述 | | ---------------------- | -------------------------------- | | `--int, --interactive` | 以交互模式启动 | | `--config FILE` | 从文件加载配置 | | `--save NAME` | 保存当前配置并命名 | | `--help` | 显示帮助信息 | ### 接口选项 | 选项 | 描述 | | ------------------------------- | ----------------------------------------------- | | `-i, --interface IFACE` | 使用的接口(无线,或带有 `--eth-ap` 的以太网) | | `-si, --source-interface IFACE` | 用于网络共享的源接口 | | `--eth-ap, --ethernet-ap` | 启用以太网 AP 模式(跳过 hostapd) | | `--vpn [CONFIG]` | 启用 VPN 路由(可选 .ovpn/.conf) | | `--vpn-interface IFACE` | 使用现有的 VPN 接口 | | `--vpn-creds USER:PASS` | OpenVPN 凭据(非交互式) | | `--clone SSID` | 通过 SSID 克隆现有 AP | ### 网络选项 | 选项 | 描述 | | ---------------------- | ------------------------------ | | `-s, --ssid SSID` | 网络名称 (SSID) | | `-c, --channel CHANNEL`| WiFi 信道 (1-14) | | `--security TYPE` | 安全类型 (open/wpa2/wpa3) | | `--password PASSWORD` | WiFi 密码(适用于 WPA2/WPA3) | | `--subnet OCTET` | 子网第三段 (0-255) | | `--dns IP` | DNS 服务器 IP 地址 | | `-m, --mac MAC` | 要使用的 MAC 地址(仅限无线模式) | ### 功能选项 | 选项 | 描述 | | -------------------- | ----------------------------------------------------------------- | | `--internet` | 启用网络共享 | | `--capture [FILE]` | 启用数据包捕获 | | `--spoof "DOMAINS"` | 启用 DNS 欺骗(格式:`dom.com=1.2.3.4\|dom2.com\|...`) | | `--spoof-target IP` | DNS 欺骗的默认目标 IP(当域名没有显式 IP 时) | | `--block-doh` | 阻断 DNS-over-HTTPS 以强制执行 DNS 欺骗 | ### 代理选项 | 选项 | 描述 | | ------------------- | ----------------------------------------------- | | `--local-proxy` | 将流量重定向到本地端口(默认为 8080) | | `--remote-proxy` | 将流量重定向到远程主机/端口 (DNAT) | | `--proxy` | 将流量重定向到上游代理 | | `--proxy-host HOST` | 代理服务器主机/IP | | `--proxy-port PORT` | 代理服务器端口 | | `--proxy-type TYPE` | 代理类型 (http/socks4/socks5) | | `--proxy-user USER` | 代理用户名 | | `--proxy-pass PASS` | 代理密码 | ### 强制门户选项 | 选项 | 描述 | | --------------------------- | ------------------------------------------------------------- | | `--captive` | 启用强制门户(在客户端提交之前拦截客户端) | | `--captive-port PORT` | 强制门户服务器的端口(默认:`8880`) | | `--captive-template FILE` | 用作门户页面的自定义 HTML 文件的路径 | ## 配置管理 ### 保存配置 ``` sudo ./GhostAP.sh --save myconfig -i wlan0 -s "MyAP" --security wpa2 --password "password" ``` ### 加载配置 ``` sudo ./GhostAP.sh --config /path/to/myconfig.conf # 也支持相对路径: sudo ./GhostAP.sh --config myconfig.conf ``` ### 配置文件格式 ``` # 网络配置 INTERFACE="wlan0" ETHERNET_MODE="false" SSID="MyAccessPoint" CHANNEL="6" SUBNET="10" DNS="8.8.8.8" SECURITY="wpa2" PASSWORD="mypassword" # 功能 INTERNET_SHARING="true" SOURCE_INTERFACE="eth0" DNS_SPOOFING="false" PACKET_CAPTURE="true" # Cloning Options CLONE="false" CLONE_SSID="" # Proxy Options PROXY_ENABLED="false" PROXY_MODE="TRANSPARENT_LOCAL" PROXY_HOST="" PROXY_PORT="" PROXY_TYPE="" PROXY_USER="" PROXY_PASS="" # VPN Options VPN_ROUTING="false" VPN_INTERFACE="" VPN_CONFIG="" VPN_CREDS="" # DNS Spoofing Options SPOOF_DOMAINS="" SPOOF_TARGET_IP="" BLOCK_DOH="false" # Captive Portal Options CAPTIVE_PORTAL="false" CAPTIVE_PORT="8880" CAPTIVE_TEMPLATE="" ``` ## 高级功能 ### DNS 欺骗 将特定域名重定向到自定义 IP 地址: ``` # 使用显式 IP 伪装特定域名 sudo ./GhostAP.sh --spoof "example.com=192.168.1.100|test.com=10.0.0.1" # 将域名伪装为默认目标(AP IP 或自定义目标) sudo ./GhostAP.sh --spoof "example.com|test.com" --spoof-target 192.168.1.50 # 混合使用显式和默认目标 sudo ./GhostAP.sh --spoof "example.com=192.168.1.100|test.com" --spoof-target 10.0.0.1 # 通过 DoH 阻止进行伪装以防止 DNS 旁路 sudo ./GhostAP.sh --spoof "example.com" --block-doh ``` 捕获的数据包将带有时间戳保存到当前目录(或指定路径): ``` ls -la *.pcap ``` ### 代理路由 GhostAP 以工具无关的方式支持三种高级代理模式: #### 1. 本地透明代理 (`--local-proxy` 或 `--proxy-mode TRANSPARENT_LOCAL`) 将客户端流量重定向到本地端口(默认为 8080)以进行拦截: - 透明地重定向 HTTP (80) 和 HTTPS (443) 流量。 - 允许您在指定端口上手动运行您喜欢的工具(例如 `mitmproxy`、`Burp Suite`)。 - 流量走向:`Client → AP → 本地拦截器 (8080) → Internet` ``` sudo ./GhostAP.sh --local-proxy -s "InterceptAP" # 现在在端口 8080 上启动您的 interceptor 工具 ``` #### 2. 上游代理 (`--proxy` 或 `--proxy-mode TRANSPARENT_UPSTREAM`) 使用 `redsocks` 将拦截的流量转发到外部 HTTP 或 SOCKS 代理: - 透明地将流量重定向到上游代理服务器。 - 支持 HTTP、SOCKS4 和 SOCKS5 代理。 - 支持经过身份验证的代理(用户名/密码)。 - 流量走向:`Client → AP → Redsocks → 外部代理 → Internet` ``` sudo ./GhostAP.sh --proxy --proxy-host 10.0.0.5 --proxy-port 3128 --proxy-type http ``` #### 3. 远程转发 (`--remote-proxy` 或 `--proxy-mode REMOTE_DNAT`) 简单的 DNAT 转发到远程 IP/端口: - 如果您的拦截工具运行在不同的机器上,则此功能非常有用。 - 不会启动本地代理进程。 - 流量走向:`Client → AP → 远程主机 (DNAT)` ``` sudo ./GhostAP.sh --remote-proxy --proxy-host 10.0.0.10 --proxy-port 8080 ``` ### 已连接设备监控 该脚本通过监视 DHCP 租约来实时监控已连接的客户端。它显示: - MAC 地址 - 分配的 IP 地址 - 设备主机名(如果有) ### VPN 路由 GhostAP 使用基于策略的路由 提供强大的 VPN 路由: - **流量隔离**:来自 AP 的所有流量都通过 VPN 隧道路由。 - **终止开关**:内置防火墙规则可防止 VPN 连接中断时发生流量泄漏。 - **多后端支持**: - **OpenVPN**:全面支持带有凭证管理的 `.ovpn` 配置。 - **WireGuard**:原生支持 `.conf` 配置文件。 - **现有接口**:使用正在运行的 VPN 隧道(tun、wg、proton 等)。 - **自动配置**:自动检测并配置路由表和 NAT 规则。 ``` # 使用 OpenVPN profile 启用 VPN sudo ./GhostAP.sh --vpn client.ovpn --vpn-creds "user:pass" ``` ### 强制门户 GhostAP 可以使用强制门户拦截正在连接的客户端 — 这与酒店和机场 WiFi 网络使用的机制相同。在客户端提交门户表单(例如接受条款、输入凭证)之前,它们将被阻止访问互联网。 **工作原理:** 1. dnsmasq 中的 DNS 通配符 (`address=/#/...`) 将所有查询重定向到 AP。 2. `iptables` 规则将所有客户端 HTTP 流量重定向到内置的 Python 门户服务器。 3. 在客户端被加入白名单之前,HTTPS 将被 TCP-reset 阻断。 4. 当客户端提交表单 (`POST /accept`) 时,服务器将: - 将任何提交的字段(凭证等)记录到 `Output/` 中带有时间戳的文件中。 - 插入特定于客户端的 `iptables` 规则以允许完全的互联网访问。 - 将客户端的 DNS 恢复为真实的上游服务器。 5. 处理操作系统的强制门户检测探针,以便自动出现“登录到网络”对话框。 **自定义模板:** 您可以提供自己的 HTML 门户页面。系统将提供包含指定文件的整个目录,保留任何文件夹结构(CSS、JS、图像、子目录)。提供的文件将成为入口点 (`index.html`)。表单**必须** POST 到 `/accept` 才能触发客户端白名单。 ``` # 内置 portal sudo ./GhostAP.sh -i wlan0 -s "FreeWifi" --security open --captive --internet -si eth0 # 自定义模板 sudo ./GhostAP.sh --captive --captive-template /path/to/portal/login.html --internet -si eth0 # 自定义端口 sudo ./GhostAP.sh --captive --captive-port 9090 --internet -si eth0 ``` ## 架构 GhostAP 采用模块化架构,每个功能都有单独的模块: ``` GhostAP/ ├── GhostAP.sh # Main entry point └── src/ ├── globals.sh # Global variables and constants ├── utils.sh # Logging, validation, cleanup functions ├── config.sh # Configuration management and argument parsing ├── ui.sh # User interface and status display ├── interface.sh # Wireless interface management ├── hostapd.sh # Access point configuration ├── dnsmasq.sh # DHCP/DNS server and spoofing ├── internet.sh # NAT and internet sharing ├── proxy.sh # Proxy routing (Interception/Redsocks) ├── capture.sh # Packet capture with tshark ├── captive.sh # Captive portal server and iptables whitelisting └── services.sh # Service lifecycle management ``` ## 监控和日志 ### 实时日志监控 ``` tail -f Logs/GhostAP.log ``` ### 特定服务日志 - `Logs/hostapd.log` - 接入点服务日志 - `Logs/dnsmasq.log` - DHCP/DNS 服务日志 - `Logs/tshark.log` - 数据包捕获日志 - `Logs/redsocks.log` - 代理服务日志(适用时) - `Logs/captive.log` - 强制门户服务器日志(适用时) ## 安全注意事项 ⚠️ **重要安全提示:** 1. **合法使用**:仅在本工具用于您拥有或获得明确测试许可的网络上使用 2. **数据包捕获**:可能会捕获敏感信息 - 请妥善处理 3. **DNS 欺骗**:可能会重定向合法流量 - 请谨慎使用 4. **代理路由**:所有流量都可能被拦截 - 请确保获得适当的授权 ## 故障排除 ### 常见问题 #### 找不到接口 ``` # 列出可用的无线 interface iw dev ``` #### 权限拒绝 ``` # 确保以 root 权限运行 sudo ./GhostAP.sh ``` #### 服务启动失败 ``` # 检查系统日志 journalctl -u hostapd journalctl -u dnsmasq ``` #### 无法访问互联网 - 验证源接口是否具有互联网连接 - 检查 iptables 规则:`iptables -L -n -t nat` - 确保启用了 IP 转发:`cat /proc/sys/net/ipv4/ip_forward` ### 调试模式 启用调试日志: ``` DEBUG=1 sudo ./GhostAP.sh ``` ## 停止接入点 按 `Ctrl+C` 优雅地停止接入点。脚本将: - 终止所有已启动的服务 - 移除 iptables 规则 - 将接口恢复为受管理模式 - 清理临时文件 - 保存数据包捕获(如果已启用) ## 贡献 欢迎提交贡献!请确保: - 代码遵循现有的风格约定 - 新功能包含适当的错误处理 - 更新新选项的文档 - 考虑安全影响 ## 许可证 基于 GNU 通用公共许可证 v3 授权 ## 支持 如遇问题和疑问: 1. 查看故障排除部分 2. 查看日志文件以获取错误详情 3. 确保已安装所有依赖项 4. 验证接口与 AP 模式的兼容性 **免责声明**:本工具仅供授权的网络测试和教育目的使用。未经授权访问网络是非法且不道德的。在测试网络安全之前,请务必获得适当的许可。
标签:Bash, Wildcard支持, 中间人攻击, 应用安全, 无线接入点, 网络流量劫持, 配置审计