如何在Java、C#或C中查找无线网络(SSID)列表?

12

有没有一个工具包/软件包可以在Java、C#或C语言中查找可用的无线网络(SSID)列表,适用于Windows XP及以上版本?如果有示例代码将不胜感激。

3个回答

12
对于C#,可以看一下Managed Wifi API,它是Windows XP SP2及更高版本提供的Native Wifi API的封装器。
我没有测试过这段代码,但根据Managed Wifi API示例代码,它应该列出可用的SSID。
WlanClient client = new WlanClient();
foreach ( WlanClient.WlanInterface wlanIface in client.Interfaces )
{
    // Lists all available networks
    Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList( 0 );
    foreach ( Wlan.WlanAvailableNetwork network in networks )
    {                     
        Console.WriteLine( "Found network with SSID {0}.", GetStringForSSID(network.dot11Ssid));
    }
}

static string GetStringForSSID(Wlan.Dot11Ssid ssid)
{
    return Encoding.ASCII.GetString( ssid.SSID, 0, (int) ssid.SSIDLength );
}

1
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 (true) {
    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=1;i<ssids.size();i++)
{
    System.out.println("SSID name == "+ssids.get(i)+"   and its signal == "+signals.get(i)  );
}

似乎除了这种方式,我们没有其他途径。 - Reza Taghizadeh

0

好的,你没有指定操作系统,所以对于Linux,我建议使用Jean Tourrilhes的Linux无线工具(http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html)。 iwlist()命令显示有关可用网络的大量信息。源代码是用C编写的。另一种方法是使用libpcap编写自己的C代码,以捕获信标帧并从中提取SSID(仅在监视模式下)。我还没有测试过我的嗅探代码,所以我不会在这里粘贴它,但这是一个相当简单的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接