/// <summary> /// Returns a list over all available access points from specified wlaninterface. /// </summary> /// <param name="wlanIface"></param> /// <returns></returns> public List <AccessPoint> GetAccessPoints(WlanInterface wlanIface) { List <AccessPoint> accessPoints = new List <AccessPoint>(); if (_client.NoWifiAvailable) { return(accessPoints); } WlanAvailableNetwork[] rawNetworks = wlanIface.GetAvailableNetworkList(); List <WlanAvailableNetwork> networks = new List <WlanAvailableNetwork>(); // Remove network entries without profile name if one exist with a profile name. foreach (WlanAvailableNetwork network in rawNetworks) { bool hasProfileName = !string.IsNullOrEmpty(network.profileName); bool anotherInstanceWithProfileExists = rawNetworks.Any(n => n.Equals(network) && !string.IsNullOrEmpty(n.profileName)); if (!anotherInstanceWithProfileExists || hasProfileName) { networks.Add(network); } } foreach (WlanAvailableNetwork network in networks) { accessPoints.Add(new AccessPoint(wlanIface, network)); } return(accessPoints); }
/// <summary> /// Return one access point that matached specified ssid Name from specified wlaninterface. /// </summary> /// <param name="wlanIface"></param> /// <param name="SsidName"></param> /// <returns></returns> public AccessPoint GetAccessPoint(WlanInterface wlanIface, string SsidName) { if (_client.NoWifiAvailable) { return(null); } if (wlanIface == null) { return(null); } WlanAvailableNetwork[] rawNetworks = wlanIface.GetAvailableNetworkList(); List <WlanAvailableNetwork> networks = new List <WlanAvailableNetwork>(); // Remove network entries without profile name if one exist with a profile name. foreach (WlanAvailableNetwork network in rawNetworks) { bool hasProfileName = !string.IsNullOrEmpty(network.profileName); bool anotherInstanceWithProfileExists = rawNetworks.Any(n => n.Equals(network) && !string.IsNullOrEmpty(n.profileName)); if (!anotherInstanceWithProfileExists || hasProfileName) { networks.Add(network); } } foreach (WlanAvailableNetwork network in networks) { if (Encoding.ASCII.GetString(network.dot11Ssid.SSID, 0, (int)network.dot11Ssid.SSIDLength) != SsidName) { continue; } AccessPoint accessPoint = new AccessPoint(wlanIface, network); return(accessPoint); } return(null); }
public IEnumerable <NetworkData> GetNetworkData() { List <NetworkData> list = new List <NetworkData>(); //If the interface is null, return nothing if (_interface == null) { return(list); } IEnumerable <Wlan.WlanBssEntryN> networkBssList = null; IEnumerable <Wlan.WlanAvailableNetwork> availableNetworkList = null; try { networkBssList = _interface.GetNetworkBssList(); availableNetworkList = _interface.GetAvailableNetworkList(Wlan.WlanGetAvailableNetworkFlags.IncludeAllManualHiddenProfiles); } catch (NullReferenceException) { //Hopefully the call will succeed next time. } if ((networkBssList != null) && (availableNetworkList != null)) { //Get connected to AP Wlan.WlanAssociationAttributes connectedAP = new Wlan.WlanAssociationAttributes(); try { if (_interface.CurrentConnection.isState == Wlan.WlanInterfaceState.Connected) { connectedAP = _interface.CurrentConnection.wlanAssociationAttributes; } } catch (NullReferenceException) { /*Hopefully it will work next time*/ } Wlan.WlanAvailableNetwork foundNetwork = new Wlan.WlanAvailableNetwork(); foreach (Wlan.WlanBssEntryN entry in networkBssList) { string ssid = Encoding.ASCII.GetString(entry.BaseEntry.dot11Ssid.SSID, 0, (int)entry.BaseEntry.dot11Ssid.SSIDLength); if (FindNetwork(ssid, availableNetworkList, ref foundNetwork)) { NetworkData item = new NetworkData(entry.BaseEntry.dot11Bssid); item.IsTypeN = (entry.BaseEntry.dot11BssPhyType == Wlan.Dot11PhyType.Ht); if (item.IsTypeN && entry.IEs != null && entry.IEs.Length > 0) { item.NSettings = IeParser.Parse(entry.IEs); if (item.NSettings == null) { return(null); } //Add the extended 802.11N rates item.Rates.AddRange(item.NSettings.Rates.Where(f => !item.Rates.Contains(f))); item.Rates.Sort(); } Utilities.ConvertToMbs(entry.BaseEntry.wlanRateSet.Rates, item.Rates); item.IsTypeN = entry.BaseEntry.dot11BssPhyType == Wlan.Dot11PhyType.Ht; int num = Utilities.ComputeRssi(entry.BaseEntry.linkQuality); item.Rssi = (entry.BaseEntry.rssi > num) ? entry.BaseEntry.rssi : num; // tyler's fix // Sometimes there is an issue where the RSSI will become overly positive // (e.g. going from -96 to +160), so subtracting 256 will fix it. if (item.Rssi > 0) { item.Rssi -= 256; } item.Ssid = ssid; item.Channel = Utilities.ConvertToChannel(entry.BaseEntry.chCenterFrequency); item.NetworkType = Utilities.ConvertToString(entry.BaseEntry.dot11BssType); item.Security = Utilities.CreateSecurityString(foundNetwork.dot11DefaultAuthAlgorithm, foundNetwork.dot11DefaultCipherAlgorithm); item.SignalQuality = foundNetwork.wlanSignalQuality; //Check to see if this AP is the connected one item.Connected = item.MyMacAddress.CompareToPhysicalAddress(connectedAP.Dot11Bssid); list.Add(item); } } } return(list); }
private void timer1_Tick(object sender, EventArgs e) { try { if (checkBox1.Checked) { listView1.Items.Clear(); if (listBox1.SelectedItem != null) { WlanInterface wlanIface = client.Interfaces.Where(s => s.InterfaceDescription.Equals(listBox1.SelectedItem.ToString())).First(); try { if (wlanIface.InterfaceState == WlanInterfaceState.Connected) { connectedSSID = wlanIface.CurrentConnection.profileName; label1.Text = "Current connection: " + connectedSSID + " " + wlanIface.CurrentConnection.isState; button3.Enabled = true; } else { connectedSSID = string.Empty; label1.Text = "Current connection: " + wlanIface.InterfaceState; button3.Enabled = false; } } catch { connectedSSID = string.Empty; label1.Text = "Current connection: " + wlanIface.InterfaceState; button3.Enabled = false; } wlanIface.Scan(); WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(WlanGetAvailableNetworkFlags.IncludeAllAdhocProfiles); foreach (WlanAvailableNetwork network in networks.GroupBy(x => GetStringForSSID(x.dot11Ssid)).Select(y => y.First()).OrderByDescending(r => r.wlanSignalQuality)) { ListViewItem li = new ListViewItem(); li.Text = GetStringForSSID(network.dot11Ssid); li.SubItems.Add(network.networkConnectable.ToString()); li.SubItems.Add(network.wlanSignalQuality.ToString()); li.SubItems.Add(network.dot11DefaultCipherAlgorithm.ToString()); li.SubItems.Add(network.dot11DefaultAuthAlgorithm.ToString()); li.SubItems.Add(network.securityEnabled.ToString()); try { WlanProfileInfo[] wpi = wlanIface.GetProfiles().Where(s => s.profileName.Equals(li.Text)).ToArray(); li.Tag = (wpi.Length > 0 && wlanIface.InterfaceState != WlanInterfaceState.Connected) ? "true" : "false"; } catch { li.Tag = "false"; } if (selectedSSID == li.Text) { li.Selected = true; if (li.Tag.ToString() == "true") { button2.Enabled = true; } else { button2.Enabled = false; } } if (connectedSSID == li.Text) { li.ForeColor = Color.White; li.BackColor = Color.Green; } else { li.ForeColor = Color.Black; li.BackColor = Color.LightCyan; } listView1.Items.Add(li); } } /*foreach (AccessPoint ap in wifi.GetAccessPoints()) * { * ListViewItem li = new ListViewItem(); * li.Text = ap.Name; * li.SubItems.Add(ap.SignalStrength.ToString()); * li.SubItems.Add(ap.Interface.Channel.ToString()); * li.SubItems.Add(ap.HasProfile.ToString()); * li.SubItems.Add(ap.IsConnected.ToString()); * li.SubItems.Add(ap.IsSecure.ToString()); * if (selectedSSID == li.Text) * { * li.Selected = true; * } * if (connectedSSID == li.Text) * { * li.ForeColor = Color.White; * li.BackColor = Color.Green; * } * else * { * li.ForeColor = Color.Black; * li.BackColor = Color.LightCyan; * } * listView1.Items.Add(li); * }*/ } } catch { } }