Android手机通过USB线连接电脑上网
很久以前写过一篇博客介绍如何让Android设备通过USB线连接电脑网络,但是文章的最后也说了,这个办法是有遗憾的,就是没法在Android上科学上网了
。接下来就介绍另外一种方法来弥补这个遗憾,即让没有任何网络连接(没插卡、没wifi、开飞行模式)的Android设备通过usb连接电脑即可上网,同时还可以兼容各种网络代理。
操作步骤
废话不多说,先讲怎么作。需要的东西就两样,adb和sing-box(写这篇博客的时候,sing-box的版本是1.8.7)。
- 电脑上下载adb和sing-box。下载之后解压就好了,都是不需要安装的。
- 手机上安装sing-box的apk。
- 分别保存下面的配置文件到手机和电脑
手机端配置文件
1 | { |
电脑端配置文件
1 | { |
- 导入配置文件到手机上的sing-box内,运行
- 电脑上执行
1
sing-box run -c config.json
- 电脑上再开一个命令窗口,执行
1
adb reverse tcp:1080 tcp:1280
DONE
如无意外,这个时候手机已经正常打开网页了🎉🎉🎉
有些app会有异常,是因为它们直接判断了设备既没连接wifi也没连接数据网络。
大致原理
很简单,上网可以非常简略地分为两步:
- 通过dns查询域名获取ip
- 和这个ip对应的服务器建立连接
第6步adb就是把手机的1080端口映射到电脑的1280端口,即访问手机的1080端口就等同于访问电脑的1280端口。
电脑上sing-box就是在本地127.0.0.1:1280上开了一个socks5的代理,规则是dns流量和目的地是53端口的流量通过dns的outbounds出去,其余流量最终走out_socks出去,即前面开的socks5代理,默认就是direct直连。
来到Android这边,Android这边提供了一个114的dns,通过out_socks出去,dns本身是udp流量,所有在out_socks的socks代理上打开了udp_over_tcp。
原理很简单,配置文件我也尽量精简,应该很容易看明白。如果有其他代理分流的需求,根据sing-box的文档再修改配置文件即可。这就比gnirehtet灵活多了😁。