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支持, 中间人攻击, 应用安全, 无线接入点, 网络流量劫持, 配置审计