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...