.NET Core 2.x как получить текущий активный IPv4-адрес локальной сети? - PullRequest
0 голосов
/ 17 мая 2018

На котором работает WebService. Как тот, который я могу получить в cmd.exe > ipconfig: enter image description here

Чего я хотел бы добиться, так это автоматической настройки IP Kestrel, например:

.UseKestrel(opts => 
    { 
        opts.Listen(/*LocalIPv4ActiveAddress*/, 5000);
    }) 

Таким образом, я могу переключать свои машины для разработки с разными активными сетевыми интерфейсами (WiFi || Ethernet) и разными IP-адресами локальной сети.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы можете попробовать что-то вроде этого:

// order interfaces by speed and filter out down and loopback
// take first of the remaining
var firstUpInterface = NetworkInterface.GetAllNetworkInterfaces()
    .OrderByDescending(c => c.Speed)
    .FirstOrDefault(c => c.NetworkInterfaceType != NetworkInterfaceType.Loopback && c.OperationalStatus == OperationalStatus.Up);
if (firstUpInterface != null) {
    var props = firstUpInterface.GetIPProperties();
    // get first IPV4 address assigned to this interface
    var firstIpV4Address = props.UnicastAddresses
        .Where(c => c.Address.AddressFamily == AddressFamily.InterNetwork)
        .Select(c => c.Address)
        .FirstOrDefault();
}
0 голосов
/ 17 мая 2018

см. Документы

Сначала в ответ вы найдете адреса, подобные , откажитесь от адресов семейства InterNetworkV6 или v4 в соответствии с вашими потребностями и сохранить только IPv4 или IPv6?

как-то так

// Display the ScopeId property in case of IPV6 addresses.
if(curAdd.AddressFamily.ToString() == ProtocolFamily.InterNetworkV6.ToString())
  Console.WriteLine("Scope Id: " + curAdd.ScopeId.ToString());
...