Al conectar mi PC al punto de acceso Wi-Fi de Android, asignó una 192.168.42.x
dirección a mi PC. Realmente necesito cambiar esto, ya que entra en conflicto con una de nuestras subredes de trabajo. ¿Es esto posible?
Al conectar mi PC al punto de acceso Wi-Fi de Android, asignó una 192.168.42.x
dirección a mi PC. Realmente necesito cambiar esto, ya que entra en conflicto con una de nuestras subredes de trabajo. ¿Es esto posible?
Respuestas:
Desafortunadamente, no hay forma de cambiar el rango de direcciones IP para el soporte de anclaje incorporado, incluso en CyanogenMod. La IP del punto de acceso Wi-Fi está codificada en android.net.wifi.WifiStateMachine.startTethering () ; la IP de conexión USB está codificada en com.android.server.connectivity.Tethering .
Sin embargo, si su teléfono está rooteado, puede intentar usar aplicaciones de terceros para la conexión que tengan la opción de cambiar el rango de direcciones IP. Por ejemplo, cuando la conexión USB incorporada se rompió en CyanogenMod alphas para Samsung Galaxy W, utilicé Wired Tether para usuarios root , que tiene esa opción. Para la conexión Wi-Fi, puede probar la aplicación Wireless Tether for Root Users de los mismos autores, que también tiene la opción de cambiar el rango de direcciones IP.
Debido a que Google Code se cerró, los enlaces anteriores ya no funcionan. Algunas personas exportaron el código fuente de esos repositorios a GitHub:
Sin embargo, no hubo más actividad de desarrollo, y las aplicaciones probablemente ya no funcionen en las versiones recientes de Android.
En caso de que alguien quiera probar esas aplicaciones obsoletas, he podido encontrar algunos archivos APK en el Archivo de códigos de Google :
El anclaje a red incorporado de Android está diseñado para usar 192.168.43.1/24 como servidor, con el netd
manejo del anclaje a red dnsmasq
. El primer rango de DNS es 192.168.42.1-254
y y el segundo rango de DNS es 192.168.43.1-254
.
Netd no es fácil de cambiar. Requiere un socket para comunicarse con él, y ese socket se toma cuando Android comienza a conectarse. Pero revisando los archivos fuente de Tethering.java
(usé 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";
Y más adelante vemos esos rangos utilizados, 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;
}
La fuente principal de los rangos dhcp no son los codificados 42 y 43, sino que se leen desde array.config_tether_dhcp_range, una matriz de cadenas interna. Pero actualmente está vacío.
Podrías editar el marco de Android. En mi teléfono, lo es /system/framework/framework-res.apk
. Hay un montón de tutoriales en línea para editar framework-res.apk, desde cadenas simples hasta temas completos. Encuentre uno para su teléfono y versión de Android.
Lo principal que desea cambiar es el /res/values/arrays.xml
Buscar <array name="config_tether_dhcp_range" />
Cambiar a:
<string-array name="config_tether_dhcp_range">
<item>192.168.x.y</item>
<item>192.168.x.z</item>
</string-array>
compile / zip / sign según sea necesario (siga un tutorial), luego reinstale.
Si desea más de un rango, simplemente copie los dos elementos una y otra vez. Siempre debe proporcionar un inicio y una parada para cada rango. Trate de mantenerlo en el mismo / 24, es decir, 192.168.50.
5 192.168.50.99
o lo que sea. Puede confirmar que está funcionando busybox ps | grep dnsmasq
o si no tiene busybox ps dnsmasq
, use el pid in cat /proc/pid/cmdline
. Deberías obtener (o similar):
/ system / bin / dnsmasq --no-daemon --no-poll -no-resolv --dhcp-range = 192.168.50.5,192.168.50.99,1h
FWIW, mi conexión WIFI utiliza los dnsmasq
rangos predeterminados , pero mi computadora fue asignada 192.168.43.147/24
y puerta de enlace 192.168.43.1/24
. No estoy seguro de por qué el tuyo se omitió en una 42.x
dirección.
Sé que esta es una publicación antigua, pero pensé que podría proporcionar una actualización. Parece que algunos fabricantes y versiones de Android ahora sí permiten el cambio del rango de subred IP para el servidor DHCP a través de la interfaz de usuario cuando se utiliza la función de punto de acceso WiFi. Aquí es donde encontrarlo en un HTC One M8 con Android 6.0. YMMV.
Desde la pantalla Mobile Hotspot, haga clic en el ícono de 3 puntos (más), vaya a Avanzado y luego a Configuración de LAN. En "IP local", cambie la dirección IP a su IP deseada. En "DHCP local", cambie la IP de inicio para que coincida con la subred de su dirección IP.
Trent
NOTA: Se requiere root.
El rango predeterminado de direcciones IP de DHCP está codificado ( 1 ) , no puede cambiarlo sin reconstruir la ROM con el código fuente modificado. O usa un pequeño truco.
Cuando activas el anclaje, lo que sucede (al menos):
hostapd
- se inicia el demonio que gestiona los puntos de acceso.dnsmasq
- el servidor DHCP / DNS (hasta Pie) - se inicia con argumentos de línea de comandos codificados ( 7 ) (que de lo contrario se pueden configurar mediante /etc/dnsmasq.conf
( 8 ) ).Por lo tanto, podemos reemplazarlo /system/bin/dnsmasq
con un script de shell personalizado, tomando el control del proceso intermedio. Cambie el nombre del binario original a otra cosa:
# mv /system/bin/dnsmasq /system/bin/dnsmasq.bin
Crear guión /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 el nombre de su interfaz Wi-Fi ( wlan0
generalmente). Consulte con ip link
o ls /sys/class/net/
.
También confirmar su tabla de enrutamiento de red local es 97
: grep local_network /data/misc/net/rt_tables
. El enrutamiento de Android es un desastre, que se vuelve más complejo con cada nueva versión. Así que no estoy seguro de si esto ha sido persistente o no. Además, antes de realizar cualquier cambio, verifique sus políticas y tablas de enrutamiento para averiguar qué debe incluir en su 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
Las reglas de SELinux también deben definirse si (todas o algunas) aún no están definidas y si el estado sí lo está enforcing
. Utilice Magisk suploicy
u otra herramienta 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 }
* no es persistente en todos los reinicios, usa algún init.d
script o reemplaza /sepolicy
enramdisk
Establecer permisos en archivos:
~# chown 0.0 /system/bin/dnsmasq*
~# chmod 0755 /system/bin/dnsmasq*
~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*
¡Disfrutar!
O puede configurar la conexión completa desde la línea de comandos, ejecutando sus propios procesos. Esta respuesta incluye las instrucciones, aunque la pregunta es diferente.
RELACIONADO: