通过USB连接方式共享安卓的网络连接
通过USB Tethering方式共享Android的Internet连接
现代的手机都支持Wi-Fi tethering,也就是通过Wi-Fi让手机的数据网络连接共享给电脑使用,也称为”无线热点”(HotSpot)。此外,你在使用iPhone的时候,会发现一个非常有用的功能,就是通过USB连线来共享数据网络的Internet连接,而且对于苹果手机和苹果电脑是即插即用的。
实际上,Android也支持通过USB连接共享网络,这种技术称为 USB Tethering
,设置方法: Settings => Network & internet => Hotspot & tethering => USB tethering
。
但是,很不幸,此时将Android手机通过USB数据线连接到Mac电脑上没有任何反应,完全不像iPhone开启”个人热点”的USB共享后连接到Mac电脑上即插即用。这是因为macOS没有内置 HoRNDIS(the USB tethering driver for Mac OS X) 。
HoRNDIS(用于Mac OS X的USB网络共享驱动程序)
HoRNDIS(发音为“ horrendous ”)是Mac OS X的驱动程序,它使您可以使用Android手机的本机USB捆绑模式来访问Internet。
安装
从源/二进制
- 获取安装软件包(自己下载或构建安装软件包)
- 运行安装包
从自制
brew cask install horndis
sudo kextload /Library/Extensions/HoRNDIS.kext
组态
- 假设安装过程没有错误,请在安装完成后通过USB将手机连接到Mac。
- 进入手机上的设置菜单。
- 在“连接”部分的Wi-Fi和蓝牙下方:
- 选择“更多...”
- 选择“网络共享和便携式热点”
- 选中“ USB绑定”框。它应该闪烁一次,然后进行稳定检查。
解除安装
- 删除
HoRNDIS.kext
下面/System/Library/Extensions
和/Library/Extensions
文件夹 - 重启你的电脑
建立源
-
git clone
仓库 - 只需在checkout目录中运行xcodebuild就足以构建kext。
- 如果您希望将其打包,则可以运行
make
将其打包到build /目录中
调试和开发说明
本节包含有关开发和调试驱动程序的提示和技巧。
USB设备信息
Mac OS系统菜单 -> 关于本机 -> 系统报告 -> 硬件 / USB 列出OS可以识别的所有USB设备。不幸的是,它没有提供USB描述符。
lsusb -v
它打印USB配置,例如接口和端点描述符。您可以为所有设备打印它,或将输出限制为特定的设备。为了运行此命令,您需要安装usbutils。
- Homebrew用户:
brew install mikhailai/misc/usbutils
请不要安装Homebrew Core的lsusb软件包,这是同名的另一个实用程序。 - Macports用户:
sudo port install usbutils
IO注册表
ioreg -l -r -c IOUSBHostDevice
该命令列出了所有USB设备下的所有Mac OS IO注册表信息。与lsusb不同,ioreg讲述了Mac OS如何识别USB设备和接口,以及如何将驱动程序与这些接口进行匹配。在-r -c IOUSBHostDevice
限制输出到USB设备; 要获取完整的操作系统注册表,请运行ioreg -l
。
操作系统日志
LOG(....)
遍布HoRNDIS代码的语句调用IOLog
函数。在Mac OS El Capitan(10.11)和更早版本上,日志消息进入/var/log/system.log
。从Sierra(10.12)开始,这些消息将不再被写入system.log
,而可以通过以下方式查看:
-
GUI,使用控制台应用程序,位于Utilities文件夹中。您需要
process:kernel
在搜索框中输入以过滤相关消息。 -
命令行,使用
log
命令。例如:log show --predicate process=="kernel" --start "2018-12-11 22:54:00"
起始值必须是过去的几分钟,因此它不会淹没控制台。这是一个方便的命令,可打印过去3分钟的消息:log show --predicate process=="kernel" --start "$(date -v-3M +'%F %T')"
我观察到Mac OS日志记录不可靠(尤其是在Sierra中)。在某些情况下,消息可能会出现乱码(看起来像不良的多线程代码)。在其他情况下,GUI或命令行可能丢失所发出的消息。有时,重新加载驱动程序可能会解决此问题。
https://github.com/jwise/horndis
注解
HoRNDIS is a kernel extension (“kext”) that makes it possible to use your Android phone’s built-in USB tethering support on your Mac OS X system.
由于HoRNDIS是内核扩展,所以在Catalina (macOS 10.15)上无法直接安装,因为kext开发需要通过Apple认证。解决方法是使用 unable to install on macOS Catalina #102 中提供的下载包 HoRNDIS-9.2-catalina_install.pkg.zip 。
https://github.com/jwise/HoRNDIS/files/3719733/HoRNDIS-9.2-catalina_install.pkg.zip
安装完 HoRNDIS 驱动以后,需要重启一次macOS,重启以后,将启用了 USB tethering
设置的Android手机通过USB数据线连接到Mac电脑上,此时在Mac的 Networks
设置中会看到一个 Etnernet Adaptor
:
此时,如果你的Android能够通过Wi-Fi上网或者移动数据网络上网,则你的Mac电脑也能够通过USB数据线共享网络上网了。
注解
启用了 USB tethering
之后,虽然电脑能够通过共享Internet上网,但是,对于 手机的VPN连接是无法直接共享给电脑使用的。此时,你需要使用root过的Android手机,并结合 VPN Hotspot 才能完美使用VPN共享。
注解
Linux内核需要编译 USB Network Adapters
驱动支持,启用 Host for RNDIS and ActiveSync devices
才可以使用Android USB Tethering。请参考: Gentoo linux - Android USB Tethering
参考
- How To Configure Android USB Tethering on Mac OS X
- How to Tether Your Android Phone and Share Its Internet Connection with Other Devices
- Gentoo linux - Android USB Tethering
- V部落博客管理平台开源啦! Vue+SpringBoot强强联合!
- SpringBoot+SpringSecurity处理Ajax登录请求
- MongoDB副本集配置
- MongoDB副本集搭建
- vhr部门管理数据库设计与编程
- SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(六)
- 权限管理模块中动态加载Vue组件
- axios请求封装和异常统一处理
- SpringSecurity中密码加盐与SpringBoot中异常统一处理
- SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(二)
- SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)
- Java操作MongoDB
- 初识MongoDB分片
- Linux上安装Redis
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Linux采用双网卡bond、起子接口的方式
- PHP实现字母数字混合验证码功能
- php+pdo实现的购物车类完整示例
- CentOS7怎么执行PHP定时任务详解
- Linux下PHP+Apache的26个必知的安全设置
- linux中ssh免密通信的实现
- 怎么修改CentOS服务器时间为北京时间
- Laravel5.1 框架控制器基础用法实例分析
- Laravel5.1 框架模型软删除操作实例分析
- Laravel 手动开关 Eloquent 修改器的操作方法
- 怎么测试Linux下tcp最大连接数限制详解
- Laravel 5.1 框架Blade模板引擎用法实例分析
- 使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
- Linux 系统下安装JDK1.8的教程详解
- php学习笔记之字符串常见操作总结