Під час підключення мого ПК до точки доступу до Wi-Fi Android, він призначив 192.168.42.x
адресу моєму ПК. Мені справді потрібно змінити це, оскільки воно суперечить одній із наших підмереж - чи можливо це?
Під час підключення мого ПК до точки доступу до Wi-Fi Android, він призначив 192.168.42.x
адресу моєму ПК. Мені справді потрібно змінити це, оскільки воно суперечить одній із наших підмереж - чи можливо це?
Відповіді:
На жаль, немає можливості змінити діапазон IP-адрес для вбудованої підтримки прив’язки, навіть у CyanogenMod. IP-точку доступу Wi-Fi жорстко кодується в android.net.wifi.WifiStateMachine.startTethering () ; IP-прив’язка через USB жорстко кодується в com.android.server.connectivity.Tethering .
Однак якщо ваш телефон укорінений, ви можете спробувати використовувати сторонні додатки для прив’язки, які мають можливість змінити діапазон IP-адрес. Наприклад, коли вбудований USB-тетер був порушений в альфа-програмах CyanogenMod для Samsung Galaxy W, я використовував Wired Tether для користувачів Root , який має таку можливість. Для підключення Wi-Fi ви можете спробувати бездротовий тетер для кореневих користувачів додаток від тих самих авторів, який також має можливість змінити діапазон IP-адрес.
Оскільки Google Code було вимкнено, вищезазначені посилання більше не працюють. Деякі люди експортували вихідний код із цих сховищ до GitHub:
Однак подальшої активності в розробці не було, і програми, ймовірно, більше не працюють на останніх версіях Android.
На випадок, якщо хтось захоче спробувати ці застарілі програми, я зміг знайти деякі файли APK в архіві Google Code :
Вбудований через Wi-Fi модем Android розроблений для використання 192.168.43.1/24 в якості сервера, для netd
обробки тетерінгу, використовуючи dnsmasq
. Перший діапазон DNS є 192.168.42.1-254
і другий діапазон DNS є192.168.43.1-254
.
Netd змінити непросто. Для зв'язку з ним потрібен сокет, і цей сокет береться, коли андроїд починає зв'язуватися. Але переглядаючи вихідні файли для Tethering.java
(я використовував Froyo), ми бачимо:
// usb client will be provided 192.168.42.129
private static final String USB_NEAR_IFACE_ADDR = "192.168.42.129";
private static final String USB_NETMASK = "255.255.255.0";
// FYI - the default wifi is 192.168.43.1 and 255.255.255.0
private String[] mDhcpRange;
private static final String DHCP_DEFAULT_RANGE1_START = "192.168.42.2";
private static final String DHCP_DEFAULT_RANGE1_STOP = "192.168.42.254";
private static final String DHCP_DEFAULT_RANGE2_START = "192.168.43.2";
private static final String DHCP_DEFAULT_RANGE2_STOP = "192.168.43.254";
І пізніше ми бачимо ті діапазони, які використовуються, ЯК РЕКЛАМИ .
mDhcpRange = context.getResources().getStringArray(
com.android.internal.R.array.config_tether_dhcp_range);
if ((mDhcpRange.length == 0) || (mDhcpRange.length % 2 ==1)) {
mDhcpRange = new String[4];
mDhcpRange[0] = DHCP_DEFAULT_RANGE1_START;
mDhcpRange[1] = DHCP_DEFAULT_RANGE1_STOP;
mDhcpRange[2] = DHCP_DEFAULT_RANGE2_START;
mDhcpRange[3] = DHCP_DEFAULT_RANGE2_STOP;
}
Основним джерелом діапазонів dhcp є не жорсткі коди 42 та 43, а зчитуються з масиву внутрішніх рядків array.config_tether_dhcp_range. Але наразі він порожній.
Ви можете редагувати рамки для Android. На моєму телефоні це так /system/framework/framework-res.apk
. Є ціла тонна підручників онлайн для редагування рамки-res.apk, від простих рядків до повної тематизації. Знайдіть його для версії телефону та Android.
Головне, що ви хочете змінити - це /res/values/arrays.xml
Шукати <array name="config_tether_dhcp_range" />
Перейти:
<string-array name="config_tether_dhcp_range">
<item>192.168.x.y</item>
<item>192.168.x.z</item>
</string-array>
компілюйте / zip / підпишіть за потребою (дотримуйтесь підручника), а потім перевстановіть.
Якщо вам потрібно більше одного діапазону, просто скопіюйте два елементи знову і знову. Завжди потрібно передбачати старт і зупинку для кожного діапазону. Спробуйте зберегти його в такому ж / 24, тобто 192.168.50.
5 і 192.168.50.99
будь-якому іншому. Ви можете підтвердити, що він працює, busybox ps | grep dnsmasq
або якщо у вас немає зайнятої скриньки, ps dnsmasq
тоді використовуйте pid cat /proc/pid/cmdline
. Ви повинні отримати (або подібне):
/ system / bin / dnsmasq --no-daemon --no-опитування -no-resolutionv --dhcp-range = 192.168.50.5,192.168.50.99,1h
FWIW, моє WIFI прив'язка використовує dnsmasq
діапазони за замовчуванням , але моєму комп’ютеру було призначено 192.168.43.147/24
і шлюз 192.168.43.1/24
. Не впевнений, чому ваш дефолт за 42.x
адресою.
Я знаю, що це стара публікація, але я думав, що я б запропонував оновлення. Здається, деякі виробники та версії Android тепер DO дозволяють змінювати діапазон IP-підмереж для сервера DHCP через користувальницький інтерфейс під час використання функції Wi-Fi гарячої точки. Ось де його знайти на HTC One M8 під управлінням Android 6.0. YMMV.
На екрані мобільної точки доступу натисніть на піктограму 3 крапки (докладніше), перейдіть до пункту «Додатково», а потім налаштування локальної мережі. У розділі "Локальний IP" змініть IP-адресу на потрібну IP-адресу. У розділі "Місцевий DHCP" змініть початковий IP, щоб він відповідав підмережі вашої IP-адреси.
Трент
ПРИМІТКА: Корінь обов'язковий.
Діапазон IP-адрес за замовчуванням DHCP жорстко закодований ( 1 ) , ви не можете змінити його без відновлення ROM з модифікованим вихідним кодом. Або скористайтеся невеликим рубанням.
Коли ви вмикаєте прив'язку, що відбувається (принаймні):
hostapd
- запускається демон, який управляє точками доступу.dnsmasq
- DHCP / DNS-сервер (до Pie) - запускається з жорстко кодованих аргументів командного рядка ( 7 ) (які можна встановити через /etc/dnsmasq.conf
( 8 ) в іншому випадку).Таким чином, ми можемо замінити /system/bin/dnsmasq
спеціальний скрипт оболонки, взявши під контроль процес між ними. Перейменуйте оригінальний двійковий файл на щось інше:
# mv /system/bin/dnsmasq /system/bin/dnsmasq.bin
Створити сценарій /system/bin/dnsmasq
:
#!/system/bin/sh
OLD_SUBNET='192.168.43'
NEW_SUBNET='192.168.1'
WIFI_INTERFACE='wlan0'
LOCAL_TABLE='97'
export PATH=/system/bin
# delete old route, add new
ip route del ${OLD_SUBNET}.0/24 dev ${WIFI_INTERFACE} table $LOCAL_TABLE
ip route add ${NEW_SUBNET}.0/24 dev ${WIFI_INTERFACE} table $LOCAL_TABLE
# set new IP address on Wi-Fi interface
ip address add ${NEW_SUBNET}.1/24 dev $WIFI_INTERFACE
# inject new subnet in hard-coded arguments received from netd
set -- $(printf '%s' "$*" | sed 's/'${OLD_SUBNET}'/'${NEW_SUBNET}'/g')
unset OLD_SUBNET NEW_SUBNET WIFI_INTERFACE LOCAL_TABLE
# execute original binary with new arguments
exec dnsmasq.bin $*
Підтвердьте ім’я свого інтерфейсу Wi-Fi ( wlan0
як правило). Зверніться до ip link
або ls /sys/class/net/
.
Крім того, переконайтеся ваша локальна таблиця маршрутизації мережі є 97
: grep local_network /data/misc/net/rt_tables
. Маршрутизація Android - це безлад, який стає складнішим з кожною новою версією. Тож я не впевнений, було це наполегливо чи ні. Також перед тим, як вносити будь-які зміни, перевірте свою політику маршрутизації та таблиці, щоб визначити, що слід ввести у свій сценарій:
~# RULES="$(ip rule | grep -vE 'unreachable|local')"
~# echo "$RULES"
~# for t in $(echo "$RULES" | awk '{print $NF}' | uniq); do ip r s table $t; done
Правила SELinux також потрібно визначити, якщо (всі або деякі) ще не визначені і якщо статус є enforcing
. Використовуйте Magisk's suploicy
або інший подібний інструмент, як sepolicy-inject
:
# execute binaries from /system/bin
allow netd system_file dir { read open getattr search }
allow netd system_file file { read gettattr open execute execute_no_trans }
# execute /system/bin/sh
allow netd shell_exec file { read getattr open execute execute_no_trans }
# execute /system/bin/toolbox and its applets
allow netd toolbox_exec file { read gettattr open execute execute_no_trans }
# configure RPDB rules / routing tables
allow netd netd capability { sys_admin }
* Не постійні після перезавантаження, використовувати який - init.d
скрипт або замінити /sepolicy
вramdisk
Встановлення дозволів на файли:
~# chown 0.0 /system/bin/dnsmasq*
~# chmod 0755 /system/bin/dnsmasq*
~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*
Насолоджуйтесь!
Або ви можете встановити повне прив’язання з командного рядка, запускаючи власні процеси. Ця відповідь містить інструкції, хоча питання інше.
ПОВ'ЯЗАНІ: