You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在树莓派3B+上用Python制作带流量拦截的WiFi转以太网适配器?

树莓派WiFi转以太网+流量拦截重定向实现方案

首先明确:你找到的纯二层网桥方案无法直接嵌入流量处理逻辑——二层网桥转发的流量不会经过树莓派TCP/IP协议栈,Python无法抓取和修改这类流量,需要先把桥接方案调整为路由转发模式,再配合流量拦截组件实现需求。

1 基础路由环境配置

替换原有纯桥接方案,搭建WiFi(上游)转以太网(下游)的路由环境:

  • 给以太网口eth0配置静态IP,比如192.168.4.1/24,安装dnsmasq作为DHCP服务端,为以太网下游接入的设备自动分配同网段IP
  • 开启系统IP转发:修改/etc/sysctl.conf,将net.ipv4.ip_forward参数值改为1,执行sysctl -p生效
  • 配置SNAT规则:执行iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE,将以太网侧的流量转发到WiFi上游出口

完成上述配置后,下游设备接入树莓派以太网口就可以正常上网,和桥接的使用体验一致。

2 流量拦截对接Python逻辑

使用netfilter-queue组件把需要处理的流量导入Python脚本处理:

  • 安装依赖:执行以下命令安装系统依赖和Python库
apt update && apt install -y libnetfilter-queue-dev python3-pip
pip3 install NetfilterQueue scapy
  • 配置iptables拦截规则,把需要处理的流量打入指定的netfilter队列,示例拦截所有HTTP流量写入队列1:
iptables -A FORWARD -p tcp --dport 80 -j NFQUEUE --queue-num 1

如果需要处理所有转发的流量,删除端口参数即可。

  • 编写Python脚本从队列读取流量,完成检查、修改、重定向等操作后再放回转发链路,示例代码如下:
from netfilterqueue import NetfilterQueue
import scapy.all as scapy

# 流量处理回调函数
def handle_packet(pkt):
    # 将队列报文转为scapy可解析的格式
    scapy_pkt = scapy.IP(pkt.get_payload())
    # 此处编写你的流量检查逻辑,示例判断目标IP为指定地址时执行重定向
    if scapy_pkt.dst == "10.0.0.5":
        # 修改目标地址为树莓派本地地址,端口改为8080实现重定向
        scapy_pkt.dst = "192.168.4.1"
        scapy_pkt[scapy.TCP].dport = 8080
        # 删除原有校验和,系统会自动重新计算
        del scapy_pkt[scapy.IP].chksum
        del scapy_pkt[scapy.TCP].chksum
        # 把修改后的报文写回队列
        pkt.set_payload(bytes(scapy_pkt))
    # 放行报文,需要拦截的话调用pkt.drop()即可
    pkt.accept()

# 绑定队列1和处理函数
nfq = NetfilterQueue()
nfq.bind(1, handle_packet)

try:
    nfq.run()
except KeyboardInterrupt:
    pass
finally:
    nfq.unbind()

3 开机自启配置

把iptables规则和Python脚本添加到系统开机自启项,无需每次开机手动执行即可正常运行。


方案参考示意图:
方案示意图

内容的提问来源于stack exchange,提问作者Soupy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:12:00