В качестве альтернативного метода (который делает то же самое, что и сценарий Perl, показанный здесь, но без использования Perl), вы можете используйте то, что предложено здесь, что я расшифрую ниже ( с некоторыми изменениями, которые я сделал):
Во-первых, установите bind9, так как это позволит избежать проблем с переадресацией DNS.
sudo apt-get install bind9
Добавьте правило POSTROUTING в iptables:
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
Разрешить пересылку пакетов:
echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
Теперь подключите телефон и выберите «Проход через Интернет».
Подождите, пока устройство появится в ifconfig
.
Проверьте это также в arp
.
Я обнаружил, что мне нужно отключить устройство, а затем снова подключить его, чтобы оно появилось в arp
, все работает неправильно, если arp
не показывает устройство.
Затем устройство будет ждать, пока HTC Sync отправит ему сообщение, поэтому вам нужно сымитировать сообщение HTC Syncs:
#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 $1}'
}
#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.
Если вы просто хотите протестировать функцию Internet Pass Through, вы можете использовать только самую последнюю строку, поскольку все, что нужно телефону, — это двоичная последовательность на порту 6000.
Надеюсь, это поможет.
person
Alexandre Schmidt
schedule
04.02.2014