Валидация IP адреса
Как валидировать IP адреса для легального доступа? У меня есть следующий список:
185.71.76.0/27
185.71.77.0/27
77.75.153.0/25
77.75.156.11
77.75.156.35
77.75.154.128/25
2a02:5180::/32
Как видно тут есть разные маски и версии протокола. Доступ к некоторым методам API может осуществляться только с этих адресов, но я не знаю как мне узнать является ли текущий IP адресс легальным.
Я знаю, что есть класс IPNetwork из Microsoft.AspNetCore.HttpOverrides, но я не знаю как мне сохранить список выше для валидации.
Ответы (1 шт):
Есть удобная библиотека IpAddressRange, он же в NuGet Она умеет как в IpV4 так и в IpV6, включая маски и диапазоны.
И пример, как заблочить серые адреса. Можно по аналогии наполнить список своими адресами и настроить Middleware или любым другим удобным способом блокировку.
/// <summary>
/// Список частных "серых" адресов.
/// </summary>
private static readonly List<IPAddressRange> _privateIpAddresses =
new List<IPAddressRange>()
{
IPAddressRange.Parse("0.0.0.0/8"),
IPAddressRange.Parse("0.0.0.0/32"),
IPAddressRange.Parse("10.0.0.0/8"),
IPAddressRange.Parse("100.64.0.0/10"),
IPAddressRange.Parse("127.0.0.0/8"),
IPAddressRange.Parse("169.254.0.0/16"),
IPAddressRange.Parse("172.16.0.0/12"),
IPAddressRange.Parse("192.0.0.0/24"),
IPAddressRange.Parse("192.0.0.0/29"),
IPAddressRange.Parse("192.0.0.170/32"),
IPAddressRange.Parse("192.0.0.171/32"),
IPAddressRange.Parse("192.0.2.0/24"),
IPAddressRange.Parse("192.168.0.0/16"),
IPAddressRange.Parse("198.51.100.0/24"),
IPAddressRange.Parse("198.18.0.0/15"),
IPAddressRange.Parse("203.0.113.0/24"),
IPAddressRange.Parse("255.255.255.255/32")
};
/// <summary>
/// Проверяет, является ли IP адрес публичным
/// (отсутствие в "сером" диапазоне адресов).
/// </summary>
/// <param name="ipString">IP адрес.</param>
public static bool IsPublicIpAddress(string ipString)
{
var ipAddress = IPAddress.Parse(ipString);
return _privateIpAddresses.All(range => !range.Contains(ipAddress));
}
А вообще, блокировки или белые списки по IP обычно делаются на уровне инфраструктуры - например в Nginx прокси.