Does anyone know if Dount support WPA2-EAP or not ?!! much thanks
On 2月23日, 下午8時18分, a2ronus <[email protected]> wrote: > (Update: I got a reply from Jouni Malinen on the hostap mailinglist, I > tried his approachm but that doesn't seem to work either. I posted the > message below on the hostap mailinglist as well, since it seems to be > an Android-wpa_supplicant combination problem) > > Hello Jouni, > > Thanks for the reply. I've tried talking to the Unix domain Socket, > but it doesn't work. It appears to be a permission problem. > > You mentioned that Solution 3 should work. > Quote from my previous post; "- Solution 3: Talking directly to the > control interface of wpa_suplicant using Unix domain sockets. I found > that the Android API supplies us with the LocalSocket class for > this. ..." > > I have tried 2 ways of connecting to the wpa_supplicant Unix domain > socket(s). > > 1. From an Android terminal emulator through wpa_cli. > 2. I adapted an example Java Android program > (original:http://all4dev.blogspot.com/2009/02/android-localsocket-localserverso...). > > For clarity: each Android app has its own group and username, for > example <group:user> = app_35:app_35. For each approach I adjusted > wpa_supplicant.conf>ctrl_interface_group to allow an app access to the > domain sockets, for example (ctrl_interface_group=app_35). > > Results approach 1 ( From an Android terminal emulator through > wpa_cli. ): > 1. I start up the Android terminal emulator and enter the command > wpa_cli -p/data/misc/wifi/sockets/ctrl_wpa_79-0. I get the message: > > "Using interface 'tiwlan0' > Could not connect to wpa_supplicant - re-trying" > (The output is the same if I don't add the path to the socket, or > change the path to /data/misc/wifi/sockets.) > > Results approaches 2a and 2b: > Next, I tried it from an Android Java program (with the correct > wpa_supplicant.conf.ctrl_interface_group and after > wpa_cli>reconfigure) using 2 slightly different approaches: > a. When I use 'tiwlan0' as LocalSocketAddress, I use an abstract > namespace for the LocalSocket. When I do this I get a 'connection > refused' error message from the Android debug tool logcat. > b. When In use "/data/misc/wifi/sockets/ctrl_wpa_79-0", I use the > Filesystem Namespace. I then get a 'permission denied' error message. > a&b Both throw an IOException at the line "receiver.connect(new > LocalSocketAddress(SOCKET_ADDRESS, NAMESPACE)); " (this happens when > "if socket is in invalid state or the address does not exist."). > > So, or I'm doing something wrong, or something goes wrong with the > socket permissions. In the adb shell output the file permissions for > the sockets are set to <group:user> system:wifi. > > Below this message you can find the shell output and the Java code. > > Thanks for any help in advance. > > Kind regards, > > Aäron Jansen > > ***** Extra = ADB shell output showing location of sockets, and > wpa_supplicant.conf ***** > C:\Users\ajansen\Desktop\android-sdk-windows\tools>adb root > adbd is already running as root > > C:\Users\ajansen\Desktop\android-sdk-windows\tools>adb shell > # cd /data/misc/wifi > cd /data/misc/wifi > > # cat wpa_supplicant.conf > cat wpa_supplicant.conf > > ctrl_interface=tiwlan0 > ctrl_interface_group=app_35 > network={ > ssid="aaron" > proto=WPA2 > key_mgmt=WPA-EAP > eap=PEAP > pairwise=CCMP} > > # > > # cd sockets > cd sockets > # pwd > pwd > /data/misc/wifi/sockets > # ls > ls > wpa_ctrl_79-1 > wpa_ctrl_79-0 > # ls -l > ls -l > srw-rw---- system wifi 2010-02-23 10:23 wpa_ctrl_79-1 > srw-rw---- system wifi 2010-02-23 10:23 wpa_ctrl_79-0 > # > > ***** Java code ***** > package com.example.demolocalsocket; > > import java.io.IOException; > import java.io.InputStream; > > import android.app.Activity; > import android.net.LocalServerSocket; > import android.net.LocalSocket; > import android.net.LocalSocketAddress; > import android.os.Bundle; > import android.os.Handler; > import android.util.Log; > import android.view.View; > import android.view.View.OnClickListener; > import android.widget.Button; > import android.widget.Toast; > > /** > * > * @author Denis Migol > * > */ > public class DemoLocalSocketActivity extends Activity { > > public static String SOCKET_ADDRESS = "tiwlan0"; > public static LocalSocketAddress.Namespace NAMESPACE = > LocalSocketAddress.Namespace.ABSTRACT; > > // background threads use this Handler to post messages to > // the main application thread > private final Handler handler = new Handler(); > > public class NotificationRunnable implements Runnable { > private String message = null; > > public void run() { > if (message != null && message.length() > 0) { > showNotification(message); > } > } > > /** > * @param message the message to set > */ > public void setMessage(String message) { > this.message = message; > } > } > > // post this to the Handler when the background thread notifies > private final NotificationRunnable notificationRunnable = new > NotificationRunnable(); > > public void showNotification(String message) { > Toast.makeText(this, message+ " " + this.handler.toString(), > Toast.LENGTH_LONG).show(); > } > > class SocketListener extends Thread { > private Handler handler = null; > private NotificationRunnable runnable = null; > > public SocketListener(Handler handler, NotificationRunnable > runnable) { > this.handler = handler; > this.runnable = runnable; > this.handler.post(this.runnable); > } > > /** > * Show UI notification. > * @param message > */ > private void showMessage(String message) { > this.runnable.setMessage(message); > this.handler.post(this.runnable); > } > > @Override > public void run() { > //showMessage("DEMO: SocketListener started!"); > try { > > //LocalServerSocket server = new > LocalServerSocket(SOCKET_ADDRESS); > LocalSocket receiver = new LocalSocket(); > > receiver.connect(new LocalSocketAddress(SOCKET_ADDRESS, > NAMESPACE)); > showMessage("test"); > > InputStream input = receiver.getInputStream(); > > while (true) { > > //LocalSocket receiver = server.accept(); > if (receiver != null) { > > // simply for java.util.ArrayList > int readed = input.read(); > showMessage("input.read()"); > > int size = 0; > int capacity = 0; > byte[] bytes = new byte[capacity]; > > // reading > while (readed != -1) { > // java.util.ArrayList.Add(E e); > capacity = (capacity * 3)/2 + 1; > //bytes = Arrays.copyOf(bytes, capacity); > byte[] copy = new byte[capacity]; > System.arraycopy(bytes, 0, copy, 0, > bytes.length); > bytes = copy; > bytes[size++] = (byte)readed; > > // read next byte > readed = input.read(); > } > > showMessage(new String(bytes, 0, size)); > > } > > } > } catch (IOException e) { > showMessage("test2"); > Log.e("**************"+getClass().getName(), > e.getMessage()); > //showMessage(e.toString()); > } > } > } > > public static void writeSocket(String message) throws IOException > { > //LocalSocket sender = new LocalSocket(); > //sender.connect(new LocalSocketAddress(SOCKET_ADDRESS, > NAMESPACE)); > //sender.getOutputStream().write(message.getBytes()); > //sender.getOutputStream().close(); > } > > @Override > public void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > setContentView(R.layout.main); > > new SocketListener(this.handler, > this.notificationRunnable).start(); > > Button send1 = (Button)findViewById(R.id.send_1_button); > send1.setOnClickListener(new OnClickListener() { > > @Override > public void onClick(View v) { > try { > writeSocket("logoff"); > } catch (IOException e) { > Log.e(getClass().getName(), e.getMessage()); > } > } > > }); > } > > } > > 2010/2/19 Aäron Jansen (Gmail) <[email protected]> > Hi, > > (I'm new to posting questions on mailing lists. Suggestions on good > posting behaviour are appreciated. :) ) > > FYI: I've also posted this issue on the Android Development Google > Group. > > This is what I'm trying to achieve: I would like to write an Android > app that is capable of talking to wpa_supplicant. More specifically, I > would like to connect to a WPA2-EAP secured network (with > authentication methods TTLS / PEAP / TLS), but since the device will > be used by several users, the user credentials will be supplied by the > user in my app, instead of by wpa_suplicant.conf. I don't want to > write my own supplicant software, I would like to be able to > communicate with it. (I am able to connect to the network when I > provide the user credentials as well in the /data/misc/wifi/ > wpa_supplicant.conf file) > > I've looked at several solutions and their problems, and I would like > some advice on them. Maybe I've overlooked something: > > - Solution 1: Using the AndroidWifiAPI. Problem: The AndroidWiFi > API doesn't seem to support TTLS / PEAP / TLS. Strange other thing is: > It appears to support LEAP, but I can't find a way to supply the user > credentials to the WifiConfiguration. > > - Solution 2: Letting the app write to /data/misc/wifi/ > wpa_supplicant.conf and then reassociating. Problem: I understand from > the API that apps can only write to their own private space or the > external SD store. I've also tried writing to a file with the Terminal > Emulator app. This doesn't work. I can only write wpa_supplicant.conf > in the adb shell with root acces. > > - Solution 3: Talking directly to the control ... > > 閱讀更多 » -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

