Làm thế nào để bạn thiết lập truyền qua internet (đảo ngược) trên linux?


19

Tôi có một chiếc HTC Desire S có tùy chọn kết nối qua usb và sử dụng kết nối internet của máy tính. Điều này hoạt động tốt trên Windows, nhưng tôi đang vật lộn để thiết lập nó trong Ubuntu. Khi tôi cắm và chọn truyền qua internet từ menu usb, thiết bị usb1 được tạo và tôi có thể ping địa chỉ IP của nó. Tôi đã thử các cấu hình iptables khác nhau và thiết lập nat, nhưng tôi không chắc liệu mình có làm đúng hay không, nếu cần phải có một số cấu hình bổ sung ...

Cảm ơn vì bất kì sự giúp đỡ.


Tôi đã làm cho nó hoạt động bằng cách sử dụng kết hợp thông tin từ trac.osuosl.org/trac/replicant/wiki/ReplicantUSBNetworkingtranslate.googleusercontent.com/ . Trả lời dưới đây.
bluegray

Câu trả lời:


11

Sau đây hoạt động trong một thời gian, nhưng chỉ cho trình duyệt.

Khi bạn cắm điện thoại qua usb và chọn truyền qua Internet, bạn sẽ nhận được một thiết bị RNDIS mới (usb0 hoặc usb1). Đối với Ubuntu, chỉnh sửa / etc / mạng / giao diện và thêm các dòng sau:

iface usb0 inet dhcp
iface usb1 inet dhcp

Điều này sẽ tự động gán IP khi thiết bị được thêm vào. Nếu một địa chỉ mạng không được gán tự động cho usb0 hoặc usb1, bạn phải thực hiện thủ công.

Sau đó, bạn cần thiết lập NAT trên máy tính linux của bạn. Cái gì đó như:

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

Bạn cũng cần một máy chủ DNS:

sudo apt-get install bind9

Điều này hoạt động trong vài phút, nhưng sau một thời gian, điện thoại từ bỏ việc tìm kiếm HTC Sync và ngắt kết nối.

Đối với điện thoại đã root

Bạn có thể kết nối vĩnh viễn nếu bạn có điện thoại đã root (fre3vo làm việc cho tôi). Thực hiện như sau với adb.

Kích hoạt chế độ usb cho mạng và adb:

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

Gán IP cho thiết bị usb0 trên điện thoại:

adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up

Thêm một tuyến đường mặc định. IP phải là IP được gán cho usb0 trong linux:

adb shell route add default gw 192.168.99.1 dev usb0

Đặt máy chủ DNS. Đây là máy chủ DNS mở của google, nhưng nó có thể là IP của máy tính linux của bạn nếu bạn có máy chủ DNS:

adb shell setprop net.dns1 8.8.8.8

2
Theo truyền thuyết, bạn có thể giả mạo đồng bộ hóa HTC bằng cách thực hiện các thao tác sau: Trên điện thoại HTC, khi bạn cắm usb và chọn thông qua internet, nó sẽ chờ HTC đồng bộ hóa và bỏ cuộc. Nó đang nghe trên cổng 6000. Vì vậy, bạn chỉ cần giả mạo đồng bộ hóa HTC với netcat. Hãy thử điều này tại dòng lệnh: phoneip=$(arp -n | grep usb | awk '{print $1}') echo -n -e "\x00\x02\x00\x00" | nc $phoneip 6000 > /dev/null Giá trị hex của 00 02 00 00tất cả những gì nó đang tìm kiếm.
geffchang

@geffchang, Cảm ơn! Đối với người dùng windows, khi điện thoại di động đang cố gắng kết nối qua USB, bạn có thể chạy netsh interface ip show configđể xem tất cả các tên giao diện, và sau đó netsh interface ip show config name="Local Area Connection #2"để có được giao diện đó, nơi mà Local Area Connection #2bất kỳ bộ điều hợp mới nào được gọi. Bạn có thể đổi tên này cho thuận tiện.
Sam Hasler

3

A làm bash nhỏ này để tự động hóa tất cả. Chỉ cần cắm điện thoại của bạn ở chế độ sạc vào máy tính của bạn và chạy bash này.

#!/bin/bash
/opt/android-sdk-update-manager/platform-tools/adb shell 'echo 6 > /sys/devices/platform/msm_hsusb/usb_function_switch'
sleep 1
/opt/android-sdk-update-manager/platform-tools/adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up
sleep 1
/opt/android-sdk-update-manager/platform-tools/adb shell setprop net.dns1 8.8.8.8

get_ip ()
{
ifconfig usb0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep .
}

echo "waiting for IP on computer usb0"
while [[ `get_ip` < 192 ]];do sleep 2; done
ip=`get_ip`
echo "IP adress is $ip "
/opt/android-sdk-update-manager/platform-tools/adb shell route add default gw $ip dev usb0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

0

Vì bản thân tôi không có quyền truy cập vào máy Linux, tôi không thể kiểm tra giải pháp này nhưng bạn có thể thử các bước được mô tả ở đây (Google dịch từ tiếng Nga) .

Nhận xét cho bản dịch:

  • "rutovanym" có nghĩa là bắt nguồn từ;
  • WB hoặc BB có nghĩa là Big Brother (máy tính để bàn);
  • smarta là viết tắt từ "điện thoại thông minh".

Chúc may mắn!


Cảm ơn, nhưng có một cách dễ dàng hơn là bắc cầu qua các giao diện.
bluegray

0

Ok, đây chính xác là những gì tôi đã làm, không cần root HTC mong muốn:

Thiết lập bind9 và NAT, v.v ...

lưu ý: 1: nếu bạn chỉ thực hiện sudo echo 1> / Proc / sys / net / ipv4 / ip_forward, bạn sẽ gặp lỗi quyền, vì vậy đây là tập lệnh cho quy trình 2: Bạn có thể làm cho iptables cụ thể hơn về cách thực hiện bằng cách thêm thông số cho các thiết bị cụ thể.


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

bây giờ hãy cắm điện thoại của bạn và chọn 'internet qua'

chờ thiết bị xuất hiện trong: ifconfig kiểm tra xem nó cũng ở trong: arp

Tôi thấy rằng tôi phải rút phích cắm thiết bị sau đó cắm lại để thiết bị xuất hiện trong arp, mọi thứ không hoạt động đúng nếu arp không hiển thị thiết bị.

Sau đó, thiết bị sẽ ngồi chờ HTC Sync gửi tin nhắn để bạn phải giả lập tin nhắn 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

Tôi có thể viết một phiên bản này bằng D-Bus để phần sau tự động thực thi khi thiết bị được cắm, v.v ....

Ok đây là công việc của tôi đang tiến hành, tôi không thể tìm thấy bất cứ điều gì 'chung chung' trên d-bus vì vậy tôi đã chọn một chút giải pháp hack bằng udev .. Điều này không hoàn hảo, ví dụ, lệnh được chạy hai lần, vì vậy tôi Tôi sẽ phải xem liệu tôi có thể lọc các tham số phù hợp tốt hơn một chút không, cũng thêm thời gian chờ vào tập lệnh cuối cùng, chỉ cần nhập và xem liệu tôi có thể thay thế arp bằng thứ gì đó tốt hơn một chút không, nói là tìm trong / Proc

đây.s tập tin .rules của tôi từ /etc/udev/rules.d tôi đã tạo


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

Bạn có thể gọi nó là bất cứ điều gì bạn thích nhưng KHÔNG BẮT ĐẦU NÓ VỚI MỘT SỐ, theo cách đó, nó sẽ được chạy sau cùng.

Thêm phần sau vào tệp dưới dạng sudo bằng trình chỉnh sửa bạn chọn, v.v ....


#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

Về cơ bản, nếu bạn không thấy 3 'r,


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

Sau đó, bạn sẽ cần thêm hai tệp, một tệp để xâu chuỗi tệp kia, vì RUN từ udev sẽ chặn mọi thứ khác (mặc dù nó chạy cuối cùng !!) ... hmm ... dù sao đi nữa:

Bây giờ tôi đã tạo các tệp trong thư mục chính của mình "/ home / olli /" ... vì vậy hãy nhớ thay thế bit '/ home / olli /' bằng bất cứ nơi nào bạn tạo tệp:

vì vậy đối với tôi, cd vào thư mục nhà của tôi.


cd ~

tạo một tập tin gọi là


chain_mock_htc_sync.sh

chứa những điều sau đây:



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

làm cho nó thực thi


chmod +x chain_mock_htc_sync.sh

tạo một tập tin khác gọi là


mock_htc_sync.sh

chống lại những điều sau đây


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

phone_usb_device="$1"
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 $phone_usb_device"
while [[ `get_ip`  /dev/null

Làm cho nó thực thi:

chmod +x mock_htc_sync.sh

Hy vọng rằng tôi sẽ có một phiên bản được dọn dẹp tốt đẹp ngay khi pos. (Có lẽ vào ngày mai).


0

Để kết nối USB đảo ngược với Android và Linux mà không cần root, hãy xem câu trả lời của tôi ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.