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

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

Мой мобильный рутирован. Я не против изменить системные файлы, если это необходимо.
Так же, как ответ на нюансы в некоторых из приведенных выше замечательных ответов, в моей практике диапазон 192.168.43.0/24 по умолчанию для Android/поставщика назначается для модема WiFi, а 192.168.42.0/24 - для модема USB.

Ответы (5)

К сожалению, нет возможности изменить диапазон 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 Users , у которого есть такая опция. Для модема Wi-Fi вы можете попробовать приложение Wireless Tether для корневых пользователей от тех же авторов, в котором также есть возможность изменить диапазон IP-адресов.


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

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

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

+1 за информацию. Мое устройство рутировано, но приложение Wireless Tether for Root Users не работает на моем мобильном телефоне. Должен быть какой-то способ изменить диапазон IP-адресов на рутированном телефоне, C'Mon Man!, В конце концов, Android — это открытая ОС.
@VVK Есть способ. Просто перекомпилируйте исходники.
Приложения, которые вы упомянули, кажется, больше не существуют. Можете ли вы найти какие-либо новые версии в Интернете, так как вы знаете имена издателей? Я нашел несколько других, но ни один из них не был бесплатным...
@pgr Нашел несколько рабочих ссылок, но новых версий нет.
В Android 11 кажется, что IP-адрес шлюза моей точки доступа меняется каждый раз, когда я отключаю и снова включаю точку доступа. Так что этот ответ устарел для последней версии Android. Теперь вопрос в том, есть ли решение, в конце концов?

Встроенный 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. В Интернете есть множество руководств по редактированию framework- 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>

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

Если вам нужно более одного диапазона, просто скопируйте два элемента снова и снова. Вам всегда нужно указать начало и конец для каждого диапазона. Старайтесь, чтобы он был таким же /24, т.е. 192.168.50.5 192.168.50.99или сколько угодно. Вы можете подтвердить, что он работает, busybox ps | grep dnsmasqили, если у вас нет busybox, ps 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адрес.

42 для USBNET 43 для Wi-Fi
Потому что, если вы подключаетесь через USB, вы получаете 42. Если вы подключаетесь через Wi-Fi, вы получаете 43.
я на андроиде 11 и он назначает IP даже от 192.168.17.*. Похоже диапазоны изменились
@просто да, он полностью переработан. source.android.com/devices/architecture/modular-system/… больше не является частью фреймворка, он перемещен в собственный заменяемый модуль. И это все еще зависит от настройки вашего производителя.

Я знаю, что это старый пост, но решил предоставить обновление. Похоже, что некоторые производители и версии Android теперь позволяют изменять диапазон IP-подсети для DHCP-сервера через пользовательский интерфейс при использовании функции точки доступа Wi-Fi. Вот где его найти на HTC One M8 под управлением Android 6.0. YMMV.

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

Трент

Вы не знаете, есть ли у новых телефонов HTC такая возможность?

Диапазон IP-адресов DHCP по умолчанию жестко запрограммирован, поэтому вы не можете изменить его без перестройки ПЗУ с измененным исходным кодом. Или используйте небольшой лайфхак. Замените /system/bin/dnsmasq(сервер DHCP/DNS до Android 9) пользовательским сценарием оболочки, который заменяет старую подсеть новой перед выполнением фактического dnsmasqдвоичного файла.

Подробные инструкции см. в разделе Как изменить диапазон IP-адресов DHCP по умолчанию?

Что сейчас использует Android 10?
@sudo Java-реализация DHCP/DNS-сервера. Но, по крайней мере, некоторые ПЗУ все еще используют dnsmasq.
@Irfan, какова процедура реализации?
@JustKhaithang смотрите мои комментарии здесь и здесь .
Старые добрые обертки.
Диапазоны DHCP на данный момент не настраиваются в новых Android, подробности см. в коде, android.googlesource.com/platform/frameworks/base/+/refs/tags/…

Теперь они динамичны. У меня есть устройство, которое при подключении к точке доступа телефона получает адрес 192.168.XXX.85, где ХХХ постоянно меняется, возможно, ежедневно или при каждой перезагрузке.