C # - определить, содержит ли диапазон IP-адресов конкретный адрес - PullRequest
6 голосов
/ 09 мая 2011

В C # предположим, что у вас есть диапазон IP-адресов, представленный в виде строкового значения:

"192.168.1.1-192.168.2.30"

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

"192.168.1.150"

Каким будет самый элегантный способ определения, содержит ли диапазон адресов один IP-адрес?

Ответы [ 2 ]

12 голосов
/ 09 мая 2011

Приведите IP к 32-битному целому числу (IP составляет 4 байта, поэтому его также можно представить в виде целого числа).Проверка диапазона - это просто проверка, находится ли данный IP (int) между двумя другими IP-адресами (2 других целых).

if( low_range <= checked_ip <= high_range ){ TRUE! }
0 голосов
/ 19 декабря 2017

Я только что написал небольшую библиотеку IpSet , чтобы проверить, содержится ли указанный IP-адрес в предопределенном диапазоне.

var set = IpSet.ParseOrDefault("192.168.0.*,10.10.1.0/24,192.168.1.1-192.168.2.30");
var result = set.Contains("192.168.1.150"); // true

Поддержка как IPv4, так и IPv6. Поддержка нотации CIDR. Основная работа заключается в преобразовании IP-адресов в целые числа и их сравнении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...