Атрымаць лакальны IP-адрас

У Інтэрнэце ёсць некалькі месцаў, якія паказваюць, як атрымаць IP-адрас. І многія з іх выглядаюць так:

String strHostName = string.Empty;
// Getting Ip address of local machine...
// First get the host name of local machine.
strHostName = Dns.GetHostName();
Console.WriteLine("Local Machine's Host Name: " + strHostName);
// Then using host name, get the IP address list..
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;

for (int i = 0; i < addr.Length; i++)
{
    Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
}
Console.ReadLine();

У гэтым прыкладзе я атрымліваю некалькі IP-адрасоў, але мяне цікавіць толькі той, які маршрутызатар прызначае кампутару, на якім працуе праграма: IP-адрас, які я б даў напрыклад, хтосьці хоча атрымаць доступ да агульнай тэчкі на маім кампутары.

Калі я не падлучаны да сеткі, і я падключаны да Інтэрнэту непасрэдна праз мадэм без маршрутызатара, я хацеў бы атрымаць памылку. Як я магу зразумець, ці падключаны мой кампутар да сеткі з дапамогай C #, і калі ён атрымае IP-адрас LAN.

269
задан Martijn 1 July 2015 в 01:22
поделиться

2 ответа

Кроме того, просто простой код для получения IP-адреса клиента:

        public static string getclientIP()
        {
            var HostIP = HttpContext.Current != null ? HttpContext.Current.Request.UserHostAddress : "";
            return HostIP;
        }

Надеюсь, это поможет вам.

0
ответ дан 23 November 2019 в 02:19
поделиться

Уже существуют многие из ответа, но я все еще вношу мой:

public static IPAddress LocalIpAddress() {
    Func<IPAddress, bool> localIpPredicate = ip =>
        ip.AddressFamily == AddressFamily.InterNetwork &&
        ip.ToString().StartsWith("192.168"); //check only for 16-bit block
    return Dns.GetHostEntry(Dns.GetHostName()).AddressList.LastOrDefault(localIpPredicate);
}

Один лайнер:

public static IPAddress LocalIpAddress() => Dns.GetHostEntry(Dns.GetHostName()).AddressList.LastOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork && ip.ToString().StartsWith("192.168"));

примечание: Поиск от последнего, потому что это все еще работало после некоторых интерфейсов, добавленных в устройство, таких как MobileHotspot, VPN или другие необычные виртуальные адаптеры.

0
ответ дан 23 November 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: