///// <summary>
        ///// Enabled AutoConfig와 Disabled AutoConfig를 검색한 뒤 해당되는 네트워크 인터페이스 이름을 반환합니다.
        ///// </summary>
        //private void GetAutoConfigInterfaces(out List<string> enabled, out List<string> disabled)
        //{
        //    string cmdResult = Cmd.Run("netsh wlan show autoconfig");
        //    string[] lineStr = cmdResult.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

        //    enabled = new List<string>();
        //    disabled = new List<string>();

        //    for (int i = 2; i < lineStr.Length; ++i)
        //    {
        //        string[] blockStr = lineStr[i].Split(new char[] { '\"' },StringSplitOptions.RemoveEmptyEntries);
        //        if (blockStr.Length != 2)
        //            continue;

        //        string description = blockStr[0];
        //        string name = blockStr[1];

        //        if (description.Contains("enabled") == true)
        //        {
        //            // 인터페이스 이름을 저장.
        //            enabled.Add(name);
        //        }
        //        else if(description.Contains("disabled") == true)
        //        {
        //            // 인터페이스 이름을 저장.
        //            disabled.Add(name);
        //        }
        //    }
        //}

        ///// <summary>
        ///// 무선 네트워크의 인터페이스를 검사합니다.
        ///// </summary>
        //private List<Dictionary<string,string>> GetNetworkInfo(List<string> enabledAutoConfigList, List<string> disabledAutoConfigList)
        //{
        //    string cmdResult = Cmd.Run("netsh wlan show interface");

        //    // 줄바꿈을 기준으로 스플릿.
        //    string[] splitStr = cmdResult.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
        //    List<Dictionary<string, string>> result = new List<Dictionary<string, string>>();


        //    for (int i = 0; i < splitStr.Length; ++i)
        //    {

        //        string[] str = splitStr[i].Split(new string[] { " : " }, StringSplitOptions.None);
        //        if (str.Length != 2)
        //            continue;

        //        // 전, 후 공백 삭제.
        //        string key = str[0].Trim();
        //        string value = str[1].Trim();

        //        // Name key를 발견했다면 새로운 Dicationary 추가.
        //        if (key == "Name")
        //        {
        //            result.Add(new Dictionary<string, string>());
        //            result.Last().Add(key, value);

        //            // Autoconfig 상태 추가.
        //            if (enabledAutoConfigList.Contains(value))
        //                result.Last().Add("Autoconfig", "Enabled");
        //            else if (disabledAutoConfigList.Contains(value))
        //                result.Last().Add("Autoconfig", "Disabled");
        //            else
        //                result.Last().Add("Autoconfig", "Unknown!!");
        //        }
        //        else
        //            result.Last().Add(key, value);
        //    }
        //    return result;
        //}

        #endregion

        /// <summary>
        /// Autoconfig를 스캔합니다.
        /// </summary>
        private void AutoconfigInterfaceScan()
        {
            enabledAutoConfigList.Clear();
            disabledAutoConfigList.Clear();

            string cmdResult = Cmd.Run("netsh wlan show autoconfig");

            string[] lineStr = cmdResult.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 2; i < lineStr.Length; ++i)
            {
                string[] blockStr = lineStr[i].Split(new char[] { '\"' }, StringSplitOptions.RemoveEmptyEntries);
                if (blockStr.Length != 2)
                {
                    continue;
                }

                string description = blockStr[0];
                string name        = blockStr[1];

                if (description.Contains("enabled") == true)
                {
                    // 인터페이스 이름을 저장.
                    enabledAutoConfigList.Add(name);
                }
                else if (description.Contains("disabled") == true)
                {
                    // 인터페이스 이름을 저장.
                    disabledAutoConfigList.Add(name);
                }
            }
        }
        private void SetAutoconfig(string wlanName, bool autoconfig)
        {
            string cmdResult;

            if (autoconfig == true)
            {
                cmdResult = Cmd.Run("netsh wlan set autoconfig enabled=yes interface=\"" + wlanName + "\"");
            }
            else
            {
                cmdResult = Cmd.Run("netsh wlan set autoconfig enabled=no interface=\"" + wlanName + "\"");
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// AutoConfig를 설정합니다.
        /// </summary>
        private void SetAutoconfig(string wlanName, bool autoconfig)
        {
            if (autoconfig == true)
            {
                Cmd.Run("netsh wlan set autoconfig enabled=yes interface=\"" + wlanName + "\"");
            }
            else
            {
                Cmd.Run("netsh wlan set autoconfig enabled=no interface=\"" + wlanName + "\"");
            }

            networkControl.Scan();
            WlanInfoUpdate();
        }
        /// <summary>
        /// 무선네트워크의 정보(networkInfos)를 스캔합니다.
        /// </summary>
        private void NetworkInfoScan()
        {
            string cmdResult = Cmd.Run("netsh wlan show interface");

            // 줄바꿈을 기준으로 스플릿.
            string[] splitStr = cmdResult.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

            networkInfos.Clear();

            for (int i = 0; i < splitStr.Length; ++i)
            {
                string[] str = splitStr[i].Split(new string[] { " : " }, StringSplitOptions.None);
                if (str.Length != 2)
                {
                    continue;
                }

                // 전, 후 공백 삭제.
                string key   = str[0].Trim();
                string value = str[1].Trim();

                // Name key를 발견했다면 새로운 Dicationary 추가.
                if (key == "Name")
                {
                    networkInfos.Add(new Dictionary <string, string>());
                    networkInfos.Last().Add(key, value);

                    // Autoconfig 상태 추가.
                    if (enabledAutoConfigList.Contains(value))
                    {
                        networkInfos.Last().Add("Autoconfig", "Enabled");
                    }
                    else if (disabledAutoConfigList.Contains(value))
                    {
                        networkInfos.Last().Add("Autoconfig", "Disabled");
                    }
                    else
                    {
                        networkInfos.Last().Add("Autoconfig", "Unknown!!");
                    }
                }
                else
                {
                    networkInfos.Last().Add(key, value);
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Wifi 정보를 스캔합니다.
        /// 실제 스캔하는게 아닌 캐시된 정보를 가져옵니다. 만약 실제 스캔중이라면 Sleep 후, 스캔이 완료될 시 정보를 가져옵니다. 따라서 Thread를 권장합니다.
        /// </summary>
        public void Scan()
        {
            lock (lockObj)
            {
                wifiInfos.Clear();

                string cmdResult = Cmd.Run("netsh wlan show networks mode=bssid");

                int loofCount = 0;
                // 만약 스캔중이라면
                while (cmdResult.Contains("BSSID") == false)
                {
                    // 10초를 초과했다면
                    if (loofCount > 10)
                    {
                        MessageBox.Show("Wifi Scan TimeOut. \r\n\r\n", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    Thread.Sleep(1000);
                    cmdResult = Cmd.Run("netsh wlan show networks mode=bssid");
                    ++loofCount;
                }

                string[] lineStr = cmdResult.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

                for (int i = 0; i < lineStr.Length; ++i)
                {
                    string[] splitStr = lineStr[i].Split(new string[] { " : " }, StringSplitOptions.None);

                    if (splitStr.Length != 2)
                    {
                        continue;
                    }

                    // 전후 공백 삭제.
                    string key   = splitStr[0].Trim();
                    string value = splitStr[1].Trim();

                    // 만약 키가 interface name이면 새로운 딕셔너리 생성.
                    if (key == "Interface name")
                    {
                        wifiInfos.Add(value, new List <Dictionary <string, string> >());
                        continue;
                    }

                    // 만약 키에 SSID가 존재하면 interface 정보안에 새로운 리스트를 생성.
                    if (key.Substring(0, 4) == "SSID")
                    {
                        wifiInfos.Last().Value.Add(new Dictionary <string, string>());
                        key = "SSID";
                    }

                    // 만약 BSSID가 두 개 이상이라면.
                    if (key.Length > 6 && key.Substring(0, 5) == "BSSID" && key.Substring(6, 1) != "1")
                    {
                        Dictionary <string, string> LastDict = wifiInfos.Last().Value.Last();
                        Dictionary <string, string> NewDict  = new Dictionary <string, string>();

                        NewDict.Add("SSID", LastDict["SSID"]);
                        NewDict.Add("Authentication", LastDict["Authentication"]);
                        NewDict.Add("Encryption", LastDict["Encryption"]);

                        wifiInfos.Last().Value.Add(NewDict);

                        continue;
                    }

                    // 키와 값을 넣는다.
                    wifiInfos.Last().Value.Last().Add(key, value);
                }
            }
        }