【问题标题】:How to find a list of wireless networks (SSID's) in Java, C#, and/or C?如何在 Java、C# 和/或 C 中查找无线网络 (SSID) 列表?
【发布时间】:2009-05-27 20:39:26
【问题描述】:

是否有可用的工具包/程序包可用于查找在 Java、C# 或 C for Windows XP+ 中可用的无线网络 (SSID) 列表?任何示例代码将不胜感激。

【问题讨论】:

    标签: c# java c wireless ssid


    【解决方案1】:

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

    我尚未测试此代码,但查看托管 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 );
    }
    

    【讨论】:

      【解决方案2】:
      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】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-31
        相关资源
        最近更新 更多