2015-02-17 4 views
-2

Я делаю программу на Java, где ей нужно распечатать список доступных имен WiFi, SSID, в консоли, разделенных точками с запятой.Распечатать список WiFi-SSID?

Так как: wifi1; thekingswifi; otherwifi

+1

@LawrenceAiello Вы знаете, что вместо того, чтобы быть рывком, вы действительно можете использовать его. –

+1

@WizGamin, я с тобой - это было неуместно. Однако ваш вопрос не очень ясен. Не могли бы вы обновить его образцом написанного вами кода и объяснить, какая часть его не работает для вас? –

+0

@ SimonMᶜKenzie, где я застрял ... по существу ему нужно найти ближайший Wi-Fi, а затем сказать имена этих wifi –

ответ

0

Запрос данных Wi-Fi в системе, к сожалению, OS конкретные поэтому не является общей библиотеки, чтобы сделать это.

Тем не менее, вот класс, который я написал, который использует утилиту командной строки Windows netsh для извлечения SSID и возврата их в строку JSON. Аналогичные утилиты существуют и для других операционных систем, которые можно использовать для достижения такого же эффекта. Надеюсь, этот класс поможет вам начать.

import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class WindowsNetworkHelper 
{ 

    public String getSsidsJson(String regex) throws Exception 
    { 
     Runtime rt = Runtime.getRuntime(); 
     try 
     { 
      Process pr = rt.exec("netsh wlan show networks mode=bssid"); 

      String processOutput = processOutputToString(pr); 
      ArrayList<String> ssidList = extractSsids(processOutput,regex); 
      String result = "["; 
      boolean addComma = false; 
      for(String ssid : ssidList) 
      { 
       if(addComma) 
       { 
        result += ","; 
       } 
       result += "{\"ssid\":\"" + ssid + "\"}"; 
       addComma = true; 
      } 
      result += "]"; 
      return result; 
     } catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return "[]"; 
    } 

    private ArrayList<String> extractSsids(String result,String regex) 
    { 
     ArrayList<String> ssids = new ArrayList<String>(); 
     String[] lines = result.split("\r\n\r\n"); 
     Pattern ssidPattern = Pattern.compile("^SSID [0-9]+ : (.+)"); 

     for(String line : lines) 
     { 
      Matcher ssidMatcher = ssidPattern.matcher(line); 
      if(ssidMatcher.find()) 
      { 
       String capture = ssidMatcher.group(1); 

       if(ssidMatchesFilter(capture,regex)) 
       { 
        ssids.add(capture); 
       } 
      } 
     } 

     return ssids; 
    } 

    private boolean ssidMatchesFilter(String ssid,String regex) 
    { 
     if(regex == null) 
     { 
      return true; 
     } 
     Pattern filterPattern = Pattern.compile(regex); 
     Matcher filterMatcher = filterPattern.matcher(ssid); 
     return filterMatcher.matches(); 
    } 

    private String processOutputToString(Process pr) 
    { 
     InputStream is = pr.getInputStream(); 
     java.util.Scanner s = new java.util.Scanner(is); 
     s.useDelimiter("\\A"); 
     String result = s.hasNext() ? s.next() : ""; 
     s.close(); 
     return result; 
    } 

}