Как настроить параметры DHCP для WIFI Tethering (Hotspot) на Android?

При подключении моего ПК к точке доступа Wi-Fi Android, он назначил моему ПК адрес 192.168.42.x. Мне очень нужно изменить его, так как он конфликтует с одной из наших рабочих подсетей - возможно ли это?

Комментарии к вопросу (2)

К сожалению, даже в CyanogenMod нет возможности изменить диапазон IP-адресов для встроенной поддержки tethering. IP-адрес точки доступа Wi-Fi жестко закодирован в android.net.wifi.WifiStateMachine.startTethering(); IP-адрес USB tethering жестко закодирован в com.android.server.connectivity.Tethering.

Однако, если ваш телефон рутован, вы можете попробовать использовать сторонние приложения для tethering, которые имеют возможность изменять диапазон IP-адресов. Например, когда в CyanogenMod alphas для Samsung Galaxy W встроенный USB tethering был сломан, я использовал Wired Tether for Root Users, в котором есть такая возможность. Для Wi-Fi привязки вы можете попробовать приложение Wireless Tether for Root Users от тех же авторов, в котором также есть возможность изменять диапазон IP-адресов.


Поскольку Google Code был закрыт, приведенные выше ссылки больше не работают. Некоторые люди экспортировали исходный код из этих репозиториев на GitHub:

Однако дальнейшая разработка не велась, и приложения, вероятно, больше не работают на последних версиях Android.

На случай, если кто-то захочет попробовать эти устаревшие приложения, мне удалось найти некоторые APK-файлы в Google Code Archive:

Комментарии (4)

Встроенный в Android wifi tethering предназначен для использования 192.168.43.1/24 в качестве сервера, а netd управляет tethering, используя dnsmasq. Первый диапазон DNS - 192.168.42.1-254 и второй диапазон DNS - 192.168.43.1-254.

Netd не так просто изменить. Для связи с ним требуется сокет, и этот сокет берется, когда android запускает tethering. Но просматривая исходные файлы для 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. В Интернете есть тонна руководств по редактированию framework-res.apk, от простых строк до полной тематизации. Найдите подходящий для вашего телефона и версии android.

Главное, что вы хотите изменить, это /res/values/arrays.xml.

Ищите ``.

Измените на:


     192.168.x.y
     192.168.x.z

скомпилируйте/zip/подпишите по мере необходимости (следуйте руководству), затем переустановите.

Если вам нужно более одного диапазона, просто копируйте эти два элемента снова и снова. Для каждого диапазона необходимо указать начало и конец. Постарайтесь сохранить их в том же /24, т.е. 192.168.50.5 и192.168.50.99или что-то еще. Вы можете убедиться, что он работает с помощьюbusybox ps | grep dnsmasqили, если у вас нет busyboxps dnsmasq, тогда используйте pid вcat /proc/pid/cmdline`. Вы должны получить (или что-то подобное):

/system/bin/dnsmasq --no-daemon --no-poll -no-resolv --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.

Комментарии (3)

Я знаю, что это старое сообщение, но я решил предоставить обновленную информацию. Оказывается, некоторые производители и версии Android теперь ДОПУСКАЮТ изменение диапазона IP-подсетей для DHCP-сервера через пользовательский интерфейс при использовании функции WiFi hotspot. Вот где это можно найти на HTC One M8 под управлением Android 6.0. YMMV.

На экране "Мобильная точка доступа" нажмите на значок с тремя точками (больше), перейдите в раздел "Дополнительно", затем "Настройки локальной сети". В разделе "Локальный IP" измените IP-адрес на нужный вам IP. В разделе "Локальный DHCP" измените начальный IP, чтобы он соответствовал подсети вашего IP-адреса.

Trent

Комментарии (1)

Примечание: корень требуется. По умолчанию диапазон DHCP IP-адрес жестко <суп>(1)</SUP-серфинг> вы можете't изменить его без восстановления диска с измененным исходным кодом. Или использовать немного взломать. При включении модема, что происходит (как минимум):

  • hostapd - демон, который управляет точками доступа - это начало.
  • Сетевые интерфейсы настроены, IP-адрес добавляется к Wi-Fi-интерфейсом (жестко до Android пирог <суп>(2, 3)</суп> рандомизированное потом <суп>(4)</с SUP> У), А таблицы маршрутизации добавляется в <SUP и ГТ;(5)</суп> для локальной сети <суп>(6)</суп>.
  • раздача - сервере DHCP/DNS-сервер (для пирога) - это началось с жестко командной строки аргументы <суп>(7)</SUP-серфинг> (который можно установить через /и т. д./dnsmasq.конф в <SUP и ГТ;(8)</суп> в противном случае). Поэтому мы можем заменить `/системы/Бен/раздача с пользовательский скрипт, взяв под контроль процесс между ними. Переименуйте исходный двоичный на что-то другое: ``

    МВ /системы/Бен/раздача /системы/Бен/раздача.Бен

    Создать сценарий `/системы/Бен/раздача`:

    !/система/Бен/ш

    OLD_SUBNET='192.168.43' NEW_SUBNET='192.168.1' WIFI_INTERFACE='как wlan0' LOCAL_TABLE='97' экспорт путь=/системы/Бен

    удалить старый маршрут, добавлять новые

    IP-маршрута-дель - ${OLD_SUBNET}.0/24 Дэв ${WIFI_INTERFACE} таблица $LOCAL_TABLE IP-маршрута добавить ${NEW_SUBNET}.0/24 Дэв ${WIFI_INTERFACE} таблица $LOCAL_TABLE

    установить новый IP-адрес на Wi-Fi-интерфейсом

    IP-адрес добавить ${NEW_SUBNET}.1/24 Дэв $WIFI_INTERFACE

    вдохнуть новую подсеть в жестко заданных аргументов, полученных от разности температур эквивалентной шуму фотоприемника

    комплект -- $(е '%ы' " У$*то" | ООО 'ы/'${OLD_SUBNET}'/'${NEW_SUBNET}'/г') сбросить OLD_SUBNET NEW_SUBNET WIFI_INTERFACE LOCAL_TABLE

    выполнить исходный двоичный новые аргументы

    старпома раздача.Бен $* Подтвердите имя вашего Wi-Fi-интерфейсом (`как wlan0 обычно). Проверить с `IP-связи` или `LS /системы/класс/чистой/`. Также подтвердить локальной сети таблица маршрутизации `97`: `команда grep local_network /данные/разное/нетто/rt_tables`. Для Android&#39;ы маршрутизации бардак, становятся все более сложными с каждым новым релизом. Поэтому я&#39;м не уверен, если это было постоянным или нет. Также перед внесением любых изменений, проверить свои политики маршрутизации и таблицы, чтобы выяснить, что вы должны поставить в ваш скрипт: ~ Правила # =" и$(ИС править | грэп -ве 'недоступен|местные') и" ~# Эхо "$правила" и ~# для T в $(Эхо "$правила" ПО - | на awk '{печать $ЯТ}' | уник); ИП р О Е таблица $Т; сделано Правила SELinux, которые также должны быть определены, если (все или некоторые) уже не определено и, если статус `исполнения`. Использовать Magisk&#39;suploicy ный `или другой подобный инструмент, как `sepolicy-впрыснуть`:

    выполнять бинарники из /системы/Бен

    разрешить разности температур эквивалентной шуму фотоприемника system_file реж { читать открытые функцией getattr поиска } разрешить файл system_file разности температур эквивалентной шуму фотоприемника { читать gettattr открыть выполнить execute_no_trans }

    выполнение /системы/Бен/ш

    разрешить файл shell_exec разности температур эквивалентной шуму фотоприемника { читайте функцией getattr, открыть выполнить execute_no_trans }

    выполнение /системы/Бен/Toolbox и ее апплетов

    разрешить файл toolbox_exec разности температур эквивалентной шуму фотоприемника { читать gettattr открыть выполнить execute_no_trans }

    настроить правила RPDB / таблицы маршрутизации

    позвольте разности температур эквивалентной шуму фотоприемника разности температур эквивалентной шуму фотоприемника возможности { sys_admin } <суп>* не сохраняется между перезагрузками, использовать некоторые `инит.D скрипт или заменить `/sepolicy в рамдиске в`</SUP-серфинг> Установка разрешений на файлы: ~# команда chown 0.0 /системы/Бен/раздача ~# команду chmod 0755 /системы/Бен/раздача ~# команды chcon по U:object_r:dnsmasq_exec:С0 /системы/Бен/раздача* `` Наслаждайтесь! Или вы можете установить полный модем из командной строки, запустив свои собственные процессы. Этот ответ включает в себя инструкции, хотя вопрос совсем другой. Обзоры:

  • Как я окончательно назначить статический IP-адрес для Wi-Fi или USB троса клиенты?
  • Как я могу изменить мой модем IP-адрес?
Комментарии (0)