设置其他计算机网络并以编程方式配置IP地址C#

时间:2018-04-04 06:05:38

标签: c# networking

我有一些示例代码,我可以更改自己的IP地址。

现在我有关于更改网络IP地址的问题。 当我的意思是网络(连接到局域网的计算机) 我也希望连接和配置他们的IP地址。

示例

我有2台计算机,IP地址为192.168.1.6 - Computer 1192.168.1.7 - Computer 2。所以现在我在计算机1,我想连接到192.168.1.7并将IP地址更改为192.168.1.8

代码

private void button1_Click_1(object sender, EventArgs e)
{
//example of ip 10.11.3.120
    try
    {
        setIP();
        setGateway();
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        setIP();
        setGateway();
        MessageBox.Show("Update Success");


    }
}

private void setIP()
{
    ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection objMOC = objMC.GetInstances();

    foreach (ManagementObject objMO in objMOC)
    {
        if ((bool)objMO["IPEnabled"])
        {
            try
            {
                ManagementBaseObject setIP;
                ManagementBaseObject newIP =
                    objMO.GetMethodParameters("EnableStatic");
                //string ip_address = "10.11.3.120";
                //string subnet_mask = "255.255.255.0";
                newIP["IPAddress"] = new string[] { textBox1.Text };

                newIP["SubnetMask"] = new string[] { textBox2.Text };

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

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }


        }
    }
}

public void setGateway()
{
    ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection objMOC = objMC.GetInstances();

    foreach (ManagementObject objMO in objMOC)
    {
        if ((bool)objMO["IPEnabled"])
        {
            try
            {
                ManagementBaseObject setGateway;
                ManagementBaseObject newGateway =
                    objMO.GetMethodParameters("SetGateways");

                newGateway["DefaultIPGateway"] = new string[] { textBox3.Text };
                newGateway["GatewayCostMetric"] = new int[] { 1 };

                setGateway = objMO.InvokeMethod("SetGateways", newGateway, null);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这不是一个直接的答案。但是,您应该拥有此处所需的所有信息

Connecting to WMI Remotely with C#

简而言之,您需要创建一个系统ManagementScope

  

注意 System.Management是用于访问的原始.NET命名空间   WMI;但是,此命名空间中的API通常较慢并且可以   相对于更现代的而言,它们的规模也不大   Microsoft.Management.Infrastructure同行。

然而

  1. 使用计算机名称和WMI路径创建ManagementScope对象,并通过调用ManagementScope.Connect()连接到目标。

  2. 如果您连接到其他域中的远程计算机或使用其他用户名和密码,则必须在ManagementScope的调用中使用ConnectionOptions对象。

  3.   

    ConnectionOptions包含用于描述的属性   身份验证,模拟,用户名,密码等   连接选项。

    ConnectionOptions options = new ConnectionOptions();
    options.Impersonation = System.Management.ImpersonationLevel.Impersonate;
    
    // options takes more arguments, you need to read up on what you want
    
    ManagementScope scope = new ManagementScope("\\\\FullComputerName\\root\\cimv2", options);
    scope.Connect();
    
    ManagementPath path = new ManagementPath("Win32_NetworkAdapterConfiguration");
    ObjectGetOptions o = new ObjectGetOptions(null, System.TimeSpan.MaxValue, true);
    ManagementClass objMC = new ManagementClass(scope, path, o);
    ...
    
      

    一般来说,建议您设置模拟   除非明确需要,否则等级为Impersonate

    补充阅读

    Connecting to WMI Remotely with C#

    ManagementScope Class

    ConnectionOptions Class

    ObjectGetOptions Class

    ManagementPath Class

    ManagementClass Class

    免责声明:您必须阅读这些主题并了解您的需求。