6 votos

La red WiFi no es accesible con la dirección MAC modificada

Recientemente compré un Nexus 7 para usarlo como cliente de demostración para un sistema que estoy desarrollando actualmente. Por el momento, el sistema requiere que el cliente tenga una dirección MAC particular para funcionar. He rooteado el Nexus (todavía con la ROM de Android 4.4), y estoy usando ip link para cambiar la dirección del hardware de wlan0 . Soy consciente de que esto se reiniciará al reiniciar, pero como prefiero no recompilar mi núcleo Android ahora mismo, está bien.

El problema que veo es que no puedo obtener una dirección IP de mi red WiFi (abierta) con una dirección MAC modificada. Si establezco una IP estática, puedo conectarme con éxito con la dirección modificada, pero no se recibe ningún paquete.

Espero que la siguiente transcripción arroje algo de luz sobre lo que no funciona y lo que he intentado.

Primero, "olvido" mi conexión WiFi y reinicio mi dispositivo sólo para empezar de nuevo. Luego:

$ adb shell
shell@flo:/ $ su
root@flo:/ # ip link | grep -A1 wlan0
22: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT qlen 100
    link/ether ac:22:0b:9f:37:f7 brd ff:ff:ff:ff:ff:ff
root@flo:/ # ip link set dev wlan0 addr ac:22:0b:9f:37:f0

Aquí, me conecto a la red inalámbrica. Si se selecciona el DHCP, simplemente me muestra "Obtención de la dirección IP" hasta que la conexión falla. Si configuro una IP estática, la red se muestra como conectada, pero:

root@flo:/ # ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
From 192.168.1.113: icmp_seq=1 Destination Host Unreachable
From 192.168.1.113: icmp_seq=2 Destination Host Unreachable
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1004ms
pipe 2
1|root@flo:/ # ip route
default via 192.168.1.1 dev wlan0 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.113 
192.168.1.1 dev wlan0  scope link 
1|root@flo:/ # ip n
192.168.1.1 dev wlan0  INCOMPLETE
255|root@flo:/ # ip n change 192.168.1.1 lladdr 10:0D:7F:4D:1C:D0 dev wlan0
root@flo:/ # ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
^C
--- 192.168.1.1 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6006ms

Así que, todavía no hay conexión. Veamos qué pasa si cambio mi dirección MAC de nuevo a la real sin siquiera desconectarme de la red inalámbrica:

root@flo:/ # ip link set dev wlan0 addr ac:22:0b:9f:37:f7
root@flo:/ # ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=13.0 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.82 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=9.49 ms
^C
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 9.491/10.793/13.061/1.609 ms

¿Alguien tiene alguna idea de lo que podría estar pasando aquí?

Por si sirve de algo, estoy ejecutando DD-WRT en mi router, no está habilitado el filtrado MAC, y no debería haber otras reglas "raras" establecidas.

ACTUALIZACIÓN: Después de investigar un poco más, he notado que parece que el Nexus 7 no está usando la dirección falsa en absoluto cuando habla con mi AP. He activado el filtrado MAC y sólo permití la dirección falsa, y luego adb logcat muestra un CTRL-EVENT-ASSOC-REJECT mensaje. Me pregunto si esto podría estar relacionado de alguna manera con este ...pero tampoco había ninguna respuesta...

3voto

Jonhoo Puntos 119

Después de mucha búsqueda, me encontré con este en el foro de desarrolladores de XDA, donde la gente parece tener mucho de lo mismo con un Nexus 4. Después de probar varias de las soluciones propuestas en ese hilo, me encontré con una que funcionó!

Resulta que Android mantiene un registro permanente del MAC en /persist/wifi/.macaddr . Por alguna razón, insiste en usar el MAC de ese archivo cuando se conecta a una red inalámbrica. Sin embargo, si estás en un dispositivo rooteado, puedes sobrescribirlo con el MAC que quieras. Curiosamente, este cambio también persisten a través de reinicios !

Así que, sin más preámbulos, así es como se cambia el MAC permanentemente en un dispositivo Android ( sustituto 112233445566 con el MAC que quieres ):

computer $ adb shell
android $ su
android # cd /persist/wifi
android # echo -n "112233445566" > .macaddr
android # ^D
android $ ^D
computer $ adb reboot

0voto

CharlesB Puntos 27070

No creo que tu aparato esté cambiando el MAC. La codificación estática de una IP en tu enrutador no te servirá de mucho si no tienes conectividad L2.

Había encontrado una forma de cambiar el MAC de mi 2012 N7 usando busybox y el comando ifconfig. Intenta instalar busybox desconectándose de la WLAN, y luego ejecutando lo siguiente como Root (sustituyendo su MAC, por supuesto).

busybox ifconfig wlan0 hw ether 00:00:00:00:00:00

busybox iplink show wlan0

¿Eso funciona para ti?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X