IP попадает в диапазон CIDR - PullRequest
       13

IP попадает в диапазон CIDR

5 голосов
/ 26 сентября 2011

У меня есть такой IP-адрес: 12.12.12.12
Я перебираю разные диапазоны IP-адресов (в 12.12.12.0/24 (пример)) и пытаюсь определить, находится ли IP-диапазон.
Я пробовал различные методы, такие как inet_addr и сравнение, но я не могу его получить.
Есть простой способ сделать это? Я использую Windows.

Ответы [ 2 ]

8 голосов
/ 26 сентября 2011

Просто проверьте:

(ip & netmask) == (range & netmask)

Вы можете определить маску сети из параметров CIDR range/netbits следующим образом:

uint32_t netmask = ~(~uint32_t(0) >> netbits);
2 голосов
/ 26 сентября 2011

Взять двоичное представление и обнулить то, что не соответствует вашей сетевой маске.

Пояснение: Допустим, у вас есть IP a.b.c.d и вы хотите сопоставить его с e.f.g.h/i, тогда вы можете бросить IP в одно целое число без знака uint32_t ip = a<<24 + b<<16 + c<<8 + d и сделать то же самое с uint32_t range = e<<24 + f<<16 + g<<8 + h. Теперь вы можете использовать сетевую маску: uint32_t mask = (~0u) << (32-i). Теперь вы можете просто проверить, находится ли ip "в" range, сравнив их: ip & mask == range & mask.

...