項目需求:
- 掃描所有可用wifi
- 連接指定wifi,根據 ssid和 pwd連接
- 設置網卡獲取IP的方式:靜態IP、DHCP
有了以上需求,分別對應寫了三個方法
掃描wifi
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);
}
}
}
連接wifi
public void ConnectToSSID()
{
try
{
String auth = string.Empty;
String cipher = string.Empty;
bool isNoKey = false;
String keytype = string.Empty;
//Console.WriteLine("》》》《《" + ssid.dot11DefaultAuthAlgorithm + "》》對比《《" + "Wlan.Dot11AuthAlgorithm.RSNA_PSK》》");
switch (ssid.dot11DefaultAuthAlgorithm)
{
case "IEEE80211_Open":
auth = "open"; break;
case "RSNA":
auth = "WPA2PSK"; break;
case "RSNA_PSK":
//Console.WriteLine("電子設計wifi:》》》");
auth = "WPA2PSK"; break;
case "WPA":
auth = "WPAPSK"; break;
case "WPA_None":
auth = "WPAPSK"; break;
case "WPA_PSK":
auth = "WPAPSK"; break;
}
switch (ssid.dot11DefaultCipherAlgorithm)
{
case "CCMP":
cipher = "AES";
keytype = "passPhrase";
break;
case "TKIP":
cipher = "TKIP";
keytype = "passPhrase";
break;
case "None":
cipher = "none"; keytype = "";
isNoKey = true;
break;
case "WWEP":
cipher = "WEP";
keytype = "networkKey";
break;
case "WEP40":
cipher = "WEP";
keytype = "networkKey";
break;
case "WEP104":
cipher = "WEP";
keytype = "networkKey";
break;
}
if (isNoKey && !string.IsNullOrEmpty(key))
{
Console.WriteLine(">>>>>>>>>>>>>>>>>無法連接網絡!");
return;
}
else if (!isNoKey && string.IsNullOrEmpty(key))
{
Console.WriteLine("無法連接網絡!");
return;
}
else
{
//string profileName = ssid.profileNames; // this is also the SSID
string profileName = ssid.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);
}
ssid.wlanInterface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true);
ssid.wlanInterface.WlanConnectionNotification += new WlanClient.WlanInterface.WlanConnectionNotificationEventHandler(WlanInterface_WlanConnectionNotification);
ssid.wlanInterface.WlanNotification += new WlanClient.WlanInterface.WlanNotificationEventHandler(wlanInterface_WlanNotification);
ssid.wlanInterface.WlanReasonNotification += new WlanClient.WlanInterface.WlanReasonNotificationEventHandler(wlanInterface_WlanReasonNotification);
bool success = ssid.wlanInterface.ConnectSynchronously(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName, 15000);
if (!success)
{
//Console.WriteLine("連接網絡失敗!");
return;
}
}
}
catch (Exception e)
{
Console.WriteLine("連接網絡失敗!");
return;
}
}
設置網卡IP
public void SetNetworkAdapter()
{
Console.WriteLine(">>>>>>>>>>>>>>>>Set stati ip ");
ManagementBaseObject inPar = null;
ManagementBaseObject outPar = null;
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
Console.WriteLine(mo);
if (!(bool)mo["IPEnabled"])
continue;
inPar = mo.GetMethodParameters("EnableStatic");
inPar["IPAddress"] = new string[] { "172.27.15.140" };
inPar["SubnetMask"] = new string[] { "255.255.255.0" };
outPar = mo.InvokeMethod("EnableStatic", inPar, null);
inPar = mo.GetMethodParameters("SetGateways");
inPar["DefaultIPGateway"] = new string[] { "172.27.15.1" };
outPar = mo.InvokeMethod("SetGateways", inPar, null);
inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
inPar["DNSServerSearchOrder"] = new string[] { "61.139.2.69", "114.114.114.114" };
outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
}
}
設置網卡DHCP
public void SetNetworkAdapter()
{
Console.WriteLine(">>>>>>>>>>>>>>>>Set dhcp ip ");
ManagementBaseObject inPar = null;
ManagementBaseObject outPar = null;
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
Console.WriteLine(mo);
if (!(bool)mo["IPEnabled"])
continue;
mo.InvokeMethod("SetDNSServerSearchOrder", null);
mo.InvokeMethod("EnableStatic", null);
mo.InvokeMethod("SetGateways", null);
mo.InvokeMethod("EnableDHCP", null);
}
}
本人寫了一個WinFrom DEMO 有興趣或者需要的朋友,可以自行下載
https://download.csdn.net/download/ybb350680013/12197515