【问题标题】:How to set IP Address of Network adapters?如何设置网络适配器的 IP 地址?
【发布时间】:2013-05-20 20:40:00
【问题描述】:

为了玩局域网游戏以及在家上网,我必须经常更改 IP 地址。我正在用 C# 创建一个可以快速完成的应用程序。我已经制作了适配器名称、IP 地址、子网、DNS 服务器地址等字段。 我在设置 IP 按钮单击时运行的代码如下:

string adapter = comboAdapterName.Text;
string ip = comboIPAddress.Text;
string subnet = comboSubnet.Text;
string dns = comboDNS.Text;

现在我想使用这种处理方法从这些字段中获取数据并相应地附加字符串。

Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo("netsh", "interface ip set address \"Local Area Connection\" static 192.168.0.10 255.255.255.0 192.168.0.1 1");
p.StartInfo = psi;
p.Start();

但我想这并不容易。因为我无法在不破坏格式的情况下对其进行编辑。我还尝试使用许多 +s 创建一个全新的字符串,我可以像这样放置:

ProcessStartInfo psi = new ProcessStartInfo(mystring);

但这对我来说还是太难了。请提出一个简单的方法来做到这一点。

================================================ =============================

我想我明白了:

string ipstring = "netsh interface ip set address " + "\"" + adapter + "\"" + " " + "static" + " " + ip + " " + subnet + " " + dns;

【问题讨论】:

    标签: c# winforms visual-studio process ip-address


    【解决方案1】:

    您可以通过以下函数获取当前适配器配置:

    private static void EthernetInf(out string ip, out string dns, out string nic)  // To get current ethernet config
    {
        ip = "";
        dns = "";
        nic = "";
        foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
            {
    
                foreach (IPAddress dnsAdress in ni.GetIPProperties().DnsAddresses)
                {
                    if (dnsAdress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    {
                        dns = dnsAdress.ToString();
                    }
                }
    
    
    
                foreach (UnicastIPAddressInformation ips in ni.GetIPProperties().UnicastAddresses)
                {
                    if (ips.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork && !ips.Address.ToString().StartsWith("169")) //to exclude automatic ips
                    {
                        ip = ips.Address.ToString();
                        nic = ni.Name;
                    }
                }
            }
        }
    

    以下函数用于在提升的命令提示符下设置 IP:

    private void SetIP(Button sender, string arg)  //To set IP with elevated cmd prompt
    {
        try
        {
            if (sender.Background == Brushes.Cyan )
            { 
                MessageBox.Show("Already Selected...");
                return;
            }
            ProcessStartInfo psi = new ProcessStartInfo("cmd.exe");
            psi.UseShellExecute = true;
            psi.WindowStyle = ProcessWindowStyle.Hidden;
            psi.Verb = "runas";
            psi.Arguments = arg;
            Process.Start(psi);
            if (sender == EthStatic ||  sender == EthDHCP )
            {
                EthStatic.ClearValue(Button.BackgroundProperty);
                EthDHCP.ClearValue(Button.BackgroundProperty);
    
                sender.Background = Brushes.Cyan;
             }
    
            if (sender == WIFIStatic || sender == WIFIDhcp)
            {
                WIFIStatic.ClearValue(Button.BackgroundProperty);
                WIFIDhcp.ClearValue(Button.BackgroundProperty);
    
                sender.Background = Brushes.Cyan;
            }
    
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
    
        }
    

    此点击按钮代码将参数传递给 processstartinfo 以设置 IP

    private void EthStatic_Click(object sender, RoutedEventArgs e)
    {
    
        SetIP(EthStatic, "/c netsh interface ip set address \"" + EthName + "\" static " + Properties.Settings.Default.EthIPac + " " + Properties.Settings.Default.Subnet + " " + Properties.Settings.Default.EthDnsac + " & netsh interface ip set dns \"" + EthName + "\" static " + Properties.Settings.Default.EthDnsac);
    
    
    }
    

    完整的应用程序位于:

    https://github.com/kamran7679/ConfigureIP

    【讨论】:

      【解决方案2】:

      您将需要使用String.Format 方法。

      例子:

      string subnet = comboSubnet.Text;
      
      string formatted = string.Format("Subnet is: {0}", subnet);
      
      MessageBox.Show(formatted);
      

      将该字符串格式化为您想要的任何内容。

      【讨论】:

      • 以什么方式?发帖人要求连接字符串,并说这“对他来说太难了”。他不能用他已经拥有的部分来构建他的字符串。 String.Format 是从已有的部分构建字符串的方法。
      • 实际上我无法在字符串中添加 "。真是愚蠢。感谢您的宝贵时间。
      猜你喜欢
      • 2023-04-08
      • 2011-06-25
      • 2022-03-03
      • 1970-01-01
      • 2019-04-18
      • 2010-12-12
      • 2015-01-16
      • 1970-01-01
      相关资源
      最近更新 更多