如何在自制Linux WiFi接入点上伪装外部服务器,拦截并响应客户端设备的指定HTTP请求?
如何在自制Linux WiFi接入点上伪装外部服务器,拦截并响应客户端设备的指定HTTP请求?
嘿,这个需求其实挺清晰的,咱们不用复杂工具,靠DNS劫持+Apache/Nginx就能搞定,一步步来:
1. 先搞定DNS劫持:让设备D把厂商域名解析到你的Linux设备L
因为D连接的是L的WiFi,L作为DHCP服务器,咱们可以让D用L自己的DNS服务,把厂商的域名(比如manufacturer-server.com)直接指向L的WiFi热点IP(比如常见的192.168.4.1,你可以用ip a查自己的热点接口IP)。
- 首先安装
dnsmasq(Ubuntu上直接装:sudo apt install dnsmasq),这是个轻量的DNS+DHCP服务,特别适合做本地域名映射。 - 编辑
dnsmasq的配置文件:sudo nano /etc/dnsmasq.conf,在文件末尾加一行:
把这里的IP换成你的L的WiFi热点实际IP,保存退出。address=/manufacturer-server.com/192.168.4.1 - 重启
dnsmasq生效:sudo systemctl restart dnsmasq - 最后要确保你的WiFi热点给D分配的DNS是L的IP:如果是用NetworkManager开的热点,在热点设置里把DNS服务器设为L的本地IP;如果是用
hostapd+dhcpd的话,在DHCP配置里指定DNS为L的IP。这样D上网时就会用L的DNS解析域名,自然就把厂商域名指向L了。
2. 用Apache/Nginx配置伪造的HTTP响应
现在D的请求会发往L的80端口,咱们直接用Web服务器返回伪造内容就行,这里以Nginx为例(Apache操作类似):
- 先装Nginx:
sudo apt install nginx - 创建一个虚拟主机配置文件:
sudo nano /etc/nginx/sites-available/manufacturer-fake.conf,填入以下内容(根据你的需求修改):server { listen 80; # 要和厂商域名完全一致 server_name manufacturer-server.com; # 处理固件版本检查请求 location /firmware-version-check { # 返回你伪造的响应内容,比如JSON格式 return 200 '{"latest_version": "v1.2.3", "update_required": true}'; # 根据实际需求设置Content-Type add_header Content-Type application/json; } # 处理固件下载请求 location /firmware-file-download { # 把你的伪造固件文件放在这个目录下 root /var/www/fake-firmware; # 比如你的固件文件叫update.bin,这里可以直接指向它,或者让路径对应 # alias /var/www/fake-firmware/update.bin; sendfile on; } } - 启用这个配置:
sudo ln -s /etc/nginx/sites-available/manufacturer-fake.conf /etc/nginx/sites-enabled/ - 测试配置是否正确:
sudo nginx -t,如果显示ok就重启Nginx:sudo systemctl restart nginx
如果用Apache的话,你需要创建虚拟主机配置,指定ServerName manufacturer-server.com,然后用Location或Alias指令对应不同的请求路径,返回静态内容或文件就行,操作逻辑和Nginx一致。
3. 确保网络规则允许流量到达Web服务器
- 检查L的防火墙,确保开放80端口:比如用ufw的话,
sudo ufw allow 80/tcp;如果是iptables,就加一条sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.4.0/24 -j ACCEPT(替换成你的热点网段)。 - 不用设置代理或转发,因为DNS已经把请求指向本地了,D的HTTP请求会直接发到L的80端口,Web服务器直接响应就行。
4. 测试验证
- 找个设备连L的WiFi,用
ping manufacturer-server.com看看是不是解析到L的IP。 - 用
curl http://manufacturer-server.com/firmware-version-check测试,看是不是返回你伪造的内容;再测试下载路径,确认文件能正常获取。
这样一来,设备D访问厂商的HTTP接口时,就会被L拦截并返回你伪造的响应,完全符合你的需求~
备注:内容来源于stack exchange,提问作者ldfjglfkgj
相关产品推荐
相关产品推荐

