Как получить свой IP-адрес на C#

Довольно распространенная задача при разработке приложений C#, работающих с сетью — получение IP адреса своего компьютера. Сегодня мы рассмотрим несколько вариантов того, как получить свой IP-адрес на C#. Отмечу, что те способы получения IP адреса. которые прекрасно работают в WinForms, могут абсолютно не работать, например, в UWP и наоборот.

При написании кода C# использовалась Visual Studio 2022 со всеми установленными обновлениями

Для выполнения задачи нам понадобится подключить в проект пространство имен System.Net. Код приложения будет следующим:

using System;
using System.Net;

namespace NetFrameworkConsole
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string host = Dns.GetHostName();
            Console.WriteLine($"Имя компьютера: {host}");
            IPAddress[] addresses = Dns.GetHostAddresses(host);
            foreach (IPAddress address in addresses)
            { 
               Console.WriteLine($"Адрес: {address} Семейство: {address.AddressFamily}");
            }
            Console.ReadKey();
        }
    }
}

здесь, в начале, мы получаем имя компьютера в сети, а, затем — список всех его адресов и в цикле foreach выводим адрес и семейство к которому этот адрес относится. Результат выполнения программы будет следующим:

Имя компьютера: {здесь_будет_имя_вашего_компьютера}
Адрес: fe80::5dec:1b50:506e:8c2b%16 Семейство: InterNetworkV6
Адрес: 192.168.1.36 Семейство: InterNetwork

Отметим, что для адресов IPv4 определяется семейство InterNetwork, а для IPv6 — InterNetworkV6. Таким образом, если нам необходимо получить, например, только IPv4 адрес, то можно воспользоваться тем же LINQ и сразу получить необходимый нам адрес:

using System;
using System.Net;
using System.Linq;

namespace NetFrameworkConsole
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string host = Dns.GetHostName();
            Console.WriteLine($"Имя компьютера: {host}");
            IPAddress address = Dns.GetHostAddresses(host).First<IPAddress>(f=>f.AddressFamily==System.Net.Sockets.AddressFamily.InterNetwork);
            if (address != null)
            { 
               Console.WriteLine($"Адрес: {address} Семейство: {address.AddressFamily}");
            }
            Console.ReadKey();
        }
    }
}

Указанный способ получения IP адреса в C# работает не только в .NET Framework, но и в .NET Core 3.1, .NET 5 и .NET 6 без каких-либо предупреждений компилятора.

Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии