Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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
            {
            }
        }