如何从 Linux 计算机连接到 Android 手机的“USB 网络共享”创建的网络?

如何从 Linux 计算机连接到 Android 手机的“USB 网络共享”创建的网络?

我在具有移动服务的 Android 手机上打开“USB 网络共享”,并使用 USB 电缆将手机连接到 Linux 计算机。

在电脑上面,

  • 哪个网络接口用于连接手机的“USB 网络共享”创建的网络?

  • 它是自动连接到网络的,还是我应该运行一些命令?如果是前者,为什么我的计算机上没有互联网连接?

请注意,我已关闭无线接口。谢谢。

$ sudo ifconfig wlp5s0 down  
$ sudo iwconfig
lo        no wireless extensions.

enp4s0    no wireless extensions.

wlp5s0    IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=22 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
          
enp0s20f0u3  no wireless extensions.


$ sudo ifconfig
enp4s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 20:47:47:73:02:6e  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 31812  bytes 2845669 (2.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 31812  bytes 2845669 (2.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

答案1

至少在我的 Sony Xperia 5 III 和 Debian 11 中,手机usb0使用rndis_host驱动程序显示为网络接口。

驱动程序模块rndis_host依赖于名为cdc_etherusbnet和 的其他模块mii

网络接口名称usb0可能是由于 Debian 默认添加了一个/lib/systemd/network/73-usb-net-by-mac.link文件,该文件告诉 USB 网络接口使用基于 MAC 地址的名称(enx112233445566)...但至少有些手机不会通过RNDIS 接口,但驱动程序将分配一个随机 MAC。因此,udev不会获得该ID_NET_NAME_MAC属性,因此经典的基于内核的名称usb0将保留。

其他发行版可能会使用基于设备路径的名称,例如enp0s20f0u3:这可能不是最佳的,因为路径可能会有所不同,具体取决于用于连接手机系绳的 USB 端口以及当前连接的其他 USB 设备的数量。

那么,你的问题的答案:

哪个网络接口用于连接手机的“USB 网络共享”创建的网络?

该名称可能因 Linux 发行版和手机型号而异:可能usb0是基于 MAC 的名称(例如 )enx112233445566,也可能是基于路径的名称(例如 )enp0s20f0u3

它是自动连接到网络的,还是我应该运行一些命令?如果是前者,为什么我的计算机上没有互联网连接?

如果不了解您正在使用的 Linux 发行版以及计算机的具体配置,就无法明确回答这个问题。您的系统是否配置为尝试通过 DHCP 自动配置热插拔网络接口?它会自动配置不寻常的接口名称吗usb0

注意sudo ifconfig不带任何选项只会显示活动并已配置网络接口;您还需要sudo ifconfig -a查看未配置的。

的输出sudo iwconfig表明您的系统当前有一个未配置的基于 USB 的网络接口enp0s20f0u3。这可能是你的手机。如果您使用 NetworkManager,您可能只需要为其配置一个连接:将其设置为使用 DHCP 并自动连接,甚至可能选中“所有用户可以连接到此网络”,因此它成为系统范围的网络连接而不是仅当您的用户帐户登录时才可用。

如果您正在使用其他网络配置子系统,您可能需要同样将其配置为自动连接。连接到新网络可能是一项安全敏感操作,因此您的系统可能默认不会自动连接以前未知的热插拔网络接口,以便为本来应该连接的系统提供一定程度的保护,免受邪恶女仆类型的攻击。保持气隙。


此外,不同版本的 RNDIS USB 网络接口使用略有不同的 USB 设备类标识符。大约在 2018 年 5 月之前,内核知道三种可能的方法来识别 USB 设备上的 RNDIS 网络接口; 2018 年 5 月,添加了第四种方式,显然较新的 Android 设备更喜欢使用最新的方式。

因此,如果您的内核比该版本更旧,则低级usbnetcdc_ether内核模块可能不包含用于检测 USB 接口类“杂项”、子类 4、协议 1 作为 RNDIS USB 网络接口的代码,从而导致无法加载正确的rndis_host在网络共享模式下插入手机时的 USB 网络协议模块。在这种情况下,可能根本检测不到网络接口。

(我记得这一点是因为我必须将修复此问题的内核补丁向后移植到需要连接新 Android 手机的系统,并且在更新特定应用程序之前无法接受内核升级......说来话长。)

相关内容