Пример #1
0
        static string MakeOpenProfile(string profileName, Wlan.WlanAvailableNetwork network)
        {
            string ssid       = GetStringForSSID(network.dot11Ssid);
            string encryption = CipherToStringInProfile(network.dot11DefaultCipherAlgorithm);

            string profile = string.Format(
                @"<?xml version=""1.0"" encoding=""US-ASCII""?>
<WLANProfile xmlns=""http://www.microsoft.com/networking/WLAN/profile/v1"">
    <name>{0}</name>
    <SSIDConfig>
        <SSID>
            <name>{1}</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <autoSwitch>false</autoSwitch>
    <MSM>
        <security>
            <authEncryption>
                <authentication>open</authentication>
                <encryption>{2}</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
        </security>
    </MSM>
</WLANProfile>
", profileName, ssid, encryption);

            return(profile);
        }
Пример #2
0
        private void AddToList(Wlan.WlanAvailableNetwork network, Wlan.WlanBssEntry entry)
        {
            ListViewItem wifiItem = new ListViewItem(this.GetProfileName(network.dot11Ssid));

            // MAC Address
            wifiItem.SubItems.Add(this.GetMacAddress(entry.dot11Bssid));
            // Signal Quality
            wifiItem.SubItems.Add(string.Format("{0}%", network.wlanSignalQuality.ToString()));
            // dBm Value
            wifiItem.SubItems.Add(string.Format("{0}dBm", entry.rssi.ToString()));
            // Channel No
            wifiItem.SubItems.Add(this.GetChannel(entry).ToString());
            // Encryption
            wifiItem.SubItems.Add(network.dot11DefaultCipherAlgorithm.ToString());
            // Authentication
            wifiItem.SubItems.Add(network.dot11DefaultAuthAlgorithm.ToString());

            int range = ((int)network.wlanSignalQuality - 1) / 25;

            wifiItem.ImageIndex = range;

            if (network.dot11DefaultCipherAlgorithm.ToString().Equals("None"))
            {
                wifiItem.BackColor = Color.LimeGreen;
            }
            //запись в файл и добавление в лист на вторую форму
            // WriteToFile(this.GetProfileName(network.dot11Ssid) +"#"+ this.GetMacAddress(entry.dot11Bssid) + "#" + string.Format("{0}dBm", entry.rssi.ToString()));
            WifiInfo wi = new WifiInfo();

            wi.SSID  = this.GetProfileName(network.dot11Ssid);
            wi.BSSID = this.GetMacAddress(entry.dot11Bssid);
            wi.Level = entry.rssi.ToString();
            CurrentWifiList.Add(wi);
            listViewAccessPoints.Items.Add(wifiItem);
        }
Пример #3
0
        /// <summary>
        /// 一键连接wifi网络
        /// </summary>
        /// <param name="network">加密网络</param>
        /// <param name="password">密码</param>
        public static void ConnetWifi(WlanClient.WlanInterface wlanIface, Wlan.WlanAvailableNetwork network, string password)
        {
            string profile = GetStringForSSID(network.dot11Ssid);

            if (password != null)
            {
                string hex            = StringToHex(profile);
                string authentication = GetAuthentication(network.dot11DefaultAuthAlgorithm);
                string authEncryption = GetEncryption(network.dot11DefaultCipherAlgorithm);
                string keytype        = GetKeyType(authEncryption);
                string profileXml     = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><connectionMode>auto</connectionMode><MSM><security><authEncryption><authentication>{2}</authentication><encryption>{3}</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>{4}</keyType><protected>false</protected><keyMaterial>{5}</keyMaterial></sharedKey></security></MSM></WLANProfile>", profile, hex, authentication, authEncryption, keytype, password);
                wlanIface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true);
                wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profile);
            }
            else
            {
                //有profile的加密连接,直接连
                if (network.securityEnabled)
                {
                    wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profile);
                }
                else
                {
                    string hex        = StringToHex(profile);
                    string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><connectionMode>auto</connectionMode><MSM><security><authEncryption><authentication>open</authentication><encryption>none</encryption><useOneX>false</useOneX></authEncryption></security></MSM></WLANProfile>", profile, hex);
                    wlanIface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true);
                    wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profile);
                }
            }
        }
Пример #4
0
        //连接
        private void txButton1_Click(object sender, EventArgs e)
        {
            if (InternetGetConnectedState(out dwFlag, 0))
            {
                ShowToast_InSetup("提示", "网络已连接,请勿重新连接", 2);
                return;
            }

            if (myListBox1.SelectedItems.Count == 0)
            {
                return;
            }
            if (myListBox1.SelectedIndex == -1)
            {
                return;
            }

            Wlan.WlanAvailableNetwork wn = NetWorkList[myListBox1.SelectedIndex];
            if (wn.securityEnabled && !WlanHelper.HasProfile(WlanIface, WlanHelper.GetStringForSSID(wn.dot11Ssid)))
            {
                Form_Password fp = new Form_Password();
                if (fp.ShowDialog() == DialogResult.OK)
                {
                    string pw = fp.Password;

                    WlanHelper.ConnetWifi(WlanIface, wn, pw);
                    fp.Dispose();
                }
            }
            else
            {
                WlanHelper.ConnetWifi(WlanIface, wn);
            }
        }
        static void SelectCurrentWifi(Wlan.WlanAvailableNetwork network, WlanClient.WlanInterface wlanIface)
        {
            string name = GetStringForSSID(network.dot11Ssid);
            string xml  = "";

            foreach (Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles())
            {
                if (profileInfo.profileName == name) // this is typically the network's SSID
                {
                    xml = wlanIface.GetProfileXml(name);
                }
                else
                {
                    if (network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.None)
                    {
                        SelectWifiWithNoKey(name, ref wlanIface);
                    }
                    else
                    {
                        Console.WriteLine("没有WiFiProfile信息,请先创建登录信息");
                    }

                    //Console.ReadKey();
                }
            }
        }
Пример #6
0
 public Network(Wlan.WlanAvailableNetwork network)
 {
     SSID            = System.Text.ASCIIEncoding.ASCII.GetString(network.dot11Ssid.SSID).Trim((char)0);
     ProfileName     = network.profileName;
     SignalQuality   = network.wlanSignalQuality;
     CipherAlgorithm = network.dot11DefaultCipherAlgorithm.ToString().Trim((char)0);
     SecurityEnabled = network.securityEnabled;
 }
Пример #7
0
        public void SetNetwork(Wlan.WlanAvailableNetwork nw, bool isConnected)
        {
            label1.Text      = Encoding.UTF8.GetString(nw.dot11Ssid.SSID);
            statusLabel.Text = isConnected ? "Connected" : nw.securityEnabled ? "Secured" : "Public";
            button1.Text     = isConnected ? "Disconnect" : "Connect";

            IsConnected = isConnected;
            network     = nw;
        }
Пример #8
0
        /// <summary>
        /// This method is called when the timer.Elapsed event is raised and checks if the network with the strongest signal has changed since the last check.
        /// </summary>
        protected override void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            timer.Stop();

            try
            {
                bool found = false;
                foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
                {
                    newMaximumQualityValue = 0;

                    foreach (Wlan.WlanAvailableNetwork network in wlanIface.GetAvailableNetworkList(0))
                    {
                        if (GetStringForSSID(network.dot11Ssid).Equals(GetStringForSSID(strongestNetwork.dot11Ssid)))
                        {
                            found = true;

                            signalQualityStrongestNetwork = network.wlanSignalQuality;
                        }
                        else
                        {
                            if (!GetStringForSSID(network.dot11Ssid).Equals(GetStringForSSID(strongestNetwork.dot11Ssid)) && newMaximumQualityValue < network.wlanSignalQuality)
                            {
                                newMaximumQualityValue = network.wlanSignalQuality;
                                newerStrongestNetwork  = network;
                            }
                        }
                    }

                    if (found == false)
                    {
                        signalQualityStrongestNetwork = 0; // The network is no longer available.
                    }
                }

                if (newMaximumQualityValue > signalQualityStrongestNetwork)
                {
                    signalQualityStrongestNetwork = newMaximumQualityValue;
                    strongestNetwork = newerStrongestNetwork;

                    Trigger();
                }
            }
            catch (Win32Exception ex)
            {
                ErrorLog.AddError(ErrorType.Failure, Strings.WiFi_CantGetNetworks);
                Logger.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                ErrorLog.AddError(ErrorType.Failure, Strings.WiFi_CantGetNetworks);
                Logger.Write(ex);
            }

            timer.Start();
        }
Пример #9
0
        public void SetAvailability(Wlan.WlanAvailableNetwork availability)
        {
            available = true;
            var a = availability;

            SSID       = SSID ?? a.dot11Ssid.ToStringBeauty();
            Strength   = a.wlanSignalQuality;
            Security   = a.dot11DefaultAuthAlgorithm.ToString();
            Encryption = a.dot11DefaultCipherAlgorithm.ToString();
            connected |= (a.flags & Wlan.WlanAvailableNetworkFlags.Connected) > 0;
        }
Пример #10
0
            /// <summary>
            /// Converts a pointer to a available networks list (header + entries) to an array of available network entries.
            /// </summary>
            /// <param name="availNetListPtr">A pointer to an available networks list's header.</param>
            /// <returns>An array of available network entries.</returns>
            private static Wlan.WlanAvailableNetwork[] ConvertAvailableNetworkListPtr(IntPtr availNetListPtr)
            {
                Wlan.WlanAvailableNetworkListHeader availNetListHeader = (Wlan.WlanAvailableNetworkListHeader)Marshal.PtrToStructure(availNetListPtr, typeof(Wlan.WlanAvailableNetworkListHeader));
                long availNetListIt = availNetListPtr.ToInt64() + Marshal.SizeOf(typeof(Wlan.WlanAvailableNetworkListHeader));

                Wlan.WlanAvailableNetwork[] availNets = new Wlan.WlanAvailableNetwork[availNetListHeader.numberOfItems];
                for (int i = 0; i < availNetListHeader.numberOfItems; ++i)
                {
                    availNets[i]    = (Wlan.WlanAvailableNetwork)Marshal.PtrToStructure(new IntPtr(availNetListIt), typeof(Wlan.WlanAvailableNetwork));
                    availNetListIt += Marshal.SizeOf(typeof(Wlan.WlanAvailableNetwork));
                }
                return(availNets);
            }
Пример #11
0
        private void AddToList(Wlan.WlanAvailableNetwork network, Wlan.WlanBssEntry entry)
        {
            foreach (ListViewItem lvi in listViewAccessPoints.Items)
            {
                if (lvi.SubItems[1].Text == GetMacAddress(entry.dot11Bssid))
                {
                    return;
                }
            }

            var wifiItem = new ListViewItem(GetProfileName(network.dot11Ssid));

            // MAC Address
            wifiItem.SubItems.Add(GetMacAddress(entry.dot11Bssid));

            // Signal Quality
            wifiItem.SubItems.Add(string.Format("{0}", network.wlanSignalQuality.ToString()));
            sbProgressBar.Value       = (int)network.wlanSignalQuality;
            sbProgressBar.ToolTipText = string.Format("{0}%", network.wlanSignalQuality.ToString());

            // Signal Strength
            wifiItem.SubItems.Add(string.Format("{0}", entry.rssi.ToString()));
            // // смена знака

            // Channel No
            wifiItem.SubItems.Add(GetChannel(entry).ToString());
            // Encryption
            wifiItem.SubItems.Add(network.dot11DefaultCipherAlgorithm.ToString());
            // Authentication
            wifiItem.SubItems.Add(network.dot11DefaultAuthAlgorithm.ToString());
            wifiItem.ImageIndex = ((int)network.wlanSignalQuality - 1) / 25;

            if (network.dot11DefaultCipherAlgorithm.ToString().Equals("None"))
            {
                wifiItem.BackColor = Color.LimeGreen;
            }

            listViewAccessPoints.Items.Add(wifiItem);

            if (currentMac.Equals(GetMacAddress(entry.dot11Bssid)))
            {
                labelSsid.Text         = GetProfileName(network.dot11Ssid);
                labelMac.Text          = GetMacAddress(entry.dot11Bssid);
                labelQuality.Text      = string.Format("{0}%", network.wlanSignalQuality.ToString());
                labelChannel.Text      = GetChannel(entry).ToString();
                cpbStrength.Value      = 100 - ((int)entry.rssi * -1);
                cpbStrength.LabelValue = entry.rssi.ToString();
            }
        }
Пример #12
0
        private Wlan.WlanAvailableNetwork devuelve_red(Wlan.Dot11Ssid X, Wlan.WlanAvailableNetwork[] lista)
        {
            Wlan.WlanAvailableNetwork ret = new Wlan.WlanAvailableNetwork();
            int long2 = lista.GetLength(0);

            for (int i = 0; i < long2; i++)
            {
                if (X.Equals(lista[i].dot11Ssid))
                {
                    ret = lista[i];
                    break;
                }
            }
            return(ret);
        }
Пример #13
0
        public static string MakeProfile(string profileName, Wlan.WlanAvailableNetwork network, string key)
        {
            switch (network.dot11DefaultAuthAlgorithm)
            {
            case Wlan.Dot11AuthAlgorithm.WPA_PSK:
                return(MakeWpaPskProfile(profileName, network, key));

            case Wlan.Dot11AuthAlgorithm.RSNA_PSK:
                return(MakeWpa2PskProfile(profileName, network, key));

            case Wlan.Dot11AuthAlgorithm.IEEE80211_Open:
                return(MakeOpenProfile(profileName, network));

            default:
                throw new Exception("unsupported auth algorithm: " + network.dot11DefaultAuthAlgorithm);
            }
        }
Пример #14
0
        private void btnBind_Click(object sender, EventArgs e)
        {
            btnBind.Text    = "Binding Drone...";
            btnBind.Enabled = false;

            lock (sync)
            {
                networkRouter = (Wlan.WlanAvailableNetwork)lstRouter.SelectedItem;
                networkDrone  = (Wlan.WlanAvailableNetwork)lstDrone.SelectedItem;
            }

            //ConnectToDrone();

            Thread t1 = new Thread(ConnectToDrone);

            t1.Start();
        }
Пример #15
0
        private void btnDroneProxy_Click(object sender, EventArgs e)
        {
            lock (sync)
            {
                try
                {
                    networkRouter = (Wlan.WlanAvailableNetwork)lstRouter.SelectedItem;
                    networkDrone  = (Wlan.WlanAvailableNetwork)lstDrone.SelectedItem;
                }
                catch (Exception ex)
                {
                    Status("No network selected.  Please scan for networks.");
                }
            }

            Thread t1 = new Thread(ConnectToRouter);

            t1.Start();
        }
Пример #16
0
        private IEnumerable <NetworkData> GetNetworkData()
        {
            List <NetworkData> list = new List <NetworkData>();
            IEnumerable <Wlan.WlanBssEntryN>        networkBssList       = MyWlanInterface.GetNetworkBssList();
            IEnumerable <Wlan.WlanAvailableNetwork> availableNetworkList =
                MyWlanInterface.GetAvailableNetworkList(Wlan.WlanGetAvailableNetworkFlags.IncludeAllManualHiddenProfiles);

            if ((networkBssList != null) && (availableNetworkList != null))
            {
                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);

                        Utilities.ConvertToMbs(entry.BaseEntry.wlanRateSet.Rates, item.Rates);
                        if (entry.NSettings != null)
                        {
                            item.NSettings = new IeParser.TypeNSettings(entry.NSettings);

                            //Add the extended 802.11N rates
                            item.Rates.AddRange(item.NSettings.Rates.Where(f => !item.Rates.Contains(f)));
                            item.Rates.Sort();
                        }

                        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;
                        item.Ssid        = ssid;
                        item.Channel     = Utilities.ConvertToChannel(entry.BaseEntry.chCenterFrequency);
                        item.NetworkType = Utilities.ConvertToString(entry.BaseEntry.dot11BssType);
                        item.Privacy     = Utilities.CreatePrivacyString(foundNetwork.dot11DefaultAuthAlgorithm,
                                                                         foundNetwork.dot11DefaultCipherAlgorithm);
                        item.SignalQuality = foundNetwork.wlanSignalQuality;
                        list.Add(item);
                    }
                }
            }
            return(list);
        }
Пример #17
0
        protected override void OnEnabling(EnablingEventArgs e)
        {
            seconds = int.Parse(Strings.General_TimerInterval) / 1000;

            if (!InitializeTimerCreateClient())
            {
                e.Cancel = true;

                return;
            }

            try
            {
                // Getting the network with the strongest signal.
                foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
                {
                    foreach (Wlan.WlanAvailableNetwork network in wlanIface.GetAvailableNetworkList(0))
                    {
                        if (signalQualityStrongestNetwork < network.wlanSignalQuality)
                        {
                            strongestNetwork = network;
                            signalQualityStrongestNetwork = network.wlanSignalQuality;
                        }
                    }
                }

                timer.Start();
            }
            catch (Win32Exception ex)
            {
                ErrorLog.AddError(ErrorType.Failure, Strings.WiFi_CantGetNetworks);
                Logger.Write(ex);

                e.Cancel = true;
            }
            catch (Exception ex)
            {
                ErrorLog.AddError(ErrorType.Failure, Strings.WiFi_CantGetNetworks);
                Logger.Write(ex);

                e.Cancel = true;
            }
        }
 private void wifiList_MouseDoubleClick(object sender, MouseEventArgs e)
 {
     try
     {
         NData nd = nData[wifiList.SelectedIndex];
         if (nd.isNetwork)
         {
             Wlan.WlanAvailableNetwork network   = nd.Network;
             WlanClient.WlanInterface  wlanIface = nd.wlanIface;
             //------------------------------------------------
         }
         Console.WriteLine("--------->");
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.ToString());
         Msg("ERROR", ex.ToString());
     }
 }
Пример #19
0
        private void button1_Click(object sender, EventArgs e)
        {
            Wlan.WlanAvailableNetwork wn = NetWorkList[listBox1.SelectedIndex];
            if (wn.securityEnabled && !WlanHelper.HasProfile(WlanIface, WlanHelper.GetStringForSSID(wn.dot11Ssid)))
            {
                Form_Password fp = new Form_Password();
                if (fp.ShowDialog() == DialogResult.OK)
                {
                    string pw = fp.Password;

                    WlanHelper.ConnetWifi(WlanIface, wn, pw);
                    fp.Dispose();
                }
            }
            else
            {
                WlanHelper.ConnetWifi(WlanIface, wn);
            }
        }
Пример #20
0
        private void linkNetworkWifi()
        {
            if (NetWorkList.Count == 0)
            {
                return;
            }

            Wlan.WlanAvailableNetwork wn = NetWorkList[0]; // 标记 只取第一个 要预判连接giwifi的相关条件在此数组之中

            if (wn.securityEnabled && !WlanHelper.HasProfile(WlanIface, WlanHelper.GetStringForSSID(wn.dot11Ssid)))
            {
                MessageBox.Show("Giwifi存在不支持验证的网络条件,连接将会终止", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                WlanHelper.ConnetWifi(WlanIface, wn);
            } // ohh

            //登录条件开始头
        }
Пример #21
0
        public DataSets.WlanInfo getWlanInfo()
        {
            infoWlan.WLANS.Clear();
            lista_bss = INTERFAZ.GetNetworkBssList();
            INTERFAZ.Scan();
            lista_redes = INTERFAZ.GetAvailableNetworkList(0);
            Wlan.WlanAvailableNetwork WLAN = new Wlan.WlanAvailableNetwork();
            foreach (Wlan.WlanBssEntry redBSS in lista_bss)
            {
                DataSets.WlanInfo.WLANSRow row = infoWlan.WLANS.NewWLANSRow();

                WLAN         = devuelve_red(redBSS.dot11Ssid, lista_redes);
                row.ESSID    = Encoding.ASCII.GetString(redBSS.dot11Ssid.SSID, 0, (int)redBSS.dot11Ssid.SSIDLength);
                row.BSSID    = Utils.ByteArrayToString(redBSS.dot11Bssid);
                row.Auth     = WLAN.dot11DefaultAuthAlgorithm.ToString();
                row.Cipher   = WLAN.dot11DefaultCipherAlgorithm.ToString();
                row.PowerDbm = redBSS.rssi;
                infoWlan.WLANS.AddWLANSRow(row);
            }

            return(infoWlan);
        }
        void ConnectNetwork(string ssid, WlanClient.WlanInterface nic, Wlan.WlanAvailableNetwork network)
        {
            var log = ServiceRegistration.Get <ILogger>();

            if (!string.IsNullOrEmpty(network.profileName))
            {
                try
                {
                    log.Info("WifiConfiguration: Using existing Profile to connect to WLAN '{0}'", ssid);
                    bool success = nic.ConnectSynchronously(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, network.profileName, CONNECTION_TIMEOUT_SECONDS);
                    if (success)
                    {
                        FindNetworks();
                    }
                    else
                    {
                        log.Warn("Connection to WLAN '{0}' failed.", ssid);
                    }
                }
                catch (Exception ex)
                {
                    log.Warn("Connection to WLAN '{0}' failed: {1}", ex, ssid, ex.Message);
                }
            }
            else
            {
                if (network.securityEnabled)
                {
                    ServiceRegistration.Get <IScreenManager>().ShowDialog("dialogWifiPassword");
                }
                else
                {
                    log.Info("WifiConfiguration: Connecting to unsecured WLAN '{0}'", ssid);
                    nic.Connect(Wlan.WlanConnectionMode.Auto, Wlan.Dot11BssType.Any, network.dot11Ssid, 0);
                }
            }
        }
Пример #23
0
        /// <summary>
        /// 获取wifi信息提示
        /// </summary>
        /// <param name="network"></param>
        /// <returns></returns>
        public static string GetWifiToolTip(Wlan.WlanAvailableNetwork network)
        {
            string result = string.Format("SSID:{0}\n信号强度:{1}\n安全类型:{2}", GetStringForSSID(network.dot11Ssid), network.wlanSignalQuality, GetAuthentication(network.dot11DefaultAuthAlgorithm));

            return(result);
        }
Пример #24
0
        private void Connect(WlanClient.WlanInterface wlanIface, Wlan.WlanAvailableNetwork ssid, string key)
        {
            bool   result      = false;
            string description = "初始化错误";

            try
            {
                String auth    = string.Empty;
                String cipher  = string.Empty;
                bool   isNoKey = false;
                String keytype = string.Empty;
                switch (ssid.dot11DefaultAuthAlgorithm)
                {
                case Wlan.Dot11AuthAlgorithm.IEEE80211_Open:
                    auth = "open"; break;

                //case Wlan.Dot11AuthAlgorithm.IEEE80211_SharedKey:
                // 'not implemented yet;
                //break;
                case Wlan.Dot11AuthAlgorithm.RSNA:
                    auth = "WPA2PSK"; break;

                case Wlan.Dot11AuthAlgorithm.RSNA_PSK:
                    auth = "WPA2PSK"; break;

                case Wlan.Dot11AuthAlgorithm.WPA:
                    auth = "WPAPSK"; break;

                case Wlan.Dot11AuthAlgorithm.WPA_None:
                    auth = "WPAPSK"; break;

                case Wlan.Dot11AuthAlgorithm.WPA_PSK:
                    auth = "WPAPSK"; break;
                }

                switch (ssid.dot11DefaultCipherAlgorithm)
                {
                case Wlan.Dot11CipherAlgorithm.CCMP:
                    cipher  = "AES";
                    keytype = "passPhrase";
                    break;

                case Wlan.Dot11CipherAlgorithm.TKIP:
                    cipher  = "TKIP";
                    keytype = "passPhrase";
                    break;

                case Wlan.Dot11CipherAlgorithm.None:
                    cipher  = "none"; keytype = "";
                    isNoKey = true;
                    break;

                case Wlan.Dot11CipherAlgorithm.WEP:
                    cipher  = "WEP";
                    keytype = "networkKey";
                    break;

                case Wlan.Dot11CipherAlgorithm.WEP40:
                    cipher  = "WEP";
                    keytype = "networkKey";
                    break;

                case Wlan.Dot11CipherAlgorithm.WEP104:
                    cipher  = "WEP";
                    keytype = "networkKey";
                    break;
                }

                if (isNoKey && !string.IsNullOrEmpty(key))
                {
                    description = "无法连接网络 SSID:" + ssid.profileName + "\r\n"
                                  + "Dot11AuthAlgorithm:" + ssid.dot11DefaultAuthAlgorithm + "\r\n"
                                  + "Dot11CipherAlgorithm:" + ssid.dot11DefaultAuthAlgorithm.ToString();
                    return;
                }
                else if (!isNoKey && string.IsNullOrEmpty(key))
                {
                    description = "无法连接网络 SSID:" + ssid.profileName + "\r\n"
                                  + "Dot11AuthAlgorithm:" + ssid.dot11DefaultAuthAlgorithm + "\r\n"
                                  + "Dot11CipherAlgorithm:" + ssid.dot11DefaultAuthAlgorithm.ToString();
                    return;
                }
                else
                {
                    string profileName = ssid.profileName; // this is also the SSID
                    string mac         = StringToHex(profileName);
                    string profileXml  = string.Empty;
                    if (!string.IsNullOrEmpty(key))
                    {
                        profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><connectionMode>auto</connectionMode><autoSwitch>false</autoSwitch><MSM><security><authEncryption><authentication>{2}</authentication><encryption>{3}</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>{4}</keyType><protected>false</protected><keyMaterial>{5}</keyMaterial></sharedKey><keyIndex>0</keyIndex></security></MSM></WLANProfile>",
                                                   profileName, mac, auth, cipher, keytype, key);
                    }
                    else
                    {
                        profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><connectionMode>auto</connectionMode><autoSwitch>false</autoSwitch><MSM><security><authEncryption><authentication>{2}</authentication><encryption>{3}</encryption><useOneX>false</useOneX></authEncryption></security></MSM></WLANProfile>",
                                                   profileName, mac, auth, cipher, keytype);
                    }

                    wlanIface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true);
                    //ssid.wlanInterface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, ssid.profileNames);
                    wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName);
                }
            }
            catch (Exception e)
            {
                description = "无法连接网络 SSID:" + ssid.profileName + "\r\n"
                              + "Dot11AuthAlgorithm:" + ssid.dot11DefaultAuthAlgorithm + "\r\n"
                              + "Dot11CipherAlgorithm:" + ssid.dot11DefaultAuthAlgorithm.ToString() + "\r\n"
                              + e.Message;
                return;
            }
        }
Пример #25
0
        public void OpenManager(Wlan.WlanAvailableNetwork network)
        {
            UpdateProfiles();
            if (network.profileName.Length == 0)
            {
                is_new                    = true;
                ControlBox                = false;
                btn_delete.Text           = "Cancelar";
                cb_select_profile.Enabled = false;

                string ssid = Encoding.Default.GetString(network.dot11Ssid.SSID);
                tb_prof_name.Text = ssid;
                tb_ssid.Text      = ssid;
                tb_ssid.Enabled   = false;

                switch (network.dot11BssType)
                {
                case Wlan.Dot11BssType.Independent:
                    cb_type.SelectedIndex = 0; break;

                case Wlan.Dot11BssType.Infrastructure:
                    cb_type.SelectedIndex = 1; break;
                }
                cb_type.Enabled = false;

                switch (network.dot11DefaultAuthAlgorithm)
                {
                case Wlan.Dot11AuthAlgorithm.IEEE80211_Open:
                    cb_auth.SelectedIndex = 0; break;

                case Wlan.Dot11AuthAlgorithm.IEEE80211_SharedKey:
                    cb_auth.SelectedIndex = 1; break;

                case Wlan.Dot11AuthAlgorithm.WPA:
                    cb_auth.SelectedIndex = 2; break;

                case Wlan.Dot11AuthAlgorithm.WPA_PSK:
                    cb_auth.SelectedIndex = 3; break;

                case Wlan.Dot11AuthAlgorithm.RSNA:
                    cb_auth.SelectedIndex = 4; break;

                case Wlan.Dot11AuthAlgorithm.RSNA_PSK:
                    cb_auth.SelectedIndex = 5; break;
                }
                cb_auth.Enabled = false;

                if (network.securityEnabled)
                {
                    cb_encryption.SelectedIndex = 3;
                }
                cb_encryption.Enabled = false;

                if (cb_auth.SelectedIndex == 0)
                {
                    cb_key_type.Enabled  = false;
                    tb_key.Enabled       = false;
                    cb_protected.Enabled = false;
                }
                tb_key.Text = "";
            }
            else
            {
                for (int c = 0; c < profiles.Length; c++)
                {
                    if (profiles[c] == network.profileName)
                    {
                        cb_select_profile.SelectedIndex = c;
                        UpdateData();
                        break;
                    }
                }
            }

            ShowDialog();
        }
Пример #26
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);
        }
Пример #27
0
 private static bool FindNetwork(string ssid, IEnumerable <Wlan.WlanAvailableNetwork> networks, ref Wlan.WlanAvailableNetwork foundNetwork)
 {
     if (networks != null)
     {
         foreach (Wlan.WlanAvailableNetwork network in networks)
         {
             string str = Encoding.ASCII.GetString(network.dot11Ssid.SSID, 0, (int)network.dot11Ssid.SSIDLength);
             if (!string.IsNullOrEmpty(str) && str.Equals(ssid))
             {
                 foundNetwork = network;
                 return(true);
             }
         }
     }
     return(false);
 }
Пример #28
0
 private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
     Wlan.WlanAvailableNetwork wn = NetWorkList[listBox1.SelectedIndex];
     toolTip1.SetToolTip(listBox1, WlanHelper.GetWifiToolTip(wn));
 }
 /// <summary>
 /// Converts a pointer to a available networks list (header + entries) to an array of available network entries.
 /// </summary>
 /// <param name="bssListPtr">A pointer to an available networks list's header.</param>
 /// <returns>An array of available network entries.</returns>
 private Wlan.WlanAvailableNetwork[] ConvertAvailableNetworkListPtr(IntPtr availNetListPtr)
 {
     Wlan.WlanAvailableNetworkListHeader availNetListHeader = (Wlan.WlanAvailableNetworkListHeader)Marshal.PtrToStructure(availNetListPtr, typeof(Wlan.WlanAvailableNetworkListHeader));
     long availNetListIt = availNetListPtr.ToInt64() + Marshal.SizeOf(typeof(Wlan.WlanAvailableNetworkListHeader));
     Wlan.WlanAvailableNetwork[] availNets = new Wlan.WlanAvailableNetwork[availNetListHeader.numberOfItems];
     for (int i = 0; i < availNetListHeader.numberOfItems; ++i)
     {
         availNets[i] = (Wlan.WlanAvailableNetwork)Marshal.PtrToStructure(new IntPtr(availNetListIt), typeof(Wlan.WlanAvailableNetwork));
         availNetListIt += Marshal.SizeOf(typeof(Wlan.WlanAvailableNetwork));
     }
     return availNets;
 }
        void ConnectNewSecureNetwork(string ssid, string key, WlanClient.WlanInterface nic, Wlan.WlanAvailableNetwork network)
        {
            var log = ServiceRegistration.Get <ILogger>();

            log.Info("WifiConfiguration: Building new Profile to connect to WLAN '{0}'", ssid);
            string profileXml = Helper.GetProfileXml(ssid, key, network.dot11DefaultAuthAlgorithm, network.dot11DefaultCipherAlgorithm);

            if (profileXml != null)
            {
                string error = null;
                try
                {
                    Wlan.WlanReasonCode reasonCode = nic.SetProfile(Wlan.WlanProfileFlags.User, profileXml, true);
                    if (reasonCode != Wlan.WlanReasonCode.Success)
                    {
                        error = reasonCode.ToString();
                    }
                }
                catch (Exception ex)
                {
                    error = ex.Message;
                }
                if (error == null)
                {
                    nic.ConnectSynchronously(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, ssid, CONNECTION_TIMEOUT_SECONDS);
                }
                else
                {
                    log.Warn("WifiConfiguration: Setting Profile for WLAN '{0}' failed: '{1}'", ssid, error);
                    ServiceRegistration.Get <IDialogManager>().ShowDialog("[Dialogs.ErrorHeaderText]", error, DialogType.OkDialog, false, DialogButtonType.Ok);
                }
            }
            else
            {
                // don't know how to build profile
                log.Warn("WifiConfiguration: No known Mapping to create Profile '{0}' for AuthAlg: '{1}' and CipherAlg: '{2}'", ssid, network.dot11DefaultAuthAlgorithm, network.dot11DefaultCipherAlgorithm);
                ServiceRegistration.Get <IDialogManager>().ShowDialog("[Dialogs.ErrorHeaderText]", "Unable to build profile. Connect in Windows.", DialogType.OkDialog, false, DialogButtonType.Ok);
            }
        }
Пример #31
0
 /// <summary>
 /// 一键连接wifi网络
 /// </summary>
 /// <param name="network">公开网络</param>
 public static void ConnetWifi(WlanClient.WlanInterface wlanIface, Wlan.WlanAvailableNetwork network)
 {
     ConnetWifi(wlanIface, network, null);
 }