Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中以编程方式配置网络适配器的最佳方法_C#_.net_Wmi - Fatal编程技术网

C# 在.NET中以编程方式配置网络适配器的最佳方法

C# 在.NET中以编程方式配置网络适配器的最佳方法,c#,.net,wmi,C#,.net,Wmi,我有一个用C语言编写的应用程序,需要能够在Windows中配置网络适配器。我基本上是通过WMI来实现的,但是我不喜欢这个解决方案中的两个方面:有时设置似乎不起作用,当网线未插入时,WMI方法会返回错误,因此我无法判断它们是否真的成功 我需要能够通过网络连接-属性-TCP/IP屏幕配置所有可用设置 最好的方法是什么?我可以告诉你,特洛伊木马程序在经过几次清理后,是在HKEY_LOCAL_机器下设置注册表项的。他们设置的主要是DNS,这种方法肯定会坚持下去,任何曾经被感染的人都可以证明这一点,并且无

我有一个用C语言编写的应用程序,需要能够在Windows中配置网络适配器。我基本上是通过WMI来实现的,但是我不喜欢这个解决方案中的两个方面:有时设置似乎不起作用,当网线未插入时,WMI方法会返回错误,因此我无法判断它们是否真的成功

我需要能够通过网络连接-属性-TCP/IP屏幕配置所有可用设置


最好的方法是什么?

我可以告诉你,特洛伊木马程序在经过几次清理后,是在HKEY_LOCAL_机器下设置注册表项的。他们设置的主要是DNS,这种方法肯定会坚持下去,任何曾经被感染的人都可以证明这一点,并且无法再访问windowsupdate.com、mcafee.com等。

您可以使用
Process
发出命令来设置网络对话框中的所有属性

例如: 在适配器上设置静态IP地址的步骤

netsh interface ip set address "Local Area Connection" static 192.168.0.10 255.255.255.0 192.168.0.1 1
要将其设置为dhcp,请使用

netsh interface ip set address "Local Area Connection" dhcp
从C#开始做这件事会很困难


设置为static可能需要几秒钟才能完成,因此如果需要,请确保等待进程退出。

借助@PaulB's answers help

NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo("netsh", "interface ip set address " + nics[0].Name + " static 192.168." + provider_ip + "." + index + " 255.255.255.0 192.168." + provider_ip + ".1 1");
p.StartInfo = psi;
p.StartInfo.Verb = "runas";
p.Start();

签出此应用程序。这是一个设置wifi和以太网IP的完整应用程序

使用我的代码 SetIpAddress和SetDHCP

    /// <summary>
    /// Sets the ip address.
    /// </summary>
    /// <param name="nicName">Name of the nic.</param>
    /// <param name="ipAddress">The ip address.</param>
    /// <param name="subnetMask">The subnet mask.</param>
    /// <param name="gateway">The gateway.</param>
    /// <param name="dns1">The DNS1.</param>
    /// <param name="dns2">The DNS2.</param>
    /// <returns></returns>
    public static bool SetIpAddress(
        string nicName,
        string ipAddress,
        string subnetMask,
        string gateway = null,
        string dns1 = null,
        string dns2 = null)
    {
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc = mc.GetInstances();

        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
        NetworkInterface networkInterface = interfaces.FirstOrDefault(x => x.Name == nicName);
        string nicDesc = nicName;

        if (networkInterface != null)
        {
            nicDesc = networkInterface.Description;
        }

        foreach (ManagementObject mo in moc)
        {
            if ((bool)mo["IPEnabled"] == true
                && mo["Description"].Equals(nicDesc) == true)
            {
                try
                {
                    ManagementBaseObject newIP = mo.GetMethodParameters("EnableStatic");

                    newIP["IPAddress"] = new string[] { ipAddress };
                    newIP["SubnetMask"] = new string[] { subnetMask };

                    ManagementBaseObject setIP = mo.InvokeMethod("EnableStatic", newIP, null);

                    if (gateway != null)
                    {
                        ManagementBaseObject newGateway = mo.GetMethodParameters("SetGateways");

                        newGateway["DefaultIPGateway"] = new string[] { gateway };
                        newGateway["GatewayCostMetric"] = new int[] { 1 };

                        ManagementBaseObject setGateway = mo.InvokeMethod("SetGateways", newGateway, null);
                    }


                    if (dns1 != null || dns2 != null)
                    {
                        ManagementBaseObject newDns = mo.GetMethodParameters("SetDNSServerSearchOrder");
                        var dns = new List<string>();

                        if (dns1 != null)
                        {
                            dns.Add(dns1);
                        }

                        if (dns2 != null)
                        {
                            dns.Add(dns2);
                        }

                        newDns["DNSServerSearchOrder"] = dns.ToArray();

                        ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDns, null);
                    }
                }
                catch
                {
                    return false;
                }
            }
        }

        return true;
    }

    /// <summary>
    /// Sets the DHCP.
    /// </summary>
    /// <param name="nicName">Name of the nic.</param>
    public static bool SetDHCP(string nicName)
    {
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc = mc.GetInstances();

        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
        NetworkInterface networkInterface = interfaces.FirstOrDefault(x => x.Name == nicName);
        string nicDesc = nicName;

        if (networkInterface != null)
        {
            nicDesc = networkInterface.Description;
        }

        foreach (ManagementObject mo in moc)
        {
            if ((bool)mo["IPEnabled"] == true
                && mo["Description"].Equals(nicDesc) == true)
            {
                try
                {
                    ManagementBaseObject newDNS = mo.GetMethodParameters("SetDNSServerSearchOrder");

                    newDNS["DNSServerSearchOrder"] = null;
                    ManagementBaseObject enableDHCP = mo.InvokeMethod("EnableDHCP", null, null);
                    ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
                }
                catch
                {
                    return false;
                }
            }
        }

        return true;
    }
//
///设置ip地址。
/// 
///nic的名称。
///ip地址。
///子网掩码。
///大门。
///DNS1。
///DNS2。
/// 
公共静态bool SetIpAddress(
字符串名称,
字符串IP地址,
字符串子网掩码,
字符串网关=null,
字符串dns1=null,
字符串dns2=null)
{
ManagementClass mc=新的ManagementClass(“Win32_网络适配器配置”);
ManagementObjectCollection moc=mc.GetInstances();
NetworkInterface[]interfaces=NetworkInterface.GetAllNetworkInterfaces();
NetworkInterface NetworkInterface=interfaces.FirstOrDefault(x=>x.Name==nicName);
字符串nicDesc=nicName;
if(网络接口!=null)
{
nicDesc=网络接口。说明;
}
foreach(主运行中心中的管理对象生产任务单)
{
如果((bool)mo[“iEnabled”]==true
&&mo[“说明”]。等于(nicDesc)=真)
{
尝试
{
ManagementBaseObject newIP=mo.GetMethodParameters(“EnableStatic”);
newIP[“IPAddress”]=新字符串[]{IPAddress};
newIP[“SubnetMask”]=新字符串[]{SubnetMask};
ManagementBaseObject setIP=mo.InvokeMethod(“EnableStatic”,newIP,null);
if(网关!=null)
{
ManagementBaseObject newGateway=mo.GetMethodParameters(“设置网关”);
newGateway[“DefaultIPGateway”]=新字符串[]{gateway};
newGateway[“GatewayCostMetric”]=newint[]{1};
ManagementBaseObject setGateway=mo.InvokeMethod(“SetGateways”,newGateway,null);
}
如果(dns1!=null | | dns2!=null)
{
ManagementBaseObject newDns=mo.GetMethodParameters(“SetDNSServerSearchOrder”);
var dns=新列表();
如果(dns1!=null)
{
dns.Add(dns1);
}
如果(dns2!=null)
{
dns.Add(dns2);
}
newDns[“DNSServerSearchOrder”]=dns.ToArray();
ManagementBaseObject setDNS=mo.InvokeMethod(“SetDNSServerSearchOrder”,newDns,null);
}
}
抓住
{
返回false;
}
}
}
返回true;
}
/// 
///设置DHCP。
/// 
///nic的名称。
公共静态bool SetDHCP(字符串名称)
{
ManagementClass mc=新的ManagementClass(“Win32_网络适配器配置”);
ManagementObjectCollection moc=mc.GetInstances();
NetworkInterface[]interfaces=NetworkInterface.GetAllNetworkInterfaces();
NetworkInterface NetworkInterface=interfaces.FirstOrDefault(x=>x.Name==nicName);
字符串nicDesc=nicName;
if(网络接口!=null)
{
nicDesc=网络接口。说明;
}
foreach(主运行中心中的管理对象生产任务单)
{
如果((bool)mo[“iEnabled”]==true
&&mo[“说明”]。等于(nicDesc)=真)
{
尝试
{
ManagementBaseObject newDNS=mo.GetMethodParameters(“SetDNSServerSearchOrder”);
newDNS[“DNSServerSearchOrder”]=null;
ManagementBaseObject enableDHCP=mo.InvokeMethod(“enableDHCP”,null,null);
ManagementBaseObject setDNS=mo.InvokeMethod(“SetDNSServerSearchOrder”,newDNS,null);
}
抓住
{
返回false;
}
}
}
返回true;
}

知道如何提升此命令以使用管理员权限运行吗?看看这个答案的一个缺点是,您的nic名称并不总是“本地连接”,它可以不同。@MubasharAhmad解决这个问题的一种方法是使用NetworkInterface获取所有具有“.Description”的接口名称,然后让他们从中选择。然后,抓取“.Name”并将其传递给com
    /// <summary>
    /// Sets the ip address.
    /// </summary>
    /// <param name="nicName">Name of the nic.</param>
    /// <param name="ipAddress">The ip address.</param>
    /// <param name="subnetMask">The subnet mask.</param>
    /// <param name="gateway">The gateway.</param>
    /// <param name="dns1">The DNS1.</param>
    /// <param name="dns2">The DNS2.</param>
    /// <returns></returns>
    public static bool SetIpAddress(
        string nicName,
        string ipAddress,
        string subnetMask,
        string gateway = null,
        string dns1 = null,
        string dns2 = null)
    {
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc = mc.GetInstances();

        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
        NetworkInterface networkInterface = interfaces.FirstOrDefault(x => x.Name == nicName);
        string nicDesc = nicName;

        if (networkInterface != null)
        {
            nicDesc = networkInterface.Description;
        }

        foreach (ManagementObject mo in moc)
        {
            if ((bool)mo["IPEnabled"] == true
                && mo["Description"].Equals(nicDesc) == true)
            {
                try
                {
                    ManagementBaseObject newIP = mo.GetMethodParameters("EnableStatic");

                    newIP["IPAddress"] = new string[] { ipAddress };
                    newIP["SubnetMask"] = new string[] { subnetMask };

                    ManagementBaseObject setIP = mo.InvokeMethod("EnableStatic", newIP, null);

                    if (gateway != null)
                    {
                        ManagementBaseObject newGateway = mo.GetMethodParameters("SetGateways");

                        newGateway["DefaultIPGateway"] = new string[] { gateway };
                        newGateway["GatewayCostMetric"] = new int[] { 1 };

                        ManagementBaseObject setGateway = mo.InvokeMethod("SetGateways", newGateway, null);
                    }


                    if (dns1 != null || dns2 != null)
                    {
                        ManagementBaseObject newDns = mo.GetMethodParameters("SetDNSServerSearchOrder");
                        var dns = new List<string>();

                        if (dns1 != null)
                        {
                            dns.Add(dns1);
                        }

                        if (dns2 != null)
                        {
                            dns.Add(dns2);
                        }

                        newDns["DNSServerSearchOrder"] = dns.ToArray();

                        ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDns, null);
                    }
                }
                catch
                {
                    return false;
                }
            }
        }

        return true;
    }

    /// <summary>
    /// Sets the DHCP.
    /// </summary>
    /// <param name="nicName">Name of the nic.</param>
    public static bool SetDHCP(string nicName)
    {
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc = mc.GetInstances();

        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
        NetworkInterface networkInterface = interfaces.FirstOrDefault(x => x.Name == nicName);
        string nicDesc = nicName;

        if (networkInterface != null)
        {
            nicDesc = networkInterface.Description;
        }

        foreach (ManagementObject mo in moc)
        {
            if ((bool)mo["IPEnabled"] == true
                && mo["Description"].Equals(nicDesc) == true)
            {
                try
                {
                    ManagementBaseObject newDNS = mo.GetMethodParameters("SetDNSServerSearchOrder");

                    newDNS["DNSServerSearchOrder"] = null;
                    ManagementBaseObject enableDHCP = mo.InvokeMethod("EnableDHCP", null, null);
                    ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
                }
                catch
                {
                    return false;
                }
            }
        }

        return true;
    }