通过网络远程共享USB设备

如何在一个设备上使用另一个设备上的USB设备?

为什么会有这个需求?

比如银行常常会提供一个USB加密狗,只有插上加密狗才能正常使用网银。某些公司为了资料安全,也会使用这样的加密狗。通过远程USB,就能安全地共享加密狗。我个人的主要需求是,我的mac无法识别CC3200物联网开发板,可能是ARM mac原因。所以为了用这块开发板,我需要把它远程USB连接到我的Windows台式上。

需要准备什么东西?

  • 两台电脑,一台是本地物理连接USB设备的,另一台是通过网络使用这个USB设备的。两台电脑的系统任意, Windows,Linux,macOS都行。

  • 一台拥有公网IP的服务器,用于内网穿透。

内网穿透是什么?怎么配置?

参见我的另一篇博客,如何DIY云游戏一文。我使用frp进行内网穿透,它开源免费轻量。关于它网上有很多教程,我就不赘述了。简单的说,内网穿透的作用是让本地电脑拥有公网IP,这样就可以作为服务器使用。

通过网络共享USB设备

我使用的是USB-Over_Network这个软件。它是一个收费软件,但是提供可以连接1个USB设备的免费试用版,有15天的试用时间。如果你恰好财力雄厚,请购买正版($149起),我就不在这里提供“学习版”了。

如何使用呢?按理说只要跟着官方文档做就行了,但我有一句“你也配叫文档”不知当讲不当讲。根本没有明确的操作指导,甚至会有错误的指引。比如命令行文档中提到的shareport参数根本就不存在。所以得靠软件本身带的(没有详细解释的)help摸索。很糟糕。

它的软件分为服务端和客户端两个版本,请到官方下载页面下载。其中服务端是物理插着USB设备的那台电脑,客户端则是远程使用这个USB设备的电脑,和远程桌面的服务-客户端刚好反过来。因此,你需要在本地电脑安装服务端软件,在远程电脑上安装客户端软件。值得一提的是,macOS上只有服务端软件,也就是说它只能共享USB给别人,但不能用别人共享的USB设备。并且,macOS的服务端是没有UI界面的,点击launchpad中的图标只会出现一个信息窗口。其他平台是有图形界面的。

macOS上点击USB over Network图标之后出现的信息窗口
它的原理是服务端在某一个端口上启动USB共享,然后客户端连接到这个端口上,就可以通过TCP传输USB数据了。

在macOS上,我们打开终端,输入以下命令列出所有可用USB设备。

/Applications/USB\ over\ Network.app/Contents/MacOS/ctl dev list

输出类似这样:

ID VID: PID: REV Port Device name and status
0 0781:55ae:3001 2 Extreme 55AE /available, 323230355057343033353538/

其中我们通过USB设备的ID来连接。在上面的输出中,我连接了我的移动硬盘, ID0

使用以下命令启动USB共享:

/Applications/USB\ over\ Network.app/Contents/MacOS/ctl dev share 0 -p 33000

其中share 0意思是分享ID0的USB设备,你需要根据实际情况选择。-p 33000意思是在33000端口上启动分享,你也可以改成任意空闲端口。

如果你使用图形界面,就非常简单了,直接选中想分享的设备,然后点击分享按钮即可。

图形界面启动USB Over Network分享

现在,如果你的本地电脑有公网IP,远程电脑就能直接连上来了。但是你大概率没有,所以需要配置内网穿透。

修改frps.ini,增加一个用于USB共享的端口。类似这样:

[common]
bind_port = <Your selected port>
bind_addr = 0.0.0.0
token=<Your password>
allow_ports = 47000-49000, 3389, 6666
tls_enable=true

其中6666就是给USB共享新开的端口。

修改frpc.ini,转发你选择的任意端口上的TCP流量,类似这样:

[common]
server_addr = <Your server IP>
server_port = <Your selected port>
token = <Your password>

[usb-stream-tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 33000
remote_port = 6666

其中local_port就是刚刚启动USB分享的时候用的端口,remote_port就是刚刚frps.ini中用到的端口。然后启动frp

./frpc -c frpc.ini

现在,打开USB-over-Network客户端,填写服务器IP与刚刚给USB共享分配的端口号:

Windows客户端上填写服务器IP与端口号


连接成功!现在,你就能在Windows上正常使用这个设备了,就像它直接插在上面一样。当然,由于使用内网穿透,USB的速度会受到网络带宽影响,速度不快,但考虑使用场景,我觉得这并不算是很大的缺点。

Windows 客户端连接成功

使用完之后,记得在服务端断开连接,相当于在远程设备上拔出USB。

Applications/USB\ over\ Network.app/Contents/MacOS/ctl dev unplug 0

其中0是USB设备的ID。

总结

在这篇久违了的博文中,我介绍了如何通过网络共享USB设备,希望对你有所帮助。

评论

此博客中的热门博文

标点论

搭建你自己的“云游戏”

SSH可以做任何事情!