Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Поиск сетей и подключение к Wi-Fi на C#

Anna | 18.06.2014 | нет комментариев

Однажды искал вероятность подключиться из своей программы к WI-Fi сети, для кого-то может это и не задача, а для меня это оказалось огромным камнем на дороге.

Поделим наш план на две части, условно, легко для того что бы отменнее разобраться.
Для начала сотворим план в Visual Studio на языке C# — WindowsFormsApplication и назовём его так как нам огромнее каждого нравится, я назвал «Wifi».

Часть первая: Поиск доступных сетей

Выходит, закидываем на форму два котрола:

  • ListView — назовём listNet, и добавим в него 4 колонки, легко для наглядности.
  • Button — назовём btnRefresh

Это всё что нам потребоваться, у меня окно выглядит так:
image
Позже чего добавим в план два новых файла, это библиотека «Native Wifi», — где то в интернете обнаружил.
Исходники дозволено взять тут

Объявим нужные нам namespace’ы

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NativeWifi;

Сейчас создаём процедуру обработки клика нашей кнопки и добавляем туда данный код:

WlanClient client = new WlanClient();

	foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
	{

		Wlan.WlanAvailableNetwork[] wlanBssEntries = wlanIface.GetAvailableNetworkList( 0 );

		//очищаем листвью, что бы не дублировать обнаруженные сети при повторном нажатии

		istNet.Items.Clear();
		foreach (Wlan.WlanAvailableNetwork network in wlanBssEntries)
		{
			// создаём экземпляр элемента листвью
			ListViewItem listItemWiFi = new ListViewItem(); 

			// назначаем ему имя нашей первой обнаруженной сети, в конце убираем нулевые символы - Trim((char)0)
			listItemWiFi.Text = System.Text.ASCIIEncoding.ASCII.GetString(network.dot11Ssid.SSID).Trim((char)0);

			// узнаём дополнительную информацию о сети и так же добавляем её в листвью, но теснее в наш только что сделанный итэм.
			listItemWiFi.SubItems.Add(network.wlanSignalQuality.ToString()   "%"); // качество связи в процентах
			listItemWiFi.SubItems.Add(network.dot11DefaultAuthAlgorithm.ToString().Trim((char)0)); // тип безопасности
			listItemWiFi.SubItems.Add(network.dot11DefaultCipherAlgorithm.ToString().Trim((char)0)); // тип шифрования

			//ну и добавляем элемент непринужденно в листвью
			listNet.Items.Add(listItemWiFi);

		}
	}

Сейчас дозволено испробовать запустить приложение и посмотреть что обнаружены все надобные сети, должно получится что то как бы этого, так оно выглядит у меня, тёмная полоса справа — это поле для подключения к сети в Windows 8:
image

Часть вторая: Подключение

И так, с самым простым мы завершили. Сейчас нужно подключится к нужной сети, я разгляжу пример подключения к моей сети, она первая в списке в программе.
Сотворим ещё одну кнопку и добавим туда вот данный код:

try
{
	WlanClient client = new WlanClient();

	foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
	{
		Wlan.WlanAvailableNetwork[] wlanBssEntries = wlanIface.GetAvailableNetworkList(0);
		foreach (Wlan.WlanAvailableNetwork network in wlanBssEntries)
		{
			String profileName = System.Text.ASCIIEncoding.ASCII.GetString(network.dot11Ssid.SSID).Trim((char)0);

			// подключаемся именно к выбранной сети
			if (listNet.SelectedItems[0].Text.Equals(profileName))
			{
				String strTemplate="";
				String authentication="";

				switch ((int)network.dot11DefaultAuthAlgorithm)
				{
					case 1: // Open

						break;
					case 3: // WEP

						break;
					case 4: // WPA_PSK

						strTemplate = Properties.Resources.WPAPSK;

						authentication = "WPAPSK";

						String encryption = network.dot11DefaultCipherAlgorithm.ToString().Trim((char)0);

						// пароль к сети
						String key = "0000000000"; 

						String profileXml = String.Format(strTemplate, profileName, authentication, encryption, key);

						wlanIface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true);
						wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName);

						break;

					default:
						break;
				}
			}
		}
	}
}
catch (Exception ex)
{
	MessageBox.Show(ex.Message);
}

Поясню лишь самое основное, вот эту строчку:

String profileXml = String.Format(strTemplate, profileName, authentication, encryption, key);

Тут формируем профиль для нашего подключения, ша

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB