C#WIFI搜索与连接 您所在的位置:网站首页 wifi信息获取 C#WIFI搜索与连接

C#WIFI搜索与连接

2024-06-18 16:53| 来源: 网络整理| 查看: 265

特别声明,本文转自:https://www.cnblogs.com/ywf520/p/6502452.html

1、功能搜索WIFI并连接

2、所用工具及资源:VS2012 Managed Wifi API(即:引用ManagedWifi.dll文件地址:http://files.cnblogs.com/files/ywf520/ManagedWifi.zip)

3、运行截图及工程截图:

 

工程目录 结构

4、具体代码实现

wifiSo.cs

复制代码

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NativeWifi; namespace WifiConnect { class wifiSo { private WIFISSID ssid; //wifi ssid private string key; //wifi密码 public List ssids = new List(); public wifiSo() { ssids.Clear(); } public wifiSo(WIFISSID ssid, string key) { ssids.Clear(); this.ssid = ssid; this.key = key; } //寻找当前连接的网络: public static string GetCurrentConnection() { WlanClient client = new WlanClient(); foreach (WlanClient.WlanInterface wlanIface in client.Interfaces) { Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0); foreach (Wlan.WlanAvailableNetwork network in networks) { if (wlanIface.InterfaceState == Wlan.WlanInterfaceState.Connected && wlanIface.CurrentConnection.isState == Wlan.WlanInterfaceState.Connected) { return wlanIface.CurrentConnection.profileName; } } } return string.Empty; } static string GetStringForSSID(Wlan.Dot11Ssid ssid) { return Encoding.UTF8.GetString(ssid.SSID, 0, (int)ssid.SSIDLength); } /// /// 枚举所有无线设备接收到的SSID /// public void ScanSSID() { WlanClient client = new WlanClient(); foreach (WlanClient.WlanInterface wlanIface in client.Interfaces) { // Lists all networks with WEP security Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0); foreach (Wlan.WlanAvailableNetwork network in networks) { WIFISSID targetSSID = new WIFISSID(); targetSSID.wlanInterface = wlanIface; targetSSID.wlanSignalQuality = (int)network.wlanSignalQuality; targetSSID.SSID = GetStringForSSID(network.dot11Ssid); //targetSSID.SSID = Encoding.Default.GetString(network.dot11Ssid.SSID, 0, (int)network.dot11Ssid.SSIDLength); targetSSID.dot11DefaultAuthAlgorithm = network.dot11DefaultAuthAlgorithm.ToString(); targetSSID.dot11DefaultCipherAlgorithm = network.dot11DefaultCipherAlgorithm.ToString(); ssids.Add(targetSSID); } } } // 字符串转Hex public static string StringToHex(string str) { StringBuilder sb = new StringBuilder(); byte[] byStr = System.Text.Encoding.Default.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str) for (int i = 0; i < byStr.Length; i++) { sb.Append(Convert.ToString(byStr[i], 16)); } return (sb.ToString().ToUpper()); } // 连接到无线网络 public void ConnectToSSID() { try { String auth = string.Empty; String cipher = string.Empty; bool isNoKey = false; String keytype = string.Empty; //Console.WriteLine("》》》《《" + ssid.dot11DefaultAuthAlgorithm + "》》对比《《" + "Wlan.Dot11AuthAlgorithm.RSNA_PSK》》"); switch (ssid.dot11DefaultAuthAlgorithm) { case "IEEE80211_Open": auth = "open"; break; case "RSNA": auth = "WPA2PSK"; break; case "RSNA_PSK": //Console.WriteLine("电子设计wifi:》》》"); auth = "WPA2PSK"; break; case "WPA": auth = "WPAPSK"; break; case "WPA_None": auth = "WPAPSK"; break; case "WPA_PSK": auth = "WPAPSK"; break; } switch (ssid.dot11DefaultCipherAlgorithm) { case "CCMP": cipher = "AES"; keytype = "passPhrase"; break; case "TKIP": cipher = "TKIP"; keytype = "passPhrase"; break; case "None": cipher = "none"; keytype = ""; isNoKey = true; break; case "WWEP": cipher = "WEP"; keytype = "networkKey"; break; case "WEP40": cipher = "WEP"; keytype = "networkKey"; break; case "WEP104": cipher = "WEP"; keytype = "networkKey"; break; } if (isNoKey && !string.IsNullOrEmpty(key)) { Console.WriteLine(">>>>>>>>>>>>>>>>>无法连接网络!"); return; } else if (!isNoKey && string.IsNullOrEmpty(key)) { Console.WriteLine("无法连接网络!"); return; } else { //string profileName = ssid.profileNames; // this is also the SSID string profileName = ssid.SSID; string mac = StringToHex(profileName); string profileXml = string.Empty; if (!string.IsNullOrEmpty(key)) { profileXml = string.Format("{0}{1}{0}ESSautofalse{2}{3}false{4}false{5}0", profileName, mac, auth, cipher, keytype, key); } else { profileXml = string.Format("{0}{1}{0}ESSautofalse{2}{3}false", profileName, mac, auth, cipher, keytype); } ssid.wlanInterface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true); bool success = ssid.wlanInterface.ConnectSynchronously(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName, 15000); if (!success) { Console.WriteLine("连接网络失败!"); return; } } } catch (Exception e) { Console.WriteLine("连接网络失败!"); return; } } //当连接的连接状态进行通知 面是简单的通知事件的实现,根据通知的内容在界面上显示提示信息: private void WlanInterface_WlanConnectionNotification(Wlan.WlanNotificationData notifyData, Wlan.WlanConnectionNotificationData connNotifyData) { try { if (notifyData.notificationSource == Wlan.WlanNotificationSource.ACM) { int notificationCode = (int)notifyData.NotificationCode; switch (notificationCode) { case (int)Wlan.WlanNotificationCodeAcm.ConnectionStart: Console.WriteLine("开始连接无线网络......."); break; case (int)Wlan.WlanNotificationCodeAcm.ConnectionComplete: break; case (int)Wlan.WlanNotificationCodeAcm.Disconnecting: Console.WriteLine("正在断开无线网络连接......."); break; case (int)Wlan.WlanNotificationCodeAcm.Disconnected: Console.WriteLine("已经断开无线网络连接......."); break; } } //})); } catch (Exception e) { //Loger.WriteLog(e.Message); } } } class WIFISSID { public string SSID = "NONE"; public string dot11DefaultAuthAlgorithm = ""; public string dot11DefaultCipherAlgorithm = ""; public bool networkConnectable = true; public string wlanNotConnectableReason = ""; public int wlanSignalQuality = 0; public WlanClient.WlanInterface wlanInterface = null; } }

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using NativeWifi; using System.Threading; namespace WifiConnect {     public partial class wifi : Form     {         private List ssids;         private wifiSo wifiso;         public wifi()         {             InitializeComponent();         }

        private void wifi_Load(object sender, EventArgs e)         {                          wifiso = new wifiSo();  //加载wifi             ssids = wifiso.ssids;             wifiso.ScanSSID();      //显示所有wifi                      }         private void connectWIFI()         {

        }

        private void button1_Click(object sender, EventArgs e)         {             this.wifiListOK.Items.Clear();  //只移除所有的项。             //wifiListOK.Clear();//清除listview中的数据             SetwifiList();             ScanSSID();         }

        //设置listviewok         private void SetwifiList()         {             this.wifiListOK.Columns.Add("wifi名称", 160, HorizontalAlignment.Left); //一步添加              this.wifiListOK.Columns.Add("wifiSSID", 120, HorizontalAlignment.Left); //一步添加              this.wifiListOK.Columns.Add("加密方式", 100, HorizontalAlignment.Left); //一步添加             this.wifiListOK.Columns.Add("信号强度", 88, HorizontalAlignment.Left); //一步添加              //ColumnHeader ch = new ColumnHeader();  //先创建列表头             wifiListOK.GridLines = true;//显示网格             wifiListOK.Scrollable = true;//显示所有项时是否显示滚动条             wifiListOK.AllowColumnReorder = true;             wifiListOK.FullRowSelect = true;             wifiListOK.CheckBoxes = true;         }         //添加数据         private void wifiListOKADDitem(String wifiname, String pass,String dot11DefaultAuthAlgorithm,int i)         {             this.wifiListOK.BeginUpdate();   //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度               //this.wifiListOK.Items.Add(wifiname,0);             ListViewItem wifiitem = wifiListOK.Items.Add(wifiname);

            wifiitem.SubItems.Add(pass);             wifiitem.SubItems.Add(dot11DefaultAuthAlgorithm);             wifiitem.SubItems.Add(i+"");

            this.wifiListOK.EndUpdate();  //结束数据处理,UI界面一次性绘制。             this.wifiListOK.View = System.Windows.Forms.View.Details;         }

        //单击事件         private void wifiListOK_SelectedIndexChanged(object sender, EventArgs e)         {

            if (wifiListOK.SelectedIndices != null && wifiListOK.SelectedItems.Count > 0)             {                 ListView.SelectedIndexCollection c = wifiListOK.SelectedIndices;                 MessageBoxButtons messButton = MessageBoxButtons.OKCancel;                 DialogResult dr = MessageBox.Show("确定要连接" + wifiListOK.Items[c[0]].Text + "吗?", "wifi连接", messButton);                  if (dr == DialogResult.OK)//如果点击“确定”按钮                  {                     // Console.WriteLine(">>>>>>>", ssid);                      //wifiso.ConnectToSSID(targetSSID, "ZMZGZS520");//连接wifi                  }             }         }         static string GetStringForSSID(Wlan.Dot11Ssid ssid)         {             return Encoding.UTF8.GetString(ssid.SSID, 0, (int)ssid.SSIDLength);         }         //显示所有wifi         public void ScanSSID()         {             WlanClient client = new WlanClient();             foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)             {                 // Lists all networks with WEP security                 Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0);                 foreach (Wlan.WlanAvailableNetwork network in networks)                 {                     WIFISSID targetSSID = new WIFISSID();

                    targetSSID.wlanInterface = wlanIface;                     targetSSID.wlanSignalQuality = (int)network.wlanSignalQuality;                     targetSSID.SSID = GetStringForSSID(network.dot11Ssid);                     //targetSSID.SSID = Encoding.Default.GetString(network.dot11Ssid.SSID, 0, (int)network.dot11Ssid.SSIDLength);                     targetSSID.dot11DefaultAuthAlgorithm = network.dot11DefaultAuthAlgorithm.ToString();                     targetSSID.dot11DefaultCipherAlgorithm = network.dot11DefaultCipherAlgorithm.ToString();                     ssids.Add(targetSSID);                     wifiListOKADDitem(GetStringForSSID(network.dot11Ssid), network.dot11DefaultCipherAlgorithm.ToString(),                         network.dot11DefaultAuthAlgorithm.ToString(),(int)network.wlanSignalQuality);                     if (GetStringForSSID(network.dot11Ssid).Equals("DZSJ1"))                     {                         var obj = new wifiSo(targetSSID, "ZMZGZS520");                         Thread wificonnect = new Thread(obj.ConnectToSSID);                         wificonnect.Start();                         //wifiso.ConnectToSSID(targetSSID, "ZMZGZS520");//连接wifi                         connectWifiOK.Text = GetStringForSSID(network.dot11Ssid);                         Image img = new Bitmap(Environment.CurrentDirectory+"/image/wifi.png");//这里是你要替换的图片。当然你必须事先初始化出来图                         pictureBoxW.BackgroundImage = img;                         //Console.WriteLine(">>>>>>>>>>>>>>>>>开始连接网络!" + targetSSID.SSID + GetStringForSSID(network.dot11Ssid) + GetStringForSSID(network.dot11Ssid).Equals("DZSJ1"));                     }

                }             }         }         ///         /// 关闭wifi         ///         ///         ///         private void closeWIFI_Click(object sender, EventArgs e)         {             if (connectWifiOK.Text.Equals("无") || connectWifiOK.Text.Equals(null))             {                 MessageBox.Show("当前无连接wifi");             }             else             {                              }         }         //更新数据         private void getwifidatabtn_Click(object sender, EventArgs e)         {             WifiSocket wifiscoket = new WifiSocket();             wifiscoket.fuwu();             wifiscoket.kehuduan();         }     } }

5、到此就结束了,写的不对的地方希望大家多多指教,更多功能还希望小伙伴们继续研究。

6、鸣谢:感谢各位广大博友无私的分享精神!

7、参考:http://blog.csdn.net/m593192219/article/details/9363355

8、源代码:https://files.cnblogs.com/files/ywf520/ManagedWifi.zip



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有