局域网中USB远程共享:USB/IP

USB/IP是一种基于网络的设备共享机制,可将电脑A(server端)连接的USB设备通过网络共享给远程电脑B(client端)

USB/IP有很多的实现方式(程序),除了下文中使用的免费程序,还有商用程序:

  • USB Network Gate
  • FlexiHub
  • VirtualHere
  • USB over Network
    更多见这篇文章

Server端(电脑A,连接USB设备)

Windows

PS:本文选取的windows上的开源软件为usbip-win,安装配置方法也可以看官方README

安装

  • 首先下载官方编译好的软件压缩包,并解压。如果想要自己编译的话参考官方代码的README

  • 双击文件usbip_test.pfx准备导入证书。证书需要导入两遍,分别导入到“受信任的根证书颁发机构”和“受信任的发布者”在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 管理员身份打开CMD或者PowerShell,进入软件所在目录,运行命令开启测试签名

    bcdedit.exe /set TESTSIGNING ON
    
  • 开放usbip所需端口:默认端口是3240,到防火墙中的入站

    • 也可以用其他端口,后续配置的时候需要使用这个端口
      在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 重启电脑

  • (可选)下载最新的usb.ids,替换软件所在目录的usb.ids文件。

    • 每个USB设备都有自己ID(类似网络的IP地址),而usb.ids(类似DNS服务器)中记录了所有已知的USB设备ID对应的名称(分成供应商名称和设备名称,类似网站域名),方便后续快速识别USB设备。
    • 但是由于USB设备在不停出新,较新的USB设备的ID并没有在usb.ids中记录过,因此在后续的识别过程中会显示“unknown product”等字样,表示在usb.ids文件中没有相关记录。这不用担心,找不到记录也是可以用的,只不过不方便我们识别罢了

配置

  • 管理员身份打开CMD或者PowerShell,进入软件所在目录

  • 将USB设备连接到电脑,然后使用命令.\usbip.exe list -l列出所有识别到的USB设备

    • 显示“unknown product”是因为在usb.ids文件中没有相关记录,只影响你对USB设备的识别,不影响后续操作
    • 我这里显示了五个USB设备(每个“-”表示一个设备)在这里插入图片描述
  • 找到自己想要远程共享的USB设备,记录下它的busid,格式为[数字]-[数字]

    • 如果识别不到的话,可以在USB设备连接前后分别运行上面的命令
    • 假设我想要远程共享的设备是第四个带SATA字样的USB设备(我的移动硬盘),它的busid为1-181
  • 将USB设备绑定至usbip

    • 注意,绑定后,本地电脑就不能使用这个USB设备了
    .\usbip.exe bind -b [busid]
    # 例如我这儿就是
    .\usbip.exe bind -b 1-181
    

    在这里插入图片描述

  • 启动usbipd服务

    .\usbipd.exe -d -4
    # 如果想用其他端口,且安装的时候配置过防火墙
    .\usbipd.exe -d -4 -tPORT [端口]
    

    在这里插入图片描述

  • 使用完成后,可以将USB设备跟usbip解绑

    .\usbip.exe unbind -b [busid]
    

    然后还需要到“设备和打印机”中,找到连接的USB设备,将所有“USB/IP STUB”卸载,最后重新拔插USB设备
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 如果不需要usbip了,可以关闭测试签名,然后重启

    bcdedit.exe /set TESTSIGNING OFF
    

Linux

安装

仅在Ubuntu上测试,其他发行版需要自己查资料(应该是差不多的)

  • 以root权限运行如下命令
    apt install linux-tools-`uname -r` linux-cloud-tools-`uname -r` linux-tools-common 
    # 下面两个不确定要不要安装,但是我都装了
    apt install linux-tools-generic linux-cloud-tools-generic
    

配置

  • 加载相关的内核模块:
    • 不确定重启电脑后需不需要再次加载
    sudo modprobe usbip-core
    sudo modprobe vhci-hcd
    sudo modprobe usbip_host
    
  • 关闭防火墙:ufw disable
    • 或者在防火墙中开启3240端口的TCP连接

以下操作根window很像,具体细节&图片见上面windows的配置过程

  • 将USB设备连接到电脑,然后使用命令usbip list -l列出所有识别到的USB设备
  • 找到自己想要远程共享的USB设备,记录下它的busid,格式为[数字]-[数字]
  • 将USB设备绑定至usbip
    usbip bind -b [busid]
    # 例如
    usbip bind -b 1-181
    
  • 启动usbipd服务
    usbipd -d -4
    # 如果想用其他端口,且安装的时候配置过防火墙
    usbipd -d -4 -tPORT [端口]
    
  • 使用完成后,可以将USB设备跟usbip解绑
    usbip unbind -b [busid]
    

Client端(电脑B)

Windows

PS:安装配置方法也可以看官方README

安装方式与上面server端几乎一样,只是多了一个步骤

  • 安装VHCI驱动:以管理员身份打开CMD或者PowerShell,进入软件所在目录,运行如下命令
    usbip.exe install
    
    如果后续不需要了,可以把驱动卸载了
    usbip.exe ubinstall
    

配置

  • 管理员身份打开CMD或者PowerShell,进入软件所在目录

  • 查看电脑A上可用的USB设备

    usbip.exe list --remote [电脑A的IP]
    
  • USB 设备绑定至本机

    usbip.exe attach --remote=[电脑A的IP] --busid=[想要绑定设备的busid]
    
  • 查看已经绑定的远程USB设备

    usbip.exe port
    
  • 将已经绑定的远程USB设备解绑:端口来自命令usbip port输出中"Port"后面的数字

    usbip.exe detach -p [端口]
    

Linux

安装方式与server端一样

配置

  • 查看电脑A上可用的USB设备

    usbip list --remote [电脑A的IP]
    
  • USB 设备绑定至本机

    usbip attach --remote=[电脑A的IP] --busid=[想要绑定设备的busid]
    
  • 查看本机USB设备,应该能看到绑定好的USB设备

    lsusb
    

    例如
    在这里插入图片描述

  • 查看已经绑定的远程USB设备

    usbip port
    

    在这里插入图片描述

  • 将已经绑定的远程USB设备解绑:端口来自命令usbip port输出中"Port"后面的数字

    usbip detach -p [端口]
    

参考连接
Linux 系统使用 USB/IP 远程共享 USB 设备
USB/IP PROJECT
Linux usb 5. usbip (USB Over IP) 使用实例
USB/IP for Windows

猜你喜欢

转载自blog.csdn.net/OTZ_2333/article/details/124073337