【问题标题】:Print list of WiFi SSID's?打印 WiFi SSID 列表?
【发布时间】:2015-04-17 15:42:41
【问题描述】:

我正在用 Java 编写一个程序,它需要将可用 WiFi 名称的列表(SSID)打印到控制台中,所有名称都用分号分隔。

比如:wifi1;thekingswifi;otherwifi

【问题讨论】:

  • @LawrenceAiello 你知道,与其做个混蛋,你实际上可以派上用场。
  • @WizGamin,我支持你——那不合适。但是,您的问题不是很清楚。您能否用您编写的代码示例对其进行更新,并说明其中哪一部分不适合您?
  • @SimonMᶜKenzie 那是我被困的地方......基本上它需要搜索附近的 wifi,然后说出这些 wifi 的名称
  • 所以您本质上是希望我们为您编写代码。现在你明白我为什么发表评论了。
  • 恐怕这对于堆栈溢出来说太宽泛了。您需要证明您已经做出了努力,然后您可以就您遇到的特定编码问题提出问题。正如@LawrenceAiello 所说,没有人会为您编写代码,但他们帮助您修复您已经编写的代码!

标签: java wifi ssid


【解决方案1】:

遗憾的是,查询系统上的 wifi 数据是特定于操作系统的,因此没有通用库来执行此操作。

尽管如此,这是我编写的一个类,它使用 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;
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 2015-08-31
    • 1970-01-01
    • 2015-09-28
    • 2014-02-18
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多