как сменить ip адрес программно? - PullRequest
0 голосов
/ 17 февраля 2019

Я хочу использовать этот код ниже, чтобы программно изменить свой IP-адрес, но я не знаю имя networkInterfaceName (как параметр). Как я могу получить его?В любом случае, что представляет networkInterfaceName?

    public bool SetIP(string networkInterfaceName, string ipAddress, string subnetMask, string gateway = null)
    {
        var networkInterface = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(nw => nw.Name == networkInterfaceName);
        var ipProperties = networkInterface.GetIPProperties();
        var ipInfo = ipProperties.UnicastAddresses.FirstOrDefault(ip => ip.Address.AddressFamily == AddressFamily.InterNetwork);
        var currentIPaddress = ipInfo.Address.ToString();
        var currentSubnetMask = ipInfo.IPv4Mask.ToString();
        var isDHCPenabled = ipProperties.GetIPv4Properties().IsDhcpEnabled;

        if (!isDHCPenabled && currentIPaddress == ipAddress && currentSubnetMask == subnetMask)
            return true;    // no change necessary

        var process = new Process
        {
            StartInfo = new ProcessStartInfo("netsh", $"interface ip set address \"{networkInterfaceName}\" static {ipAddress} {subnetMask}" + (string.IsNullOrWhiteSpace(gateway) ? "" : $"{gateway} 1")) { Verb = "runas" }
        };
        process.Start();
        var successful = process.ExitCode == 0;
        process.Dispose();
        return successful;
    }

1 Ответ

0 голосов
/ 17 февраля 2019

Если вы хотите получить правильное имя интерфейса, вам следует начать с чтения статьи из документации Microsoft: NetworkInterface Class .Вы можете просто реализовать некоторые фрагменты кода с сайта выше и выбрать правильный интерфейс в вашем методе SetIP, вместо этого получив его из параметра метода.Если вам нужно получить его в параметре, это также должно быть очень просто.У вас есть множество свойств для идентификации интересующего вас сетевого интерфейса.

...