Trouver le SSID d'un réseau sans fil avec Java


Nous faisons un projet codé en Java (compilé pour JRE 1.6) et avons besoin d'aide avec une caractéristique peu mais apparemment compliquée: Nous voulons faire une certaine action lorsqu'un réseau sans fil spécifique est connecté, par exemple lorsque le SSID connecté=="myNetworkAtHome" ou similaire.

Après avoir parcouru ce site, Google et la documentation Java, nous nous sommes un peu plus rapprochés. Après avoir regardé le code ici: http://download.oracle.com/javase/tutorial/networking/nifs/retrieving.html

Il semble que nous nous rapprochions mais il frappe un point mort, toutes les interfaces semblent être connectées à "net0" via "net13" (sur mon ordinateur portable c'est-à-dire.) Et nous sommes incapables d'obtenir le SSID de n'importe quelle interface. Je me rends compte que le code dans l'exemple ne donne que les noms d'interface et non les réseaux connectés, mais il ne semble pas offrir un moyen de récupérer le réseau connecté information.

Toute aide à ce sujet serait extrêmement utile!

Cordialement Martin NJ

Author: Martinnj, 2011-03-21

3 answers

Vous ne pouvez pas accéder à ces détails de bas niveau du réseau en Java. Vous pouvez obtenir quelques détails de l'interface réseau avec la classe NetworkInterface mais si vous voyez les méthodes fournies, personne n'est lié aux réseaux Wifi ni aucun moyen d'obtenir le SSID n'est fourni. Comme indiqué ci-dessous, vous devez utiliser certaines fonctionnalités natives en appelant une bibliothèque native avec JNI ou en appelant un outil OS avec Runtime.

Java n'est pas conçu pour faire ce genre de choses, est difficile à implémenter dans un de manière indépendante de la plate-forme et tout détail au niveau matériel ne peut pas être géré en Java par principe.

Idem pour d'autres réseaux comme 3G, GPRS... l'application ne doit pas connaître le type de connexion ni ses détails. Java ne peut gérer les choses au niveau du transport (TCP), pas le réseau (IP) pas Lien (3G, Wifi, Ethernet...), vous ne pouvez donc gérer que les sockets.

 13
Author: David Oliván Ubieto, 2011-03-21 16:50:05

Vous devrez recourir à une solution JNI. Il y a quelque chose disponible à http://sourceforge.net/projects/jwlanscan , mais cela ne fonctionne que pour les systèmes Windows. Ou vous pouvez le faire de la manière la plus laide et utiliser Runtime.getRuntime ().exec(...) et utiliser les outils de ligne de commande disponibles pour votre système d'exploitation (*nix = iwconfig) et recourir à l'analyse.

 4
Author: Lieven Doclo, 2011-03-21 14:26:11
 ArrayList<String>ssids=new ArrayList<String>();
    ArrayList<String>signals=new ArrayList<String>();
    ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "netsh wlan show all");
    builder.redirectErrorStream(true);
    Process p = builder.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while (r.read()!=-1) {
        line = r.readLine();
        if (line.contains("SSID")||line.contains("Signal")){
            if(!line.contains("BSSID"))
                if(line.contains("SSID")&&!line.contains("name")&&!line.contains("SSIDs"))
                {
                    line=line.substring(8);
                    ssids.add(line);

                }
                if(line.contains("Signal"))
                {
                    line=line.substring(30);
                    signals.add(line);

                }

                if(signals.size()==7)
                {
                    break;
                }

        }

    }
    for (int i=0;i<ssids.size();i++)
    {
        System.out.println("SSID name == "+ssids.get(i)+"   and its signal == "+signals.get(i)  );
    }
 1
Author: Alireza Taghizadeh, 2018-03-01 09:23:43