需要管理员 运行
UI winform(
Combo :AdapterSelector ,
Button:button1
TextBox:IpAddress,subnetMask,Gateway,DNS )
public partial class frmNetAdapter : Form
{
private MyNetAdapter mynet = new MyNetAdapter();
public frmNetAdapter()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string content = ((ComboBoxItem)AdapterSelector.SelectedItem).Content.ToString();
string name = content.Replace("System.Windows.Controls.ComboBoxItem: ", "");
NetAdapter info = new NetAdapter();
info.IP = IpAddress.Text;
info.IPMask = subnetMask.Text;
info.GateWay = Gateway.Text;
if (mynet.setIP(name, info))
{
MessageBox.Show("设置成功!");
}
else
{
MessageBox.Show("设置失败!");
};
}
private void frmNetAdapter_Load(object sender, EventArgs e)
{
foreach (NetworkInterface adapter in mynet.adapters)
{
string Name = adapter.Name;
AdapterSelector.Items.Add(Name);
}
}
private void AdapterSelector_SelectedIndexChanged(object sender, EventArgs e)
{
string name = AdapterSelector.SelectedItem.ToString();
GetAdapterInfo(name);
}
private void GetAdapterInfo(string name)
{
NetAdapter info = mynet.GetAdapterInfo(name);
IpAddress.Text = info.IP;
subnetMask.Text = info.IPMask;
Gateway.Text = info.GateWay;
DNS.Text = info.DNS;
}
}
网卡类
namespace TestFormAPP
{
class MyNetAdapter
{
public List<NetworkInterface> adapters; //当修改网卡后 需要重新加载 该清单
public MyNetAdapter()
{
GetAllNetInterface();
}
private void GetAllNetInterface() //当网卡修改后 需要重新加载 该清单
{
adapters = GetAllNetAdapter();
}
private List<NetworkInterface> GetAllNetAdapter()
{
List<NetworkInterface> list = new List<NetworkInterface>();
foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
{
list.Add(adapter);
}
return list;
}
private string GetGateWay(IPInterfaceProperties ip)
{
string gateWay = "";
GatewayIPAddressInformationCollection gateways = ip.GatewayAddresses;
foreach (GatewayIPAddressInformation gateway in gateways) //一般情况 只有一个
{
gateWay = gateway.Address.ToString();
//if (IsPingIP(gateway.Address.ToString())) //可以测试是否 在线
//{
// gateWay = gateway.Address.ToString();
// break;
//}
}
return gateWay;
}
private NetworkInterface GetAdapterByName(string name)
{
NetworkInterface adapter = null;
foreach (NetworkInterface adapter2 in adapters)
{
if (adapter2.Name == name)
{
adapter = adapter2;
break;
}
}
return adapter;
}
public List<string> getAllAdapter()
{
List<string> list = new List<string>();
foreach (NetworkInterface adapter in adapters)
{
string Name = adapter.Name;
list.Add(Name);
}
return list;
}
#region net adapter information
private bool SetIP(NetworkInterface adapter, string[] ip, string[] submask, string[] gateway, string[] dns)
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); //注意这里是Win32_NetworkAdapterConfiguration
ManagementObjectCollection moc = mc.GetInstances();
string str = "";
foreach (ManagementObject m in moc)
{
/*if (!(bool)m["IPEnabled"]) continue;*/
if (m["SettingID"].ToString() == adapter.Id)
{
//IP与子网掩码
if (ip != null && submask != null)
{
ManagementBaseObject inPar;
ManagementBaseObject outPar;
string caption = m["Caption"].ToString();
//注意这里是EnableStatic
inPar = m.GetMethodParameters("EnableStatic");
//注意ip数组中不能有null;
inPar["IPAddress"] = ip;
//注意submask数组中不能有null;
inPar["SubnetMask"] = submask;
outPar = m.InvokeMethod("EnableStatic", inPar, null);
str = outPar["returnvalue"].ToString();
//0或1说明设置成功;
//返回值说明网址: https://msdn.microsoft.com/en-us/library/aa393301(v=vs.85).aspx
if (str != "0" && str != "1")
{
return false;
}
}
//网关
if (gateway != null)
{
ManagementBaseObject inPar;
ManagementBaseObject outPar;
string caption = m["Caption"].ToString();
//注意这里是SetGateways;
inPar = m.GetMethodParameters("SetGateways");
//注意gateway数组中不能有null;
inPar["DefaultIPGateway"] = gateway;
outPar = m.InvokeMethod("SetGateways", inPar, null);
str = outPar["returnvalue"].ToString();
if (str != "0" && str != "1")
{
return false;
}
}
//DNS
if (dns != null)
{
ManagementBaseObject inPar;
ManagementBaseObject outPar;
//注意这里是SetDNSServerSearchOrder;
inPar = m.GetMethodParameters("SetDNSServerSearchOrder");
//注意dns数组中不能有null;
inPar["DNSServerSearchOrder"] = dns;
outPar = m.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
str = outPar["returnvalue"].ToString();
if (str != "0" && str != "1")
{
return false;
}
}
GetAllNetInterface(); //修改后 清单发生变化
return true;
}
}
return false;
}
/// <summary>
/// config Net Adapter
/// </summary>
/// <param name="Name">Net Adapter Name</param>
/// <param name="netInfo"></param>
/// <returns></returns>
public bool setIP(string name, NetAdapter netInfo)
{
string[] ip = null;
if (netInfo.IP != "")
{ ip = new string[] { netInfo.IP }; }
string[] submask = null;
if (netInfo.IPMask != "")
{ submask = new string[] { netInfo.IPMask }; }
string[] gateway = null;
if (netInfo.GateWay != "")
{ gateway = new string[] { netInfo.GateWay }; }
string[] dns = null;
if (netInfo.DNS != "")
{
if (netInfo.DNS2 != "")
{ dns = new string[] { netInfo.DNS, netInfo.DNS2 }; }
else
{ dns = new string[] { netInfo.DNS }; }
}
NetworkInterface adapter = GetAdapterByName(name);
return SetIP(adapter, ip, submask, gateway, dns);
}
/// <summary>
/// get net adapter information
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public NetAdapter GetAdapterInfo(string name)
{
NetAdapter info = new NetAdapter();
NetworkInterface adapter = GetAdapterByName(name);
IPInterfaceProperties ip = adapter.GetIPProperties();
UnicastIPAddressInformationCollection ipCollection = ip.UnicastAddresses;
foreach (UnicastIPAddressInformation item in ipCollection)
{
//IPv4过滤
if (item.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
//IpAddress、subnetMask是TextBox类,UI展示;
info.IP = item.Address.ToString();
info.IPMask = item.IPv4Mask.ToString();
}
}
//DNS
if (ip.DnsAddresses.Count > 0)
{
info.DNS = ip.DnsAddresses[0].ToString();
if (ip.DnsAddresses.Count > 1)
{
info.DNS2 = ip.DnsAddresses[1].ToString();
}
else
{
info.DNS2 = "";
}
}
else
{
info.DNS = "";
info.DNS2 = "";
}
info.GateWay = GetGateWay(ip);
//MAC
PhysicalAddress pa = adapter.GetPhysicalAddress();
byte[] bytes = pa.GetAddressBytes();
StringBuilder sb = new StringBuilder();
//十六转换
for (int i = 0; i < bytes.Length; i++)
{
sb.Append(bytes[i].ToString("X2"));
if (i != bytes.Length - 1)
{
sb.Append('-');
}
}
info.MAC = sb.ToString();
return info;
}
#endregion
#region enableAdapter disAdapter
private ManagementObject GetNetwork(NetworkInterface adapter)
{
string netState = "SELECT * From Win32_NetworkAdapter"; //注意这里是Win32_NetworkAdapter,不是Win32_NetworkAdapterConfiguration
ManagementObjectSearcher searcher = new ManagementObjectSearcher(netState);
ManagementObjectCollection moc = searcher.Get();
/*MessageBox.Show(adapter.Description);*/
foreach (ManagementObject m in moc)
{
/*MessageBox.Show(m["Name"].ToString());*/
if (m["Name"].ToString() == adapter.Description) //注意这里的Name是与adapter的Description相对应的。
{
return m;
}
}
return null;
}
/// <summary>
/// enable/disable Net Adapter
/// </summary>
/// <param name="enable">enable/disable</param>
/// <param name="name">NetAdapter Name</param>
/// <returns></returns>
public bool AdapterEn(bool enable, string name)
{
NetworkInterface adapter = GetAdapterByName(name);
ManagementObject mo = GetNetwork(adapter);
string cmd = enable ? "Enable" : "Disable";
try
{
mo.InvokeMethod(cmd, null);
mo = null;
adapter = null;
return true;
}
catch
{
mo = null;
adapter = null;
return false;
}
}
#endregion
public bool IsPingIP(string ip)
{
try
{
Ping ping = new Ping();
PingReply reply = ping.Send(ip, 1000);
if (reply != null) { return true; } else { return false; }
}
catch
{
return false;
}
}
}
public class NetAdapter
{
public string IP { get; set; }
public string IPMask { get; set; }
public string GateWay { get; set; }
public string DNS { get; set; }
public string DNS2 { get; set; }
public string MAC { get; set; }
}
}