6 votes

Réseau WiFi non accessible avec une adresse MAC modifiée

J'ai récemment acheté une Nexus 7 pour l'utiliser comme client de démonstration pour un système que je suis en train de développer. Pour l'instant, le système exige que le client ait une adresse MAC particulière pour pouvoir fonctionner. J'ai enraciné la Nexus (toujours avec la ROM stock d'Android 4.4), et j'utilise la fonction ip link pour modifier l'adresse matérielle de wlan0 . Je suis conscient que cela sera réinitialisé au redémarrage, mais comme je ne préfère pas recompiler mon noyau Android en ce moment, c'est bon.

Le problème que je rencontre est que je ne parviens pas à obtenir une adresse IP de mon réseau WiFi (ouvert) avec une adresse MAC modifiée. Si je définis une IP statique, je peux me connecter avec succès avec l'adresse modifiée, mais aucun paquet ne passe.

J'espère que la transcription ci-dessous vous éclairera sur ce qui ne fonctionne pas exactement et sur ce que j'ai essayé.

D'abord, j'oublie ma connexion WiFi et je redémarre mon appareil pour repartir de zéro. Ensuite :

$ 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

Ici, je me connecte au réseau sans fil. Si DHCP est sélectionné, le message "Obtaining IP address" s'affiche simplement jusqu'à ce que la connexion échoue. Si je définis une IP statique, le réseau est affiché comme étant connecté, mais.. :

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

Donc, toujours pas de connexion. Voyons ce qui se passe si je change mon adresse MAC pour la vraie sans même me déconnecter du réseau sans fil :

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

Quelqu'un a-t-il une idée de ce qui pourrait se passer ici ?

Pour ce que cela vaut, j'utilise DD-WRT sur mon routeur, aucun filtrage MAC n'est activé et aucune autre règle "bizarre" ne devrait être définie.

UPDATE : Après quelques recherches supplémentaires, j'ai remarqué qu'il semble que la Nexus 7 n'utilise pas du tout l'adresse usurpée lorsqu'elle communique avec mon AP. J'ai activé le filtrage MAC et autorisé uniquement l'adresse usurpée. adb logcat montre un CTRL-EVENT-ASSOC-REJECT message. Je me demande si cela n'a pas un lien quelconque avec ce wpa_supplicant, mais il n'y avait pas non plus de réponse à cette question...

3voto

James Points 325

Après de nombreuses recherches, je suis tombé sur ce Un fil de discussion sur le forum xda-developers où les gens semblent avoir à peu près le même problème avec un Nexus 4. Après avoir essayé plusieurs des solutions proposées dans ce fil, j'en ai trouvé une qui a fonctionné !

Il s'avère qu'Android garde un enregistrement permanent du MAC en /persist/wifi/.macaddr . Pour une raison quelconque, il insiste pour utiliser le MAC de ce fichier lorsqu'il se connecte à un réseau sans fil. Cependant, si vous utilisez un appareil enraciné, vous pouvez remplacer ce MAC par celui que vous voulez. Il est intéressant de noter que ce changement va également persistent à travers les redémarrages !

Donc, sans plus attendre, voici comment modifier le MAC de façon permanente sur un appareil Android ( substitut 112233445566 avec le MAC que vous voulez ):

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

1voto

androidiordna Points 11

La réponse de Jon au sujet du .macaddr caché m'a donné une indication suffisante pour changer temporairement l'adresse mac de mon LG VS450PP enraciné (il a la version logicielle de VS450PP1).

L'adresse mac du wlan est codée en dur dans un fichier (notez les informations de propriété et de permission du fichier).

/data/misc/wifi/WCNSS_qcom_wlan_nv.bin 

Ce sera évident une fois que vous aurez fait un hexdump. J'ai transféré le fichier sur une machine linux normale et utilisé xxd pour générer le dump hexadécimal en texte, changé l'adresse mac et généré le nouveau fichier bin. Vous devez juste le renvoyer au téléphone et vous assurer que vous avez la bonne propriété/permission, désactiver/activer le WiFi, et vous devriez être prêt à partir.

Si vous redémarrez le téléphone, la modification sera annulée. Je n'ai pas encore trouvé comment changer le mac de façon permanente.

0voto

CharlesB Points 27070

Je ne pense pas que votre appareil change réellement le MAC. Le codage statique d'une IP sur votre routeur ne vous servira pas à grand chose si vous n'avez pas de connectivité L2.

J'avais trouvé un moyen de changer le MAC de mon N7 2012 en utilisant busybox et la commande ifconfig. Essayez d'installer busybox Déconnectez-vous du WLAN, puis exécutez la commande suivante en tant que Root (en remplaçant votre MAC, bien sûr).

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

busybox iplink show wlan0

Est-ce que ça marche pour vous ?

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X