Ich habe kürzlich ein Nexus 7 gekauft, um es als Demo-Client für ein System zu verwenden, das ich gerade entwickle. Bis auf Weiteres benötigt das System eine bestimmte MAC-Adresse des Clients, um zu funktionieren. Ich habe das Nexus gerootet (immer noch mit dem Stock-ROM von Android 4.4) und verwende ip link
zum Ändern der Hardwareadresse von wlan0
. Mir ist bewusst, dass dies beim Neustart zurückgesetzt wird, aber da ich meinen Android-Kernel jetzt lieber nicht neu kompilieren möchte, ist das in Ordnung.
Das Problem, das ich sehe, ist, dass ich mit einer geänderten MAC-Adresse keine IP-Adresse von meinem (offenen) WLAN-Netzwerk erhalten kann. Wenn ich eine statische IP einstelle, kann ich mich erfolgreich mit der geänderten Adresse verbinden, aber es kommen keine Pakete durch.
Hoffentlich wird das folgende Transkript etwas Licht darauf werfen, was genau nicht funktioniert und was ich versucht habe.
Zuerst "vergesse" ich meine WLAN-Verbindung und starte mein Gerät neu, um von vorne zu beginnen. Dann:
$ 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
Hier verbinde ich mich mit dem drahtlosen Netzwerk. Wenn DHCP ausgewählt ist, wird mir einfach "Obtaining IP address" angezeigt, bis die Verbindung fehlschlägt. Wenn ich eine statische IP einstelle, wird das Netzwerk als verbunden angezeigt, aber:
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
Also immer noch keine Verbindung. Mal sehen, was passiert, wenn ich meine MAC-Adresse wieder auf die echte ändere, ohne auch nur die Verbindung zum drahtlosen Netzwerk zu trennen:
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
Hat jemand eine Ahnung, was hier los sein könnte?
Für das, was es wert ist, führe ich DD-WRT auf meinem Router aus, es ist keine MAC-Filterung aktiviert und es sollten keine anderen "seltsamen" Regeln festgelegt sein.
UPDATE: Nach einigen weiteren Untersuchungen habe ich festgestellt, dass das Nexus 7 die gefälschte Adresse überhaupt nicht verwendet, wenn es mit meinem AP spricht. Ich habe die MAC-Filterung aktiviert und nur die gefälschte Adresse zugelassen und dann adb logcat
eine CTRL-EVENT-ASSOC-REJECT
Meldung angezeigt. Ich frage mich, ob dies irgendwie mit dieser wpa_supplicant-Frage zusammenhängen könnte, aber auch dort gab es keine Antworten ...
Nach langem Suchen bin ich auf diesen Thread im xda-developers-Forum gestoßen, wo die Leute scheinbar das gleiche Problem mit einem Nexus 4 haben. Nachdem ich mehrere der vorgeschlagenen Lösungen in diesem Thread ausprobiert hatte, stieß ich auf eine, die funktionierte!
Es stellt sich heraus, dass Android eine permanente Aufzeichnung des MAC in /persist/wifi/.macaddr
. Aus irgendeinem Grund besteht es darauf, den MAC in dieser Datei zu verwenden, wenn es sich mit einem drahtlosen Netzwerk verbindet. Wenn Sie sich jedoch auf einem gerooteten Gerät befinden, können Sie es mit einem beliebigen MAC überschreiben. Interessanterweise bleibt diese Änderung auch nach Neustarts bestehen !
Also, ohne weiteres Umschweife, hier ist, wie Sie den MAC dauerhaft auf einem Android-Gerät ändern ( durch den gewünschten MAC ersetzen112233445566
):
computer $ adb shell
android $ su
android # cd /persist/wifi
android # echo -n "112233445566" > .macaddr
android # ^D
android $ ^D
computer $ adb reboot
Jons Antwort auf die versteckte .macaddr gab mir genügend Hinweise, um die Mac-Adresse auf meinem gerooteten LG VS450PP (es hat die Softwareversion VS450PP1) vorübergehend zu ändern.
Die Mac-Adresse für WLAN ist in einer Datei fest codiert (notieren Sie sich die Eigentümer- und Berechtigungsinformationen der Datei).
/data/misc/wifi/WCNSS_qcom_wlan_nv.bin
Es wird offensichtlich sein, sobald Sie einen Hexdump machen. Ich scpte die Datei auf einen normalen Linux-Rechner und generierte mit xxd den Hex-Dump im Text, änderte die Mac-Adresse und generierte die neue bin-Datei. Sie müssen es nur zum Telefon zurücksenden und sicherstellen, dass Sie über die richtigen Eigentumsrechte / Berechtigungen verfügen, WLAN deaktivieren / erneut aktivieren, und Sie sollten bereit sein.
Wenn Sie das Telefon neu starten, wird die Änderung rückgängig gemacht. Ich habe nicht herausgefunden, wie ich den Mac dauerhaft ändern kann.
Ich glaube nicht, dass Ihr Gerät tatsächlich den MAC ändert. Das statische Codieren einer IP auf Ihrem Router wird Ihnen nicht viel nützen, wenn Sie keine L2-Konnektivität haben.
Ich hatte einen Weg gefunden, den MAC auf meinem 2012 N7 zu ändern, indem ich busybox und den Befehl ifconfig verwendete. Versuchen Sie, busybox zu installieren , trennen Sie die Verbindung zum WLAN und führen Sie dann Folgendes als root aus (wobei Sie natürlich Ihren MAC ersetzen).
busybox ifconfig wlan0 hw ether 00:00:00:00:00:00
busybox iplink show wlan0
Funktioniert das für dich?
ip link
ist im Grunde dasselbe wie die Verwendung von ifconfig
, also glaube ich nicht, dass es das ist, was es tut ...ifconfig wlan0 hw ether
erzeugt leider genau das gleiche Verhalten.
Izzy
adb logcat
etwas Licht ins Dunkel bringt? Das sind die einzigen zwei Dinge, die mir sofort einfallen (obwohl es noch mehr geben könnte, wie zB die Verwendung einiger Analyse-Apps).Jon Gjengset
adb logcat
sagt nur DHCP-Timeout mit The spoofed MAC. Der Router gibt leider nur sehr begrenzte Informationen,Herr Buster
Jon Gjengset
Herr Buster
Jon Gjengset
Herr Buster
Jon Gjengset
Jon Gjengset
adb logcat
zeigt dann eineCTRL-EVENT-ASSOC-REJECT
...