Vous devez d'abord diviser chaque plage de notation CIDR en une partie réseau (l'adresse IP pointée) et un nombre de bits. Utilisez ce nombre de bits pour générer le masque. , Il vous suffit ensuite de tester si (range & mask) == (your_ip & mask)
, tout comme votre système d'exploitation ne:
Une partie du code-C psuedo:
my_ip = inet_addr(my_ip_str) // Convert your IP string to uint32
range = inet_addr(CIDR.split('/')[0]) // Convert IP part of CIDR to uint32
num_bits = atoi(CIDR.split('/')[1]) // Convert bits part of CIDR to int
mask = (1 << num_bits) - 1 // Calc mask
if (my_ip & mask) == (range & mask)
// in range.
Vous pouvez probablement trouver une bibliothèque pour vous aider. Boost semble avoir un IP4 class qui a <
et >
opérateurs. Mais vous aurez toujours besoin de travailler avec la notation CIDR.
Ref:
[Qu'avez-vous essayé] (http://whathaveyoutried.com/)? Décomposez votre problème en étapes simples et remplissez-les un par un. –