一、Managed Wifi API简介
1.这是一个.Net类库允许控制无线网络适配器(802.11)安装在你的Windows机器编程。
2.这个类库使用本地WiFi的API,不支持旧版本的Windows。wlanapi.dll更多参考:https://my.oschina.net/tianma3798/blog/846727
3.CodeFlex源代码地址:http://managedwifi.codeplex.com/
4.这个类库的wlanapi不是特别全....
5.更多wifi相关参考Msdn:https://technet.microsoft.com/zh-cn/network/bb545365
6.Native Wifi API Sample (Windows),参考:https://msdn.microsoft.com/en-us/library/aa816369(v=vs.85).aspx
二、更多相关资料
1.C#与C++数据类型对应:http://www.cnblogs.com/zjoch/p/5999335.html
2.更多C# 的wlanapi接口对应:http://www.pinvoke.net/default.aspx/wlanapi.wlanconnect
3.Wireless Profile Samples:https://msdn.microsoft.com/en-us/library/aa369853(v=vs.85).aspx
4.WLAN_profile Schema Elements ,Xml文件介绍:https://msdn.microsoft.com/en-us/library/ms706965(v=vs.85).aspx
三、简单使用实例
1.引用 ManagedWifi.dll,using NativeWifi;
2.C#代码
class MyWifi
{
public List ssids = new List();
public MyWifi()
{
ssids.Clear();
}
static string GetStringForSSID(Wlan.Dot11Ssid ssid)
{
return Encoding.UTF8.GetString(ssid.SSID, 0, (int)ssid.SSIDLength);
}
///
/// 枚举所有无线设备接收到的SSID
///
public void ScanSSID()
{
WlanClient client = new WlanClient();
foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
{
// Lists all networks with WEP security
Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0);
foreach (Wlan.WlanAvailableNetwork network in networks)
{
WIFISSID targetSSID = new WIFISSID();
targetSSID.wlanInterface = wlanIface;
targetSSID.wlanSignalQuality = (int)network.wlanSignalQuality;
targetSSID.SSID = GetStringForSSID(network.dot11Ssid);
//targetSSID.SSID = Encoding.Default.GetString(network.dot11Ssid.SSID, 0, (int)network.dot11Ssid.SSIDLength);
targetSSID.dot11DefaultAuthAlgorithm = network.dot11DefaultAuthAlgorithm.ToString();
targetSSID.dot11DefaultCipherAlgorithm = network.dot11DefaultCipherAlgorithm.ToString();
ssids.Add(targetSSID);
//if ( network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.WEP )
//{
// Console.WriteLine( "Found WEP network with SSID {0}.", GetStringForSSID(network.dot11Ssid));
//}
//Console.WriteLine("Found network with SSID {0}.", GetStringForSSID(network.dot11Ssid));
//Console.WriteLine("dot11BssType:{0}.", network.dot11BssType.ToString());
//Console.WriteLine("dot11DefaultAuthAlgorithm:{0}.", network.dot11DefaultAuthAlgorithm.ToString());
//Console.WriteLine("dot11DefaultCipherAlgorithm:{0}.", network.dot11DefaultCipherAlgorithm.ToString());
//Console.WriteLine("dot11Ssid:{0}.", network.dot11Ssid.ToString());
//Console.WriteLine("flags:{0}.", network.flags.ToString());
//Console.WriteLine("morePhyTypes:{0}.", network.morePhyTypes.ToString());
//Console.WriteLine("networkConnectable:{0}.", network.networkConnectable.ToString());
//Console.WriteLine("numberOfBssids:{0}.", network.numberOfBssids.ToString());
//Console.WriteLine("profileName:{0}.", network.profileName.ToString());
//Console.WriteLine("wlanNotConnectableReason:{0}.", network.wlanNotConnectableReason.ToString());
//Console.WriteLine("wlanSignalQuality:{0}.", network.wlanSignalQuality.ToString());
//Console.WriteLine("-----------------------------------");
// Console.WriteLine(network.ToString());
}
}
} // EnumSSID
///
/// 连接到未加密的SSID
///
///
public void ConnectToSSID(WIFISSID ssid)
{
// Connects to a known network with WEP security
string profileName = ssid.SSID; // this is also the SSID
string mac = StringToHex(profileName); //
//string key = "";
//string profileXml = string.Format("{0} {1} New{0} ESS open none false networkKey false {2} 0 ", profileName, mac, key);
//string profileXml2 = "Hacker SSID 54502D4C494E4B5F506F636B657441505F433844323632 TP-LINK_PocketAP_C8D262 ESS manual open none false ";
//wlanIface.SetProfile( Wlan.WlanProfileFlags.AllUser, profileXml2, true );
//wlanIface.Connect( Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName );
string myProfileXML = string.Format("{0} {1} {0} ESS manual open none false ", profileName, mac);
ssid.wlanInterface.SetProfile(Wlan.WlanProfileFlags.AllUser, myProfileXML, true);
ssid.wlanInterface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName);
//Console.ReadKey();
}
///
/// 字符串转Hex
///
///
///
public static string StringToHex(string str)
{
StringBuilder sb = new StringBuilder();
byte[] byStr = System.Text.Encoding.Default.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str)
for (int i = 0; i < byStr.Length; i++)
{
sb.Append(Convert.ToString(byStr[i], 16));
}
return (sb.ToString().ToUpper());
}
}
class WIFISSID
{
public string SSID = "NONE";
public string dot11DefaultAuthAlgorithm = "";
public string dot11DefaultCipherAlgorithm = "";
public bool networkConnectable = true;
public string wlanNotConnectableReason = "";
public int wlanSignalQuality = 0;
public WlanClient.WlanInterface wlanInterface = null;
}
}
nicaimimashisha
6E696361696D696D61736869736861
nicaimimashisha
ESS
auto
WPA2PSK
AES
false
passPhrase
true
01000000D08C9DDF0115D1118C7A00C04FC297EB010000004F479E51D4435D409C4B5FC05DF1BD2D000000000200000000001066000000010000200000005C53C70A83EBEA47512B9F87B34EC7C405E9B4ACDBFFFEBEA8B5DA6D6958E6A8000000000E8000000002000020000000F95172637168CC535A909A1CC8021C003077AD958B38C2C01F5B1CF6AB3F87B4100000005D3361250B2140E1B14D0F66D36F2CA640000000C49084078E63F00188D3CF0B80EE9127EEDFAEABAB01803D5E0480A89811E3B24FEF3EA45FF713BB9C244EABC1C2C119CAC4FE192ACF60C976027112262A4E3F
false
特别说明:keyMaterial必须是根据指定加密方法加密之后的数据
4.事件监听:
wlanIface.WlanConnectionNotification += WlanIface_WlanConnectionNotification;
private static void WlanIface_WlanConnectionNotification(Wlan.WlanNotificationData notifyData,
Wlan.WlanConnectionNotificationData connNotifyData)
{
Console.WriteLine(".....................");
Console.WriteLine(notifyData.NotificationCode);
Console.WriteLine(notifyData.notificationSource);
}
WlanClient client = new WlanClient();
foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
{
// Lists all networks with WEP security
Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0);
foreach (Wlan.WlanAvailableNetwork network in networks)
{
//Console.WriteLine(network.profileName);
//Console.WriteLine(GetStringForSSID(network.dot11Ssid));
//Console.WriteLine(network.dot11DefaultCipherAlgorithm);
//Console.WriteLine("*********************************");
//if (network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.WEP)
//{
// Console.WriteLine("Found WEP network with SSID {0}.", GetStringForSSID(network.dot11Ssid));
//}
}
// Retrieves XML configurations of existing profiles.
// This can assist you in constructing your own XML configuration
// (that is, it will give you an example to follow).
foreach (Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles())
{
string name = profileInfo.profileName; // this is typically the network's SSID
string xml = wlanIface.GetProfileXml(profileInfo.profileName);
Console.WriteLine("ssid:" + name);
Console.WriteLine(xml);
Console.WriteLine("******************************************************");
}
}
获取结果:
******************************************************
ssid:123
123
313233
123
ESS
auto
WPA2PSK
AES
false
passPhrase
true
01000000D08C9DDF0115D1118C7A00C04FC297EB010000004F479E51D4435D409C4B5FC05DF1BD2D00000000020000000000106600000001000020000000EF6E93D46740330472CADC868CA81CF587AFD3D6D8C3B734066CFC27A25025F7000000000E80000000020000200000002A290E5F01D301902EB7ECD21E37336CCB32825DFB2FC8A1A71D2F3B4E173AF81000000071CC3F3EBF21D55DF27136D77246EB9C400000008A8607C942F8DF619AE1FDD56E556DDC3D86F567FCF043EFD9D7CFD7263B31F4D27D6FECE6BC18843EE479430FE0563E19E08A6186D7B45DBB5FF034D70D43EC
false
******************************************************
ssid:nicaimimashisha
nicaimimashisha
6E696361696D696D61736869736861
nicaimimashisha
ESS
auto
WPA2PSK
AES
false
passPhrase
true
01000000D08C9DDF0115D1118C7A00C04FC297EB010000004F479E51D4435D409C4B5FC05DF1BD2D000000000200000000001066000000010000200000005C53C70A83EBEA47512B9F87B34EC7C405E9B4ACDBFFFEBEA8B5DA6D6958E6A8000000000E8000000002000020000000F95172637168CC535A909A1CC8021C003077AD958B38C2C01F5B1CF6AB3F87B4100000005D3361250B2140E1B14D0F66D36F2CA640000000C49084078E63F00188D3CF0B80EE9127EEDFAEABAB01803D5E0480A89811E3B24FEF3EA45FF713BB9C244EABC1C2C119CAC4FE192ACF60C976027112262A4E3F
false
******************************************************
更多参考:
C#进制转换操作(三)之16进制操作
wlanapi.dll简介使用CMD命令修改Windows本地账户密码
http://blog.csdn.net/m593192219/article/details/9363355