Ao conectar meu PC ao ponto de acesso Wi-Fi do Android, ele atribuiu um 192.168.42.x
endereço ao meu PC. Eu realmente preciso mudar isso, pois entra em conflito com uma de nossas sub-redes de trabalho - isso é possível?
Ao conectar meu PC ao ponto de acesso Wi-Fi do Android, ele atribuiu um 192.168.42.x
endereço ao meu PC. Eu realmente preciso mudar isso, pois entra em conflito com uma de nossas sub-redes de trabalho - isso é possível?
Respostas:
Infelizmente, não há como alterar o intervalo de endereços IP para o suporte de compartilhamento integrado, mesmo no CyanogenMod. O IP do ponto de acesso Wi-Fi é codificado em android.net.wifi.WifiStateMachine.startTethering () ; o IP de compartilhamento USB é codificado em com.android.server.connectivity.Tethering .
No entanto, se o telefone estiver enraizado, você pode tentar usar aplicativos de terceiros para amarrar, que têm a opção de alterar o intervalo de endereços IP. Por exemplo, quando o tethering USB incorporado foi quebrado nos alfas CyanogenMod para Samsung Galaxy W, usei o Wired Tether para usuários raiz , que tem essa opção. Para compartilhamento de Wi-Fi, você pode experimentar o aplicativo Wireless Tether for Root Users dos mesmos autores, que também tem a opção de alterar o intervalo de endereços IP.
Como o Google Code foi desligado, os links acima não funcionam mais. Algumas pessoas exportaram o código fonte desses repositórios para o GitHub:
No entanto, não houve mais atividades de desenvolvimento e os aplicativos provavelmente não funcionam mais nas versões recentes do Android.
Caso alguém queira experimentar esses aplicativos obsoletos, encontrei alguns arquivos APK no Google Code Archive :
O tethering wifi interno do Android foi projetado para usar 192.168.43.1/24 como servidor, com o netd
manuseio do tethering dnsmasq
. O primeiro intervalo de DNS é 192.168.42.1-254
e o segundo intervalo de DNS é 192.168.43.1-254
.
Netd não é fácil de mudar. Ele requer um soquete para se comunicar com ele, e esse soquete é usado quando o Android inicia o compartilhamento. Mas, passando os arquivos de origem para Tethering.java
(eu usei o Froyo), vemos:
// 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";
E mais tarde, vemos esses intervalos usados, como backups .
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;
}
A fonte principal para os intervalos dhcp não são os 42 e 43 codificados, mas lidos em array.config_tether_dhcp_range, um array interno de strings. Mas está vazio no momento.
Você pode editar a estrutura do Android. No meu telefone, é /system/framework/framework-res.apk
. Há uma tonelada de tutoriais on-line para edição de quadro res.apk, de cordas simples para theming completo. Encontre um para o seu telefone e a versão do Android.
A principal coisa que você deseja alterar é a /res/values/arrays.xml
Olhe para <array name="config_tether_dhcp_range" />
Mudar para:
<string-array name="config_tether_dhcp_range">
<item>192.168.x.y</item>
<item>192.168.x.z</item>
</string-array>
compile / zip / sign conforme necessário (siga um tutorial) e reinstale.
Se você deseja mais de um intervalo, basta copiar os dois itens repetidamente. Você sempre precisa fornecer um começo e uma parada para cada intervalo. Tente mantê-lo no mesmo / 24, ou seja, 192.168.50.
5 e 192.168.50.99
ou o que for. Você pode confirmar que está funcionando busybox ps | grep dnsmasq
ou, se não tiver o busybox ps dnsmasq
, use o pid in cat /proc/pid/cmdline
. Você deve obter (ou similar):
/ system / bin / dnsmasq --no-daemon --no-poll -no-resolv --dhcp-range = 192.168.50.5,192.168.50.99,1h
FWIW, meu compartilhamento WIFI usa os dnsmasq
intervalos padrão , mas meu computador foi atribuído 192.168.43.147/24
e gateway 192.168.43.1/24
. Não sei por que o seu padrão foi um 42.x
endereço.
Eu sei que este é um post antigo, mas pensei em fornecer uma atualização. Parece que alguns fabricantes e versões do Android agora permitem alterar o alcance da sub-rede IP do servidor DHCP por meio da interface do usuário ao usar o recurso de ponto de acesso WiFi. Aqui está onde encontrá-lo em um HTC One M8 executando o Android 6.0. YMMV.
Na tela Mobile Hotspot, clique no ícone de 3 pontos (mais), vá para Avançado e, em seguida, Configurações da LAN. Em "IP local", altere o endereço IP para o IP desejado. Em "DHCP local", altere o IP inicial para corresponder à sub-rede do seu endereço IP.
Trent
NOTA: A raiz é necessária.
O intervalo de endereços IP do DHCP padrão é codificado ( 1 ) , você não pode alterá-lo sem reconstruir a ROM com o código-fonte modificado. Ou use um pequeno truque.
Quando você ativa o tethering, o que acontece (pelo menos):
hostapd
- o daemon que gerencia os pontos de acesso - é iniciado.dnsmasq
- o servidor DHCP / DNS (até Torta) - é iniciado com argumentos de linha de comando codificados ( 7 ) (que podem ser definidos em /etc/dnsmasq.conf
( 8 ) de outra forma).Assim, podemos substituir /system/bin/dnsmasq
por um script de shell personalizado, assumindo o controle do processo no meio. Renomeie o binário original para outra coisa:
# mv /system/bin/dnsmasq /system/bin/dnsmasq.bin
Criar script /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 $*
Confirme o nome da sua interface Wi-Fi ( wlan0
normalmente). Verifique com ip link
ou ls /sys/class/net/
.
Também confirmam a sua tabela de roteamento de rede local é 97
: grep local_network /data/misc/net/rt_tables
. O roteamento do Android é uma bagunça, ficando mais complexo a cada nova versão. Portanto, não tenho certeza se isso foi persistente ou não. Antes de fazer alterações, verifique também suas políticas e tabelas de roteamento para descobrir o que você deve colocar em seu script:
~# 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
As regras do SELinux também precisam ser definidas se (todas ou algumas) ainda não estiverem definidas e se o status for enforcing
. Use Magisk's suploicy
ou alguma outra ferramenta similar como 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 }
* Não é persistente entre as reinicializações, use algum init.d
script ou substituir /sepolicy
emramdisk
Defina permissões nos arquivos:
~# chown 0.0 /system/bin/dnsmasq*
~# chmod 0755 /system/bin/dnsmasq*
~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*
Apreciar!
Ou você pode configurar o compartilhamento completo da linha de comando, executando seus próprios processos. Esta resposta inclui as instruções, embora a pergunta seja diferente.
RELACIONADOS: