it-swarm.com.de

So richten Sie eine Wifi-Direct-Verbindung zwischen Android und Linux ein

Ich möchte zwei Geräte mit Wifi-Direct verbinden Eines ist ein PC mit Linux (während meines Tests verwende ich Linux Mint 17.2), das andere ist ein Android-Smartphone (Samsung Galaxy S3 mit Android 4.3. Nicht verwurzelt und will nicht rooten).

Beim Lesen einer Reihe von Handbüchern im Internet entschied ich mich, wpa_supplicant unter Linux zu verwenden und eine App für Android zu erstellen .. Dies ist eines der besten Handbücher, die ich für wpa_supplicant gefunden habe: http: //. wiki.ti.com/index.php/OMAP_Wireless_Connectivity_NLCP_WiFi_Direct_Configuration_Scripts#p2p_group_add

Wenn ich iw list starte, sehe ich, dass die "Unterstützten Schnittstellenmodi:" P2P_client und P2P_GO zulässt . Meine wpa_supplicant.conf enthält:

ctrl_interface=/var/run/wpa_supplicant
update_config=1 

ap_scan=1
device_name=My-pc
device_type=1-0050F204-1
driver_param=use_p2p_group_interface=1

p2p_go_intent=15
p2p_go_ht40=1

Die App ist diesem Beispiel sehr ähnlich (es stammt aus einem Buch) http://kurser.iha.dk/eit/itsmap/basic/MEIER/Professional%20Android%204%20All%20downloads/9781118102275%20PA4AD/Code% 20Snippets/Chapter% 2016/PA4AD_Ch16_WiFiDirect/src/com/paad/wifidirect/WiFiDirectActivity.Java (Ich habe den gesamten "Socket-Teil" entfernt).

Es funktioniert wie erwartet. Wenn ich es mit zwei Android-Geräten probiere, können sie sich sehen und miteinander verbinden (es erscheint das Wifi-Direct-Symbol).

Jetzt versuche ich, Android und Linux miteinander zu verbinden, aber ich verstehe nicht wirklich, wie wpa_supplicant funktioniert ... Ich habe auch diese Frage gesehen, die der Frage, die ich gestellt habe, sehr ähnlich ist, aber meine Zweifel nicht wirklich beantwortet. .. Direkte WLAN-Kommunikation zwischen Android-Smartphone und anderen Geräten

Mein Problem ist, dass ich nicht verstehen kann, wie der Handshake zwischen den beiden Geräten ausgeführt wird und wie das Netzwerk eingerichtet wird.

Wpa_supplicant ist mein Problem. Ich renne:

Sudo wpa_supplicant -wlan0 -Dnl80211 -c/etc/wpa_supplicant.conf
Sudo wpa_cli

Ich hatte jedoch viele Probleme: - Der Gerätename (und andere Parameter) wurden nicht festgelegt, da ich in der .conf-Datei angegeben habe - wpa_supplicant versucht weiterhin, eine Verbindung zu allen Netzwerken herzustellen - p2p_find war wirklich langsam ...

also ging ich in/usr/share/dbus-1/system-services und entfernte die beiden Dateien

fi.epitest.hostap.WPASupplicant.service
fi.w1.wpa_supplicant1.service

Jetzt kann ich

Sudo killall wpa_supplicant

und es stirbt wirklich, trennt mich von Wifi, ohne die folgende Sekunde erneut zu verbinden ..__ Jetzt kann ich wpa_supplicant starten und die drei Probleme sind gelöst.

Ich gehe in wpa_cli, starte "p2p_find" und gleichzeitig aktiviere ich die Suche in der App.

Android und Linux können sich jetzt sehen.

P2P-DEVICE-FOUND 00:11:22:44:88:ff p2p_dev_addr=00:11:22:44:88:ff
pri_dev_type=10-0050F204-5 name='GT-I9300' config_methods=0x188
dev_capab=0x24 group_capab=0x0 vendor_elems=1 new=0

Mit "p2p_peers" kann ich das Handy MAC sehen.

> aa:bb:cc:dd:ee:ff

Hier kann ich nicht weitermachen. Ich habe verschiedene Möglichkeiten ausprobiert, aber keine davon hat funktioniert. Mein Ziel ist es, Linux als Gruppeneigentümer zu haben.

  • Frage 1.1: Welches ist der richtige Weg zum Handshake der beiden Geräte?
  • Frage 1.2: Wenn ich p2p_connect versuche, bekomme ich oft "Michael MIC-Fehler erkannt" zwischen den Ergebnissen. Was bedeutet das in diesem Wettbewerb?
  • Frage 1.3: Android versucht derzeit, sich mit PBC zu verbinden. Es gibt eine Möglichkeit mit PIN zu verbinden?

Da ich keine Verbindung zu Android/Linux herstellen konnte, versuchte ich, etwas mit Linux/Linux (Linux Mint als GO, Ubuntu als Client) zu üben, und folgte Beispielen aus dem Internet, wie sie im ersten Link angegeben sind Anzahl der Probleme auch hier.

In Mint versuche ich es

p2p_connect MAC_UBUNTU pin auth

in Ubuntu versuche ich

p2p_connect MAC_MINT PIN_GENERATED_BY_MINT

Wenn ich den psp_connect in Mint schreibe, wird ein neues Interface p2p_wlan0 _0 erstellt und es wird zurückgegeben

P2P-DEVICE-LOST p2p_dev_addr=MAC_UBUNTU

dann schlägt der von Ubuntu gestartete p2p_connect fehl.

  • Frage 2.1 Warum wechselt die Schnittstelle beim Erstellen der Gruppe?
  • Frage 2.2 Wie ist der richtige Weg, um mit dieser Änderung umzugehen? Nach der Änderung kann ich nicht mehr p2p_find Ubuntu (ich muss einige Zeit warten oder alles neu starten)
  • Frage 2.3 Sollte Ubuntu sein Interface wechseln?
  • Frage 2.3 In der neuen Benutzeroberfläche sollte ich die IP für Ubuntu und Mint einstellen ... wie soll ich das mit statischen IPs machen?
  • Frage 2.4 Wenn ich zum Beispiel einen DHCP-Server und -Client einrichten möchte?

  • Frage 1.4 Und mit Android (Client)/Linux (GO)?

11
Kida

Ich habe viel an diesem Problem gearbeitet und hier sind die Antworten, die ich gefunden habe:

Ich wollte Linux als GO und Android als Client. Was in Linux für mich funktioniert, ist:

// Kill current supplicant and avoid its automatic recreation
system("mv /usr/share/dbus-1/system-services/fi.* .");
system("killall udhcpd");
system("wpa_cli -i wlan0 terminate -B");
usleep(300000);

// Start new supplicant
system("wpa_supplicant -Dnl80211 -iwlan0 -c /etc/p2p_supplicant.conf -B");
system("wpa_cli -iwlan0 p2p_group_add");
system("ifconfig p2p-wlan0-0 192.168.1.2");

// Connect with a peer
for (;;) {
  system("wpa_cli -ip2p-wlan0-0 wps_pbc");
  system("udhcpd /etc/udhcpd.conf");
  // Here start your TCP server on a port
  Server server([port]);
  server.startServer();
}

N.B. Um die P2P-Verbindung zu zerstören und die normale neu zu starten, verwende ich dieses Skript:

#!/bin/bash
wpa_cli -i wlan0 terminate -B
wpa_cli -i p2p-wlan0-0 terminate -B
cp ./fi.* /usr/share/dbus-1/system-services/
service network-manager restart

Hier wartet der Server auf eine Verbindung und der Android-Client stellt eine Verbindung her. Ich habe einen sehr einfachen TCP Server verwendet, der auf der ersten Website gefunden wurde, und es funktionierte wie ein Zauber .. Es ist wichtig, udhcpd zu starten, ansonsten wird das Symbol "Verbunden" in Android nicht angezeigt Auf der Android-Seite folgte ich dem, was ich auf http://developer.Android.com/training/connect-devices-wirelessly/wifi-direct.html gesehen habe - und es hat perfekt funktioniert.

  • Antwort 1.2 Von wpa_cli können Sie viele verschiedene Warnungen und Fehler erhalten. Ich habe gesehen, dass das einfache Aufrufen der Funktion (wie im vorherigen Snippet) trotz der Warnungen alles zum Laufen brachte. Ich habe sie ignoriert.

  • Antwort 1.3 Die Verbindung mit PIN funktioniert, als ich es ausprobierte, startete ich den udhcpd nicht und das stürzte meine Verbindung jedes Mal ab. Es lag nicht an PIN oder PBC.

  • Antwort 2.1 Sowohl der Server als auch der Client wechseln die Schnittstelle. Dies ist ein sehr ähnliches Verhalten wie bei Sockets. Sie erstellen einen abhörenden Socket, jemand stellt eine Verbindung her, Sie erstellen einen neuen Socket, um diesen Client in einem separaten Thread zu behandeln, während der abhörende Socket noch vorhanden ist, und wartet auf andere Benutzer. __ Sie tun das auch mit Schnittstellen. Wenn Sie ein wpa_cli starten, das die Schnittstelle wlan0 überwacht, und eine, die die Schnittstelle p2p-wlan0-0 überwacht, erhalten Sie eine gute Vorstellung davon, was während der Änderung passiert.

  • Antwort 2.2 Der Client ist zur anderen Schnittstelle gegangen und ist nun bereit, eine IP zu empfangen. Starten Sie die DHCP- und TCP -Server!

  • Antwort 2.3 Verwenden Sie keine statische IP-Adresse. Nur für den Server ist ok, der Client sollte eine DHCP-IP verwenden. Vielleicht gibt es eine Möglichkeit, mit statischen IPs umzugehen, aber dies war für meine Ziele nicht nützlich.

  • Antwort 2.4 Fertig. Das war schon immer das Problem

  • Antwort 1.4 Dies funktioniert auch mit Android/Linux einwandfrei.

Es tut mir leid, wenn ich bei meiner Antwort einen Fehler gemacht habe. Ich bekomme immer noch nicht das gesamte Bild der WiFi-Direct-Verbindungen. Ich hoffe einfach, dass dies jemandem helfen kann.

3
Kida

Haben Sie einfach versucht, Ihre Hotspot-Option auf Android zu aktivieren? Stellen Sie dann eine Verbindung mit dem Ubuntu-Gerät her, überprüfen Sie die verbundene IP-Adresse in den Android-Hotspot-Optionen und geben Sie diese Ihrer App .

0
GabyGab

(Vielleicht keine vollständige Antwort, aber richtige Richtung)

Das Problem ist auf der Linux-Seite. Ich habe ähnliche Probleme zwischen einem Cyanogenmod (Android 5) und Fedora 22, die versuchen, Wifi Direct (Wifi P2P) für Intels Wireless Display Software für Linux (WDS) zu verwenden.

Insbesondere der Intelsmanager von Intel weicht 2009 von Grund auf von dem Linux-Standard NetworkManager ab. Connman scheint die einzige Implementierung von Wifi Direct (Wifi P2P) für Linux zu sein und wurde für den Embedded (Mobile) Markt geschrieben.

Aufgrund eines RPM-Problems bleibt connman auf meinem System ungetestet. Die Software sollte jedoch die Linux-Anforderungen für die Dbus-Kommunikation erfüllen.

Website: https://01.org/connman

0
Anon