Vraag SSID vinden van een draadloos netwerk met Java


We doen een project gecodeerd in Java (gecompileerd voor JRE 1.6) en hebben wat hulp nodig een beetje, maar blijkbaar ingewikkelde functie: We willen een bepaalde actie uitvoeren wanneer een specifiek draadloos netwerk is verbonden, bijvoorbeeld wanneer de verbonden SSID == "myNetworkAtHome" of iets dergelijks.

Na het bekijken van deze site, google en de Java-documentatie zijn we wat dichterbij gekomen. Na het bekijken van de code hier: http://download.oracle.com/javase/tutorial/networking/nifs/retrieving.html

Het lijkt erop dat we dichtbij komen, maar het raakt een doodlopende weg, alle interfaces lijken te zijn verbonden met "net0" tot en met "net13" (op mijn laptop dus). En we kunnen de SSID helemaal niet uit een interface halen. Ik realiseer me dat de code in het voorbeeld alleen de interfacenamen en niet verbonden netwerken geeft, maar het lijkt geen manier te bieden om de verbonden netwerkinformatie op te halen.

Om het even welke hulp op dit zou uiterst nuttig zijn!

vriendelijke groeten Martin NJ


10
2018-03-21 13:17


oorsprong


antwoorden:


U hebt geen toegang tot deze low-level details van het netwerk in Java. U kunt enkele details van de netwerkinterface krijgen met de NetworkInterface klasse, maar als je ziet op de verstrekte methoden, niemand is gerelateerd aan Wifi-netwerken noch een manier om de SSID te krijgen wordt verstrekt. Zoals hieronder aangegeven, zou je wat native-functionaliteit moeten gebruiken door een native library met JNI aan te roepen of door een OS-tool aan te roepen Runtime.

Java is niet ontworpen om dat soort dingen te doen, is moeilijk te implementeren op een platformonafhankelijke manier en elk detail op hardware-niveau kan principieel niet in Java worden beheerd.

Hetzelfde geldt voor andere netwerken zoals 3G, GPRS ... de applicatie moet niet op de hoogte zijn van het verbindingstype, noch van de details. Java kan alleen dingen beheren op het Transport (TCP) -niveau, niet het netwerk (IP) en niet Link (3G, Wifi, Ethernet ...), dus je kunt alleen sockets beheren.


13
2018-03-21 16:50



Je zult een beroep moeten doen op een JNI-oplossing. Er is iets beschikbaar op http://sourceforge.net/projects/jwlanscan, maar dat werkt alleen voor Windows-systemen. Of u zou het op de lelijke manier kunnen doen en Runtime.getRuntime (). Exec (...) gebruiken en de commandoregelhulpmiddelen gebruiken die beschikbaar zijn voor uw OS (* nix = iwconfig) en hun toevlucht nemen tot parsen.


4
2018-03-21 14:26



 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
2018-05-18 07:08