用root手动配置USB Tethering -- usb-tethering 领域 android 相关 的问题

Configuring USB tethering manually with root


简体版||繁體版
1
vote

问题

中文

我已经用尽了以编程方式启用USB系列:

  • service 方法在我的手机上不起作用(三星注4)。它似乎是某种保护的API,并从 adb 戳戳它没有效果。

  • shell input 方法不适用,因为它要求设备已解锁,并且似乎没有以编程方式和非破坏性解锁设备锁定的方式指纹。

所以,我正在寻找实现这个目标"艰难的方式" ,即做Android用户空间在点击USB系绳的所有内容时做所有的事情。

据我所知,这涉及以下步骤(大多数情况都与您在Linux机器上进行的方法类似):
  1. 通过USB建立与主机的IP连接。这涉及将USB置于 rndis 模式,设置路由,分配IP等。

    我已经弄清楚了如何实现这一点并发布答案这里。

    < / li>
  2. 启动 dnsmasq 实例,通过DHCP为连接的PC分配IP,转发DNS请求。

    如果您不需要DNS服务器检测,则不需要此步骤,并在USB接口上分配静态IPS。

  3. 启用IP转发( /proc/sys/net/ipv4/ip_forward )。

  4. 设置 iptables 以启用转发/伪装。

  5. 更新流量计费的路由表。

我设法编写一堆脚本,它在通过其UI启用USB系列时,通过Android操作系统执行了一堆脚本。要创建脚本,我录制了系统状态( iptables -S ip route show table all ),而不与tetering,然后将差异转换为shell命令以将更改应用于系统。但是,我的复制品仍然不够;系统的某些部分仍然是未配置的,这可以防止流量通过。

有人有一个关于我可能缺失的线索,或者我如何缩小/调试问题?

english

I've exhausted the documented methods of programmatically enabling USB tethering:

  • The service method doesn't work on my phone (Samsung Note 4). It seems to be some sort of protected API, and poking it from adb has no effect.

  • The shell input method is not applicable, as it requires that the device is unlocked, and there doesn't seem to be a way to programmatically and non-destructively unlock a device locked with a fingerprint.

So, I'm looking into achieving this goal "the hard way", i.e. do everything that the Android userspace does when you tap the USB tether checkbox.

As far as I can tell, this involves the following steps (most of which would be similar to how you'd do it on a Linux machine):

  1. Establish an IP connection to the host computer through USB. This involves putting USB in rndis mode, setting up routes, assigning an IP, etc.

    I've already figured out how to achieve this and posted the answer here.

  2. Launch a dnsmasq instance, to assign an IP to the connected PC via DHCP, and forward DNS requests.

    This step shouldn't be necessary if you don't need DNS server detection and assign static IPs on the USB interfaces yourself.

  3. Enable IP forwarding (/proc/sys/net/ipv4/ip_forward).

  4. Set up iptables to enable forwarding/masquerading.

  5. Update routing tables for traffic accounting.

I managed to write a bunch of scripts which replicate exactly the visible effects (described above) as performed by the Android OS when enabling USB tethering through its UI. To create the scripts, I recorded the system state (iptables -S, ip route show table all) with and without tethering, then converted the differences into shell commands to apply the changes to the system. However, my replicas are still not enough; some part of the system remains unconfigured which prevents traffic from going through.

Does anyone have a clue as to what I might be missing, or how I can narrow down / debug the problem?

  

回答列表

0
 
vote
vote
最佳答案
 

一个伙伴让我知道,用于转发的一个 sysctl 设置,用于转发(每个接口的全局一个和一个,然后为IPv6)。

在我的手机上,相关设置是:

  vars=(     net.ipv4.conf.all.accept_redirects=0     net.ipv4.conf.all.forwarding=1     net.ipv4.conf.default.forwarding=1     net.ipv4.conf.ip6tnl0.forwarding=1     net.ipv4.conf.lo.forwarding=1     net.ipv4.conf.p2p0.forwarding=1     net.ipv4.conf.rmnet0.forwarding=1     net.ipv4.conf.rmnet1.forwarding=1     net.ipv4.conf.rmnet2.forwarding=1     net.ipv4.conf.rmnet3.forwarding=1     net.ipv4.conf.rmnet4.forwarding=1     net.ipv4.conf.rndis0.forwarding=1     net.ipv4.conf.sit0.forwarding=1     net.ipv4.conf.wlan0.forwarding=1     net.ipv4.ip_forward=1     net.ipv6.conf.all.forwarding=2     net.ipv6.conf.all.proxy_ndp=2     net.ipv6.conf.default.forwarding=2     net.ipv6.conf.ip6tnl0.forwarding=2     net.ipv6.conf.lo.forwarding=2     net.ipv6.conf.p2p0.forwarding=2     net.ipv6.conf.rmnet0.forwarding=2     net.ipv6.conf.rmnet1.forwarding=2     net.ipv6.conf.rmnet2.forwarding=2     net.ipv6.conf.rmnet3.forwarding=2     net.ipv6.conf.rmnet4.forwarding=2     net.ipv6.conf.rndis0.forwarding=2     net.ipv6.conf.sit0.forwarding=2     net.ipv6.conf.wlan0.forwarding=2 ) ; sysctl "${vars[@]}"   

与其他,转发和束缚作品!

 

A buddy let me know that there is more than one sysctl setting for forwarding (a global one and one per interface, then more for IPv6).

On my phone, the relevant settings are:

vars=(     net.ipv4.conf.all.accept_redirects=0     net.ipv4.conf.all.forwarding=1     net.ipv4.conf.default.forwarding=1     net.ipv4.conf.ip6tnl0.forwarding=1     net.ipv4.conf.lo.forwarding=1     net.ipv4.conf.p2p0.forwarding=1     net.ipv4.conf.rmnet0.forwarding=1     net.ipv4.conf.rmnet1.forwarding=1     net.ipv4.conf.rmnet2.forwarding=1     net.ipv4.conf.rmnet3.forwarding=1     net.ipv4.conf.rmnet4.forwarding=1     net.ipv4.conf.rndis0.forwarding=1     net.ipv4.conf.sit0.forwarding=1     net.ipv4.conf.wlan0.forwarding=1     net.ipv4.ip_forward=1     net.ipv6.conf.all.forwarding=2     net.ipv6.conf.all.proxy_ndp=2     net.ipv6.conf.default.forwarding=2     net.ipv6.conf.ip6tnl0.forwarding=2     net.ipv6.conf.lo.forwarding=2     net.ipv6.conf.p2p0.forwarding=2     net.ipv6.conf.rmnet0.forwarding=2     net.ipv6.conf.rmnet1.forwarding=2     net.ipv6.conf.rmnet2.forwarding=2     net.ipv6.conf.rmnet3.forwarding=2     net.ipv6.conf.rmnet4.forwarding=2     net.ipv6.conf.rndis0.forwarding=2     net.ipv6.conf.sit0.forwarding=2     net.ipv6.conf.wlan0.forwarding=2 ) ; sysctl "${vars[@]}" 

With these and the other ones, forwarding and tethering works!

 
 

相关问题

132  如何在USB上设置反向系数?  ( How to set up reverse tethering over usb ) 
我的htc g2手机植根于植物和运行cyanogenmod 7 我没有数据计划。 有时我想在没有Wi-Fi的时候将手机连接到Internet,更新市场应用程序,将SMS消息备份到Gmail,从Gmail同步新联系人等。我不能用USB质量做的事情存储模式。 我有一个连接到互联网的Windows 7专业计算机,但我不...

0  Android系绳检测旁路不适用于三星Galaxy S8  ( Android tether detection bypass not working on samsung galaxy s8 ) 
我已经将Dun与 settings put global tether_dun_required 0 在我的Galaxy S8上设置了几个月,它很棒。在过去的几天里,它已经停止了工作,我不确定问题是什么。设备上的TTL设置为65,因此不应该是一个问题。我检查了DUN是否设置为0,其中 settings get glo...

1  互联网共享 - Ubuntu  ( Internet sharing ubuntu ) 
我有一个智能手机(来自本地制造商)。它有一个选择"通过USB电缆共享Windows PC Internet" 的"USB Internet" 。 我的第一个问题是我是否可以通过这个选项桥接我的Ubuntu Internet连接? 当我将手机连接到我的PC网络管理器时,显示一个新的以太网连接"有线连接2" ,其中包含名...

1  用root手动配置USB Tethering  ( Configuring usb tethering manually with root ) 
我已经用尽了以编程方式启用USB系列: service 方法在我的手机上不起作用(三星注4)。它似乎是某种保护的API,并从 adb 戳戳它没有效果。 shell input 方法不适用,因为它要求设备已解锁,并且似乎没有以编程方式和非破坏性解锁设备锁定的方式指纹。 所以,我正在寻找实现这个目标"...

5  如何在Jellybean设备上启用USB系列?  ( How do i enable usb tethering on a jellybean device ) 
JellyBean是否支持USB系绳? 是否有一种方法编译jb源,因此始终启用USB系绳? 我想通过操作系统拥有支持,而不是依赖于应用程序。 ...

2  如何在系列时限制数据下载  ( How to limit data download when tethering ) 
当我将Android Mobile连接到我的笔记本电脑时,我通过USB系列使用3G数据。我的笔记本电脑上的几个背景活动(赢8.1赢了),例如常规更新。这排出了每月包,分配的下载/上传限制无时间耗尽。 有没有办法监控系束缚连接和拒绝/块背景下载,任何文件大于5-10MB的文件? ...

2  如果我的笔记本电脑无法通过系列连接到互联网,我应该经过什么检查?  ( What checks should i go through if my laptop cant connect to the internet throu ) 
我需要通过智能手机通过智能手机将我的笔记本电脑连接到互联网,我正在使用带有Android 4.2.2的Galaxy GT-S7270,带Windows 7的笔记本电脑和带Windows 8的平板电脑。 每当我尝试使用WiFi热点时,我可以通过我的平板电脑连接和访问Internet,笔记本电脑连接到智能手机后获得有限...

2  如何从WiFi Hotspot访问USB系扣设备?  ( How can i access usb tethered device from wifi hotspot ) 
所以我发现了USB系绳IP为192.168.52.x的艰难方式,WiFi地址为192.168.53.x。 我的目标是能够从WiFi访问USB系列设备(Raspberry PI),就像它是相同的网络一样。 如果我有特定的端口,那就没关系,但如果可能的话,我想避免这种情况。我找到了这个xda post 关于反向系列(共享...

85  如何通过USB电缆在Android手机上使用Windows Internet  ( How to use windows internet on android phone through usb cable ) 
我正在使用Android 4.4.2(在 micromax联合2 - A106 )。在家中我有一个Windows PC,具有高速宽带互联网连接。我没有无线路由器或接入点。我只想在手机上使用PC的Internet连接。我尝试了多种方法,但没有似乎工作。 方法1:使用本机Android 4.4.2选项 在我的手机中...

13  当设备插入PC时,自动启用USB系列  ( Automatically enable usb tethering when device is plugged into a pc ) 
我在nexus 5上运行了Android棉花糖5.我通过USB将其定为我的笔记本电脑。有没有办法配置事物,以便在插入事物时自动发生USB系列? (接触USB系束度需要5-6次接触。) ...




© 2022 it.wenda123.org All Rights Reserved. 问答之家 版权所有