代码之家  ›  专栏  ›  技术社区  ›  Taylor Leese

如何在爪哇、C、C和C中找到无线网络列表(SSID)?

  •  12
  • Taylor Leese  · 技术社区  · 15 年前

    是否有一个工具包/包,我可以用来找到一个无线网络(SSID)的列表,在WindowsXP+的Java、C、C或C中都可用?任何样本代码都将不胜感激。

    3 回复  |  直到 9 年前
        1
  •  12
  •   Dan Walker    15 年前

    对于C,请查看 Managed Wifi API ,它是 Native Wifi API 随Windows XP SP2及更高版本提供。

    我没有测试过这段代码,但是在查看托管WiFiAPI示例代码时,应该列出可用的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 );
    }
    
        2
  •  1
  •   Reza Taghizadeh    9 年前
    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)  );
    }
    
        3
  •  0
  •   Abhishek Anand    15 年前

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