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