如何快速找到IP地址范围内的IP地址?

-4 投票
3 回答
1659 浏览
提问于 2025-04-17 07:27

可能重复的问题:
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 是否在 ab 之间。

撰写回答