X黑手网
X黑手网
X黑手网

让wsl2读取宿主机usb设备并使用无线网卡(未完待续)

推荐阅读

Windows 11 安卓子系统安裝教程,保姆级一看就会!-X黑手网
Windows折腾笔记之Win11 使用 WSL2 安装 KaliLinux 并安装图形界面-X黑手网

前言:

默认安装的 wsl2 是不支持读取宿主机的 usb 设备的,这里就是要解决这个问题

前提条件

  • 运行 Windows 11 (内部版本 22000 或更高版本) 。 (可提供 Windows 10 支持,请参见下面的注释)

image

  • 需要具有 x64/x86 处理器的计算机。 (arm64 目前不支持 usbipd-win) 。
  • Linux 发行版已安装并设置为 WSL 2

image

 备注

若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定” 。 可通过选择“开始”>“设置”>“Windows 更新”>“检查更新”来更新到最新的 Windows 版本。 若要检查 Linux 内核版本,请打开 Linux 发行版并输入命令:uname -a。 若要手动更新到最新内核,请打开 PowerShell 并输入命令:“wsl –update”。

重要

建议使用 Windows 11 将 USB 设备连接到在 WSL 2 上运行的 Linux 发行版。 但是,按照 USBIPD-WIN 项目报告中的说明,通过构建你自己的支持 USBIP 的 WSL 2 内核,可使用 Windows 10 连接 USB 设备。

安装 USBIPD-WIN

wsl2 本身是不支持连接 usb 设备的,因此需要安装一下 usbipd-win 这个项目来帮助在 wsl2 中共享到宿主机的 usb 设备。

安装 usbipd-win 的方法如下:

  • 下载 usbipd-win 的安装镜像,

    • 下载好后,直接双击进行安装就行

    安装的过程很简单,但是也需要说明一下到底安装了些什么东西,主要做了下面几个事情:

    • 安装了 “USBIP 设备主机” 的服务 usbipd;==> 可以通过 win + S,输入服务来找到;

    • 可执行程序 usbipd,并自动添加到了系统环境变量中;

    • 调用了防火墙规则 usbipd 来允许所有的本地子网络能够连接到服务;

wsl2 中安装 USBIP 工具

如果你的 wsl2 是 ubuntu 的,可以使用如下命令:

sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20

kali则是:

sudo apt install usbip hwdata usbutils

wsl2 连接宿主机 USB 设备

首先打开 wsl2,比如我的 kali,点击打开让它保持活跃状态。

然后回到 windows,按 win +X,选择管理员权限打开终端,用如下命令查看所有连接到 windows 的 USB 设备:

usbipd wsl list

这个时候会列出连接在 windows 机器上所有的 USB 设备, 比如我的:

image

这里需要关注的就是两列,分别是 BUSID 和 STATE,BUSID 就是每个 USB 设备的唯一 ID,STATE 就是 USB 设备的状态,如果是 Not attached,那就是还没有挂载到 wsl2 中。

接下来要做的就是把自己想要的 USB 设备挂载到 wsl2,那么如何确定哪个 BUSID 的 USB 设备是自己想要挂载的那个呢,其实做法很简单,插拔看一下就行。比如我这里插拔后确认 BUSID 为 3-1 的 USB 设备是我想要挂载的,那么就可以使用如下命令进行挂载到 wsl2:

usbipd wsl attach --busid 2-1

需要注意的是,这里可能会提示你要升级一下 wsl,那么直接 wsl –update 就行了。

image

然后可以先在宿主机上还是使用刚才的命令 usbipd wsl list 查看一下 STATE,比如我的:

image

然后转到 wsl2 中,使用如下命令可以查看已经链接的 USB 设备:

lsusb

image

这样就大功告成了。

注意事项:

每次关闭wsl或者与usb设备断开连接后,需要重新连接设备
有两种重新连接USB设备的方法:

  1. 运行管理员模式PowerShell,usbipd命令连接;
  2. Ubuntu的bash界面连接,输入以下指令:
usbip list -r $HOSTNAME.local     #查看已连接过的设备信息,如记得busid,该命令非必须执行命令
sudo usbip attach -r $HOSTNAME.local -b <busid>  #连接USB设备,注意替换<busid>

剩下的最后一步就是添加无线网卡驱动。如果加载了驱动,本 Kali 就可以像真机一样,享用无线网卡带来的各种福利了。

加载无线网卡驱动,用 wifite 测试网卡破解功能

  加载驱动有两种方式,一种是下载驱动源码在这个配置好的 kali 中编译和安装。第二种,我发现有个开源项目可以完美解决8187L 驱动安装问题:git clone https://github.com/matrix/backports-rtl8187,于是就偷懒直接用了,下载以后,运行脚本程序,如果有问题可以简单修改一下该脚本,比如,该脚本必须用普通用户身份运行,我就不信邪修改成超级用户。

wsl2在kali 中编译和安装Ralink RT3070 无线驱动程序

  • 您的适配器具有 Ralink RT3070 芯片组。您可以从此站点下载官方 Linux 驱动程序。或者输入以下命令

git clone https://github.com/ElectricRCAircraftGuy/AlfaWiFiAdapterSoftware/raw/master/ALFA_Driver_DVD_v3.0/driver/Linux_driver/AWUS036NH/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2

WSL升级到最新版本Linux内核headers的方法

在Linux系统里,要进行系统调用开发,往往是需要安装内核的headers,才能找到所需要的C语言headers文件。一般来说,安装内核headers,在ubuntu里只需要执行:sudo apt-get install linux-headers-$(uname -r),但是在WSL里,这样子是不行的,因为WSL安装的是微软特供版,需要用对应版本的headers,apt-get安装不到。

  1. 首先,到 Releases · microsoft/WSL2-Linux-Kernel · GitHub 这里下载你内核对应版本的源码
  2. 安装依赖:sudo apt install libelf-dev build-essential pkg-config
  3. 安装依赖:sudo apt install bison build-essential flex libssl-dev libelf-dev bc
  4. 内核源码下载后,先 cp 到wsl里面的home目录,千万不能直接在windows目录里,那样子会失败的
  5. 执行解压缩:tar -zxvf xxxx.tar.gz
  6. 进入源码文件夹,执行 cp Microsoft/config-wsl .config
  7. 上一步执行完毕,参照bpftrace的要求,在.config文件末尾加上bpftrace/INSTALL.md at master · iovisor/bpftrace (github.com) 这里提到要加的配置项
  8. 再执行 make oldconfig && make prepare
  9. 执行 make scripts
  10. 再执行 sudo make modules && sudo make modules_install

如上就完成了headers的安装了,但是我出现过几个特殊的错误,列举如下:

  • 编译时出现:BTF: .tmp_vmlinux.btf: pahole (pahole) is not available,recipe for target ‘vmlinux’ faile

需要安装 sudo apt-get install dwarves

  • 编译的时候发现:No rule to make target ‘net/netfilter/xt_HL.o’,编译不成功

不能在 /mnt 目录下编译,也就是 WSL映射windows文件夹的地方,移到 ~/ 目录下就好了

  • 执行的时候发现:No such file or directory: ‘/sys/kernel/debug/tracing/trace_pipe’

执行:sudo mount -t debugfs debugfs /sys/kernel/debug

上述执行完毕,安装上bpftrace,执行:bpftrace -e ‘tracepoint:syscalls:sys_enter_open { printf(“%s %s\n”, comm, str(args->filename)); }’ 看看是否可行,可行就表示安装成功了

— 2020-10-18更新

发现更新的版本里开启了ebpf的支持比较多,建议直接升级到最新版本的内核,而不是依然保持当前内核版本。

编译完发现bpftool还是没有安装,比较坑爹,需要自己安装。

cd ./WSL2-Linux-Kernel-linux-msft-wsl-5.10.102.1/tools/bpf/bpftool

make

sudo make install

这样子就可以安装上bpftool了。

  • 假设驱动程序已下载到您的“下载”文件夹,并称为 。使用 打开终端,然后键入或粘贴以下内容:2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2Ctrl-Alt-T

    cd Downloads
    tar -xjf 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
    cd 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
    sudo make && sudo make install
    make clean
    cd ..
    rm -rf 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
    

image

image

  • 重新启动,希望您的无线连接会出现!

好了,以上分享了 让wsl2读取宿主机usb设备的方法,希望我的分享能对你的学习有一点帮助。

© 版权声明
THE END
喜欢就支持一下吧
点赞10赞赏 分享
评论 共18条

请登录后发表评论

    • admin的头像-X黑手网admin等级-LV6-X黑手网作者0
    • admin的头像-X黑手网admin等级-LV6-X黑手网作者0
    • admin的头像-X黑手网admin等级-LV6-X黑手网作者0
    • admin的头像-X黑手网admin等级-LV6-X黑手网作者0
    • admin的头像-X黑手网admin等级-LV6-X黑手网作者0