LOADING

加载过慢请开启缓存 浏览器默认开启

为wsl 2添加USB网卡支持

2026/2/18 程序 技术性 Linux

前言

Windows下,NDIS标准驱动和其TCP/IP协议栈的严格限制,使网卡即便理论上可以进入监听模式,大部分的事情也无法完成。
例如deauth攻击,Windows系统会阻止与网络配置不符合的数据包,无法伪装MAC,也就使deauth攻击无法成功。除非你自己给网卡写驱动,通过驱动本身提供接口,但对于我们来说,太过困难。
而Linux系统由于其开放的设计,通常在硬件支持的情况下,可以轻松地利用网卡做大部分的事情。

但若非要在Windows上便捷地使用监听模式等高级网络功能…
想到WSL,Windows Subsystem for Linux是Microsoft官方支持的Linux子系统,可以方便地在Windows上启动一个Linux环境,
其启动速度比一般的虚拟机方案快很多,资源消耗更加少,而且与主机的文件交换也很方便(c盘等分区会被自动挂载至wsl中的/mnt,c盘的路径是/mnt/c/)。可以“轻量化“地使用Linux下强大的网络工具链和生态

接下来我们将使用我的MT9721u探讨如何在WSL中使用USB网卡(笔记本内置网卡一般在硬件上就不支持诸如监听模式等高级功能,因此不做考虑)。以下操作不支持旧的WSL,若需要按此操作,请使用WSL 2。

1.将USB网卡连接至WSL

要在WSL中使用USB网卡,必须将USB网卡从主机逻辑移除并连接至WSL,为此,我们需要usbipd-win此处是Microsoft官方关于如何使用usbipd-win将USB设备连接至WSL的教程,因此这里我们只简要提一些。

首先你需要确保是WSL 2,旧的WSL版本不受支持,并确保:

  • 在x64的电脑上运行WSL 2
  • 最好为win11,较为新的win10也是可以的
  • 尽可能保持内核最新,较旧的内核可能不支持usbipd

接下来,打开powershell,使用Windows程序包管理器安装usbipd:

> winget install --interactive --exact dorssel.usbipd-win

插入USB网卡,并执行(无需管理员):

> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-2    152d:a853  USB Attached SCSI (UAS) 大容量存储设备                        Not shared
1-3    35d8:1496  FreeDSP, USB 输入设备                                         Not shared
2-1    13d3:5458  USB2.0 HD UVC WebCam, Camera DFU Device                       Not shared
2-2    0489:e0f6  MediaTek Bluetooth Adapter                                    Not shared
3-2    0e8d:7961  MediaTek Wi-Fi 6/6E Wireless USB LAN Card                     Not shared
4-1    0b05:19b6  USB 输入设备    

我们可以看到输出,其中3-2 0e8d:7961 MediaTek Wi-Fi 6/6E Wireless USB LAN Card是我们的MT7921u网卡(名称可能不一样,但你可以通过VID:PID识别设备,MT7921u正是0e8d:7961

现在我们需要将其设置为Shared模式,使用busid:

> usbipd bind --busid 3-2

再次执行usbipd list确认:

> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-2    152d:a853  USB Attached SCSI (UAS) 大容量存储设备                        Not shared
1-3    35d8:1496  FreeDSP, USB 输入设备                                         Not shared
2-1    13d3:5458  USB2.0 HD UVC WebCam, Camera DFU Device                       Not shared
2-2    0489:e0f6  MediaTek Bluetooth Adapter                                    Not shared
3-2    0e8d:7961  MediaTek Wi-Fi 6/6E Wireless USB LAN Card                     Shared
4-1    0b05:19b6  USB 输入设备                                                  Not shared

我们看到3-2 0e8d:7961 MediaTek Wi-Fi 6/6E Wireless USB LAN CardSTATEShared,现在它可以被连接至WSL,
请在WSL正在运行的时候执行:


> usbipd attach --wsl --busid 3-2
usbipd: info: Using WSL distribution 'Ubuntu-22.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Loading vhci_hcd module.
usbipd: info: Detected networking mode 'mirrored'.
usbipd: info: Using IP address 127.0.0.1 to reach the host.

现在USB网卡已经连接在WSL并受WSL的全权控制,Windows下不能再访问。这里不赘述如何将其从WSL断开并交还Windows。

不过,先别急,你的WSL极大概率不能直接使用USB网卡,不只是MT7921u,微软没有在编译Linux内核时启用这些驱动。接下来我们将重新编译内核等,来添加对MT7921u的支持