2014-12-02 4 views
0

Когда я запускаю следующий код в Python 2.7, я получаю истинное значение для всех этих проверок.Странный результат при проверке, если ip-адрес находится в сети с netaddr

from netaddr import * 
testip = '192.168.2.5' 
testnetwork = '192.168.3.0/23' 
if testip in IPNetwork(testnetwork): 
    print "Logic Fail" 
if IPAddress(testip) in IPNetwork(testnetwork): 
    print "Logic Fail" 
if testip in IPSet([testnetwork]): 
    print "Logic Fail" 
if IPAddress(testip) in IPSet([testnetwork]): 
    print "Logic Fail" 

Выход:

Logic Fail 
Logic Fail 
Logic Fail 
Logic Fail 
+0

'192.168.2._' vs' 192.168.3._', один - '.2', другой' .3'. – 101

+0

Вы имели в виду '192.168.3.0/24'? – falsetru

+1

Конечно. -_- Я пытался захватить 192.168.3.0 и 192.168.4.0 в одной суперсете. Но, конечно, он возвращается к 192.168.2.0/23. –

ответ

0

Это не странный результат, то CIDR Указано, что раньше называлось «суперсетей», так:

192.168.3.0/23 

Эффективно охватывает

192.168.2.1 

через

192.168.3.254 

дает вы около 512 возможных адресов для работы с /23 так же, как этой маской сети

255.255.254.0 

, который где 3 получает врезался назад 2

Чтобы помочь себе, вы можете использовать онлайн-калькулятор подсети например http://mxtoolbox.com/subnetcalculator.aspx

0

Для 192.168.3.0/23 сети диапазон:

192.168.2.1 - 192.168.3.254

так что ваш IP-адрес 192.168.2.5 попадает в этот диапазон. Не уверен, что вы пытаетесь достичь, но, учитывая то, что указанный код питона работает, как ожидалось

 Смежные вопросы

  • Нет связанных вопросов^_^