如何快速找到IP地址范围内的IP地址?
可能重复的问题:
python和IP范围?
如何获取IP地址列表?
我在一个文本文件里有很多IP范围:
1.0.0.0 - 1.0.0.255
....
223.255.254.0 - 223.255.254.255
我该如何快速找到某个IP地址属于哪个范围呢?
3 个回答
0
Python-iptools 似乎是一个很不错的工具:
它提供了一些对象,比如:
- IpRange:这是一个IP地址的范围,可以用来检查某个IP是否在这个范围内,还可以进行遍历。
- IpRangeList:这是一个包含多个IpRange对象的列表,同样可以用来检查某个IP是否在这些范围内,并且可以进行遍历。
0
如果把IP地址排好序,你就可以对这些IP地址进行二分查找。这样查找的速度会很快,时间复杂度是O(logN),其中N是列表中IP地址的数量。
1
你可以使用内置的socket库把点分的IP地址转换成一个整数。
http://code.activestate.com/recipes/66517-ip-address-conversion-functions-with-the-builtin-s/
然后,你可以测试一下你的IP地址是否在这两个整数之间:
a = dottedQuadToNum(ipfrom)
b = dottedQuadToNum(ipto)
mine = dottedQuadToNum(MyIP)
你可以测试一下 mine
是否在 a
和 b
之间。