Я попробовал одно подмножество предложенных решений в этих ответах ... безуспешно, я наконец адаптировал и исправил предложенный код и написал свою фиксированную функцию.
Я протестировал его и работает, по крайней мере, на архитектурах с прямым порядком байтов - например, x86 - если кому-то нравится примерять архитектуру с прямым порядком байтов, пожалуйста, дайте мне отзыв.
IP2Int
код взят из этого поста , другой метод - полностью (для моих тестовых случаев) исправление предыдущих предложений в этом вопросе.
код:
def IP2Int(ip):
o = map(int, ip.split('.'))
res = (16777216 * o[0]) + (65536 * o[1]) + (256 * o[2]) + o[3]
return res
def addressInNetwork(ip, net_n_bits):
ipaddr = IP2Int(ip)
net, bits = net_n_bits.split('/')
netaddr = IP2Int(net)
bits_num = int(bits)
netmask = ((1L << bits_num) - 1) << (32 - bits_num)
return ipaddr & netmask == netaddr & netmask
Надеюсь, полезно,