我有一个HTC Desire S,可以选择通过USB连接并使用计算机的Internet连接。在Windows上可以正常使用,但是我正在努力在Ubuntu中进行设置。
当我插入电源并从usb菜单中选择Internet pass-through时,就会创建usb1设备,并且可以ping它的IP地址。我已经尝试了各种iptables配置并设置了nat,但是我不确定自己是否做对了,还是不确定是否需要一些其他配置...

感谢您的帮助。

评论

我结合使用了来自trac.osuosl.org/trac/replicant/wiki/ReplicantUSBNetworking和translate.googleusercontent.com/…的信息来使它正常工作。在下面回答。

#1 楼

以下内容会在一段时间内起作用,但仅适用于浏览器。 br />对于ubuntu,请编辑/ etc / network / interfaces并添加以下几行: />如果未将网络地址自动分配给usb0或usb1,则必须手动进行操作。

然后您需要在linux计算机上设置NAT。类似的东西:

iface usb0 inet dhcp
iface usb1 inet dhcp


您还需要一个DNS服务器:

sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo echo 1 > /proc/sys/net/ipv4/ip_forward 


这可以工作几分钟,但是过了一会儿电话放弃了寻找HTC Sync并断开连接的操作。

对于有根电话,

如果您有根电话,则可以永久连接(fre3vo对我有用)。
使用adb执行以下操作。

为网络和adb启用USB模式:

sudo apt-get install bind9


将IP分配给手机上的usb0设备:

adb shell echo 6 > /sys/devices/platform/msm_hsusb/usb_function_switch


添加默认路由。该IP应该是在linux中分配给usb0的IP:

adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up


设置DNS服务器。这是Google的开放式DNS服务器,但如果您有DNS服务器,它也可以是Linux计算机的IP:

adb shell route add default gw 192.168.99.1 dev usb0


评论


根据传说,您可以通过执行以下操作来伪造HTC同步:在HTC手机上,当您插入USB并选择Internet直通时,它将等待HTC同步并放弃。它正在侦听端口6000。因此,您只需要伪造与netcat的HTC同步。在命令行上尝试以下操作:phoneip = $(arp -n | grep usb | awk'{print $ 1}')echo -n -e“ \ x00 \ x02 \ x00 \ x00” | nc $ phoneip 6000> / dev / null正在寻找的十六进制值00 02 00 00。

– geffchang
2013年6月12日在3:27



@geffchang,谢谢!对于Windows用户,当移动设备尝试通过USB连接时,可以运行netsh interface ip show config查看所有接口名称,然后运行netsh interface ip show config name =“ Local Area Connection#2”来获取该接口。 ,其中本地连接#2就是调用新适配器的方式。为了方便起见,您可以重命名。

–山姆·哈斯勒
15年4月27日在11:54

#2 楼

A制作了这个小小的bash,可以自动执行所有操作。
只需将手机以充电模式插入计算机,然后运行此bash。

#3 楼

由于我本人无法访问Linux计算机,因此无法测试此解决方案,但是您可以尝试此处描述的步骤(Google俄语翻译)。

对翻译的评论:


“ rutovanym”表示扎根;
WB或BB表示“老大哥”(桌面);
smarta是“ smartphone's”的缩写。 !

评论


谢谢,但是有一个比桥接接口更简单的方法。

–蓝灰色
2011年10月24日16:12

#4 楼

好的,这正是我所做的,不需要植根HTC:

设置bind9和NAT等...

注意:
1:如果您只是做sudo echo 1> / proc / sys / net / ipv4 / ip_forward,您将获得权限错误,因此这是该进程的脚本
2:您可以通过添加特定于特定参数的参数使iptables更具体地说明其工作方式设备。


cd ~
echo '!/bin/bash
apt-get install bind9
iptables -A POSTROUTING -t nat -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward' > setup_bind9_nat.sh

chmod +x setup_bind9_nat.sh
sudo ./setup_bind9_nat.sh


现在插入电话,然后选择“互联网通过”

等待设备出现在以下位置:
ifconfig
检查它是否也位于:
arp

我发现必须拔下设备的插头,然后再重新插入,以使其出现在arp中,但事情没做如果arp没有显示该设备,则该设备将无法正常工作。 >

#change this line to be more specific if you have more than one usb network device
phone_usb_device="usb"
get_ip ()
{
    arp -n | grep $phone_usb_device | awk '{print }'
}

#TODO: This needs a timeout and loop needs cleaning up, but works fine and borrowed from another post.
echo "waiting for IP on computer usb"
while [[ `get_ip` < 192 ]];do sleep 2; done
phoneip=`get_ip`
echo "IP adress is $phoneip "

echo -n -e "\x00\x02\x00\x00" | nc -q 2 $phoneip 6000 > /dev/null



我可以使用D-Bus编写此版本,以便当插入设备等时后一部分自动执行。...

确定这是我正在进行的工作,我在d-bus上找不到任何“通用”的东西,所以我选择了使用udev的一些hack解决方案。我必须看看我是否可以更好地过滤匹配的参数,还要在最后一个脚本上添加一个超时,以防万一,看看我是否可以用更好的东西代替arp,例如在/ proc

这是我从/etc/udev/rules.d创建的.rules文件。


cat /etc/udev/rules.d/htc-desire.rules


您可以随意命名,但不要开始有了NUMBER,它就可以最后运行。

#KERNEL=="usb?" or DRIVERS=="usb" not sure which is best, may need extra mode information too from usb device.
SUBSYSTEM=="net", DRIVERS=="usb", ATTRS{manufacturer}=="HTC", ATTRS{idProduct}=="0ffe", RUN+="/home/olli/chain_mock_htc_sync.sh $kernel"




Ubuntu is setup to create the file with the correct permissions already 


ls -lrt /etc/udev/rules.d/htc-desire.rules 
-rw-r--r-- 1 root root 248 Jun 26 22:09 htc-desire.rules


基本上,如果您看不到这3个字母,


sudo chmod a+r /etc/udev/rules.d/htc-desire.rules 


然后'将需要另外两个文件,一个要链接另一个文件,因为udev中的RUN会阻塞其他所有文件(即使最后运行!)...嗯...
>我现在在我的主目录中创建了文件“ / home / olli /” ...,所以请记住用创建文件的位置替换“ / home / olli /”位:

我,cd到我的主目录。


cd ~


创建一个名为


chain_mock_htc_sync.sh


的文件,其中包含以下内容:



#!/bin/bash
/home/olli/mock_htc_sync.sh "" &
exit



使其可执行


chmod +x chain_mock_htc_sync.sh


创建另一个名为


mock_htc_sync.sh
的文件

包含以下内容


#!/bin/bash
#change this line to be more specific if you have more than one usb network device

phone_usb_device=""
get_ip ()
{
    arp -n | grep $phone_usb_device | awk '{print }'
}

#TODO: This needs a timeout and loop needs cleaning up, but works fine and borrowed from another post.
echo "waiting for IP on computer $phone_usb_device"
while [[ `get_ip`  /dev/null


使其可执行:
q4312078q

希望我应该有一个pos很好的整理版本。 (大概是明天)。

#5 楼

对于无需生根的与USB和Android和Linux进行USB反向绑定,请在此处查看我的答案