通过 USB 将 Ubuntu 和 Android 进行 USB 网络共享

通过 USB 将 Ubuntu 和 Android 进行 USB 网络共享

我的 PC 上装有 Ubuntu 12.10 系统,Galaxy Nexus 上装有 Android 4.1 系统。现在我想通过 USB 将 PC 的互联网连接与手机共享。我用 Google 搜索了很多次,但我只找到了如何将手机的互联网连接与 PC 共享的答案,但我想反过来做。

答案1

这是不可能的。但如果你的 Android 已经 root 了,有一个技巧,叫做反向 USB 网络共享。 查看本文,作者在 Fedora 上做到了这一点,但我想在 Ubuntu 上实现同样的效果应该没有问题。

答案2

对我来说,在 Kubuntu 15.10 和 Android 4.2.2 上可行的解决方案如下

要求

安卓

  1. busybox 应用程序已安装
  2. 使用 USB 电缆连接至计算机
  3. 在您的 Android 设备上启用 USB 调试(以便能够从您的电脑进行 adb)

电脑

  1. 在你的 /etc/network/interfaces 中你需要有这两行,否则你会得到一个no such device错误

    allow-hotplug usb0
    auto usb0
    
  2. adb 已安装 ( apt-get install android-tools-adb)

联系

  1. 在您的 Android 中,启用“设置”->“连接”->“网络连接”->“网络共享和便携式热点”->“USB 网络共享”选项,这将创建一个到您计算机的 USB 连接,您可以使用ifconfig计算机上的命令查看该连接。查看@接口名称,对我来说就是enxf6759e7fbebd这个。

    enxf6759e7fbebd Link encap:Ethernet  HWaddr a2:61:3c:83:1c:38  
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:6 errors:0 dropped:0 overruns:0 frame:0
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:464 (464.0 B)  TX bytes:0 (0.0 B)
    
    eth0      Link encap:Ethernet  HWaddr 50:e5:49:47:f4:fd  
        inet addr:192.168.178.20  Bcast:192.168.178.255  Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:40894966 errors:0 dropped:0 overruns:0 frame:0
        TX packets:86312833 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:20969506400 (20.9 GB)  TX bytes:120329513606 (120.3 GB)
    
    lo        Link encap:Local Loopback  
        inet addr:127.0.0.1  Mask:255.0.0.0
        UP LOOPBACK RUNNING  MTU:65536  Metric:1
        RX packets:30521 errors:0 dropped:0 overruns:0 frame:0
        TX packets:30521 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0 
        RX bytes:10868749 (10.8 MB)  TX bytes:10868749 (10.8 MB)
    
  2. 使用以下命令在此网络接口上为您的计算机分配一个 IP 地址,sudo ifconfig enxf6759e7fbebd 192.168.42.135 netmask 255.255.255.0其中 enxf6759e7fbebd 是您在上一步中获得的接口。

  3. 启用 IP 转发

    sudo -- sh -c  'echo 1 > /proc/sys/net/ipv4/ip_forward'
    
  4. 使用以下命令在计算机上启用 nat

    sudo iptables -t nat -F
    sudo iptables -t nat -A POSTROUTING -j MASQUERADE
    
  5. 在你的电脑上连接到你的安卓设备

    adb shell
    su
    
  6. 然后你就可以用busybox ifconfig -a命令来检查你的连接了

    rndis0    Link encap:Ethernet  HWaddr FA:08:D6:1A:35:90  
        inet addr:192.168.42.129  Bcast:192.168.42.255  Mask:255.255.255.0
        inet6 addr: fe80::f808:d6ff:fe1a:3590/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0
        TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:0 (0.0 B)  TX bytes:564 (564.0 B)
    

您可以将默认路由添加到您在第 2 点中修复的计算机网络地址,就是busybox route add default gw 192.168.42.135 dev rndis0这样(您可以使用busybox route命令检查您的路由)

脚本

我编写了一个脚本,在启用 USB 网络共享选项(上述第 1 点)后运行该脚本,它可以帮我完成工作

#!/bin/bash
interfaceName=$(ifconfig|grep enx|awk '{print $1}') #Getting interface name
sudo ifconfig $interfaceName 192.168.42.135 netmask 255.255.255.0 # setting Computer IP Address
sudo -- sh -c  'echo 1 > /proc/sys/net/ipv4/ip_forward' # Enabling IP Forwarding 
sudo iptables -t nat -F
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
adb shell "su -c 'busybox route add default gw 192.168.42.135 dev rndis0'"

答案3

我发现了一个很棒的工具https://github.com/vvviperrr/SimpleRT。使用起来非常简单,不需要手机的 root 权限。

我使用 Sony Z3 Compact 和安装在笔记本电脑上的 Ubuntu 16.10 测试了 SimpleRT。

步骤如下:

  1. 安装 SimpleRT 提供的 APK
  2. 克隆 SimpleRT Git repo,或者直接选择“下载 ZIP”
  3. 使用终端查找您的活动互联网接口:
    路线 | grep'^default' | grep -o'[^ ]*$'
    
  4. 用上述命令中的 simple-rt-cli/iface_up.sh 中的 LOCAL_INTERFACE 值进行替换。
  5. 在 simple-rt-cli 目录中输入“make”。
  6. 以 root 身份运行终端并启动 CLI:
    ./简单-rt
    
  7. 使用 USB 数据线连接手机

问题(取自官方页面):由于 ConnectivityManager 策略,某些应用程序无法识别反向网络共享互联网连接。只要保持 WiFi 或 3g 连接处于活动状态,连接就会通过 SimpleRT 进行。

相关内容