Vérifier si deux adresses CIDR se croisent?
Donné deux adresses CIDR dire 192.168.2.0/14 et 192.168.2.0/32
Comment puis-je vérifier si deux adresses ip se chevauchent dans "python2.6"??
Je suis passé par netaddr et il permet de vérifier si
192.168.2.0 est dans CIDR adresse 192.168.2.0/14 par
from netaddr import IPNetwork, IPAddress
bool = IPAddress("192.168.2.0") in IPNetwork("192.168.2.0/14"):
Mais comment faire pour vérifier les deux CIDR adresse??
J'ai trouvé la référence :: Comment puis-je vérifier si une adresse ip est un réseau en python
Pour info, 192.168.2.0/32 est une adresse IP unique (192.168.2.0), pas un sous-réseau.
Accepteriez-vous une réponse qui n'est pas python spécifique?
Thnx pour l'info. J'en ai besoin en python, mais votre explication pourrait être utile.
Mon explication aurait été la même que rob.
Accepteriez-vous une réponse qui n'est pas python spécifique?
Thnx pour l'info. J'en ai besoin en python, mais votre explication pourrait être utile.
Mon explication aurait été la même que rob.
OriginalL'auteur AJRedDevil | 2013-06-20
Vous devez vous connecter pour publier un commentaire.
Utilisant ipaddr:
Le même code du travail pour IPv6 aussi bien ou il prend en charge IPv4 uniquement?
Travail pour l'IPv6.
ipaddr.IPNetwork('::192.168.0.0/120').overlaps(ipaddr.IPNetwork('::192.168.0.0/121'))
retourne True etipaddr.IPNetwork('::192.168.4.0/120').overlaps(ipaddr.IPNetwork('::192.168.0.0/121'))
retourne FalseSuper .. merci beaucoup
OriginalL'auteur falsetru
Je vais supposer que vous voulez réellement à la fois Cidm pour représenter les plages, même si, dans votre exemple, 192.168.2.0/32 représente une seule adresse. Notez également qu'en 192.168.2.0/14, la .2. est dénuée de sens, car les 14 bits de préfixe n'est pas atteindre le troisième octet.
De toute façon, il y a plusieurs façons de le faire. Vous pouvez remarquer que pour qu'ils se chevauchent, il faut toujours être un sous-ensemble de l'autre:
Ou vous pouvez remarquer que pour les gammes de chevauchement, la première gamme la plus basse de l'adresse doit être inférieure ou égale à la deuxième plage la plus élevée de l'adresse, et vice versa. Donc:
Les adresses ip qui se chevauchent est le sous-réseau avec le plus petit de la gamme: c'est le nombre le plus élevé après la
/
. Par conséquent, entre les 192.168.2.0/23 et 192.168.2.0/24 les adresses qui se chevauchent sont 192.168.2.0/24. Rappelez-vous, de sous-réseau CIDR ne peut pas "se chevauchent". Elles ne peuvent contenir qu'un plus petit sous-réseau en notation CIDR ou pas.Puisque l'on est toujours un sous-ensemble de l'autre, le chevauchement est juste le plus petit de la gamme. La première adresse dans le chevauchement (petite plage) est
max(cidr0.first, cidr1.first)
. La dernière adresse estmin(cidr0.last, cidr1.last)
.Merci beaucoup rob.
OriginalL'auteur rob mayoff
Si vous ne disposez pas
netaddr
à portée de main pour tester, mais je pense que vous pourriez vérifier si le première et dernière adresse du premier réseau sont à la fois contenue dans le second:BTW,
IPNetwork
ligne 1102 définit un__contains__
méthode. Mais je ne suis pas certain que le ligne 1127 n'est pas cassé ? Vous devez tester et rapporter un bug si il est.OriginalL'auteur Sylvain Leroux