Тестирование, если IP-адрес находится в диапазоне адресов с .NET - PullRequest
4 голосов
/ 07 июля 2011

Есть ли в .NET понятие диапазонов IP-адресов?

Мне нужно проверить, находится ли данный IP-адрес в диапазоне адресов.

Я мог бы написать какой-нибудь API, который дал бы мне что-то вроде

IPRange ipRange = IPRange.Parse("127.0.0.1-127.0.0.15");
ipRange.Contains(someAddress);

но я не хочу изобретать велосипед, если в него уже встроены подобные функции.

Ответы [ 2 ]

4 голосов
/ 07 июля 2011

Нет, но вот как это можно сделать (VB, поскольку кодовый тег не включен в OP)

'test values
Dim rangeStart As Net.IPAddress = Net.IPAddress.Parse("192.168.133.1")
Dim rangeEnd As Net.IPAddress = Net.IPAddress.Parse("192.168.133.254")
Dim check As Net.IPAddress = Net.IPAddress.Parse("192.168.133.230")

'get the bytes of the address
Dim rbs() As Byte = rangeStart.GetAddressBytes
Dim rbe() As Byte = rangeEnd.GetAddressBytes
Dim cb() As Byte = check.GetAddressBytes

'reverse them for conversion
Array.Reverse(rbs)
Array.Reverse(rbe)
Array.Reverse(cb)

'convert them
Dim rs As UInt32 = BitConverter.ToUInt32(rbs, 0)
Dim re As UInt32 = BitConverter.ToUInt32(rbe, 0)
Dim chk As UInt32 = BitConverter.ToUInt32(cb, 0)

'check
If chk >= rs AndAlso chk <= re Then
    Debug.WriteLine("In Range")
Else
    Debug.WriteLine("Not In Range")
End If
0 голосов
/ 15 ноября 2013

Вот только быстрый перевод ответа dbasnett на C #:

public static bool IsIPInRange(string ip, string ipStart, string ipEnd)
{
    var pIP = IPAddress.Parse(ip);
    var pIPStart = IPAddress.Parse(ipStart);
    var pIPEnd = IPAddress.Parse(ipEnd);

    var bIP = pIP.GetAddressBytes().Reverse().ToArray();
    var bIPStart = pIPStart.GetAddressBytes().Reverse().ToArray();
    var bIPEnd = pIPEnd.GetAddressBytes().Reverse().ToArray();

    var uIP = BitConverter.ToUInt32(bIP, 0);
    var uIPStart = BitConverter.ToUInt32(bIPStart, 0);
    var uIPEnd = BitConverter.ToUInt32(bIPEnd, 0);

    return uIP >= uIPStart && uIP <= uIPEnd;
}

Вот полнофункциональная .NET Fiddle с примером.

Надеюсь, это не считается ответом не по теме.

...