我正在努力通过 USB 将互联网从我的电脑传输到我的手机(运行 Android)。我不知道如何实现这一点,但我知道我需要一个 USB 网络接口,例如usb0
.插入手机时不会自动创建此界面。
如何创建这个 USB 网络接口?这可以在 Linux 中完成还是必须在 Android 手机上完成?
笔记: 如果我在手机上启用 USB 网络共享,则会在 Linux 中创建相应的 USB 接口。然而,这会自动配置为使用手机作为网络设备(或网关?)并将互联网从我的手机传递到我的计算机,这与我想要做的相反。
答案1
实际上,USB 网络共享在您的手机和 PC 之间创建了对称连接。您的流量可以流向的方向仅由网络接口配置和每端运行的服务定义。
为了让流量从手机流到 PC,您可以(例如):
- 配置您的 PC 以运行 DHCP 并共享其互联网连接
- 在您的 Android 手机上激活 USB 网络共享:
- 在你的 Android 手机上运行 dhcp 客户端(以 root 身份):
netcfg usb0 dhcp
或者
dhclient usb0
不同的手机可能有不同的界面名称,包括等rndis0
。rmnet0
这些可以通过 找到ifconfig
。
如果出现问题,也可能值得尝试g_ether
在手机上手动加载内核模块。
答案2
嗯,我可以跟大家分享一下我的经验:
在手机上(三星 J1 (Android 5.1.1)根): 积极的开发者选项>> 活跃USB调试>> 我要去安克雷奇至网络以及便携式活动区安克雷奇(抱歉翻译,我来自古巴)USB网络>> 当我这样做时,我打开虚拟终端模拟器(一个 apk),然后访问根( su
) 然后我用 来检查网络接口ifconfig
,它返回一个名为“新”的接口rndis0与IP 192.168.42.129
在装有 Debian 的 PC 上:我打开终端并访问根(只是不必sudo
每次都放置)>>ifconfig
并且它返回一个名为“新”的接口USB0和IP 192.168.42.111
如果您从手机 ping 到 PC,反之亦然,一切都应该没问题(我在两侧得到答案),现在是时候给手机一个网关了,所以在手机的终端模拟器中:
route add default gw 192.168.42.111 dev rndis0
>> 放在这里PC 的 IP 此时,您应该能够从终端仿真器 ping Google DNS(通过 IP 和名称),如果您的互联网连接不需要代理服务器配置,则您的手机通过 USB 可以连接互联网电缆...
PS:如果你的电脑和手机没有自动获取IP,请使用以下命令:
在电脑上:
ifconfig usb0 10.42.0.1 netmask 255.255.255.0
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
在电话上:
ifconfig rndis0 10.42.0.2 netmask 255.255.255.0
busybox route add default gw 10.42.0.1 dev rndis0
并配置DNS(还是电话):
mount -o remount, rw /system
echo 'nameserver 192.168.6.40' > /system/etc/resolv.conf
mount -o remount, ro /system
iptables -t nat -I OUTPUT 1 -p udp --dport 53 -j DNAT --to-destination 192.168.6.40:53
答案3
安卓8.0
ifconfig usb0 192.168.225.3 netmask 255.255.255.0
ndc network create 9792
ndc network interface add 9792 usb0
ndc network route add 9792 usb0 0.0.0.0/0 192.168.225.1
ndc resolver setnetdns 9792 8.8.8.8 8.8.4.4
ndc network default set 9792