【问题标题】:Compare if subnet is in IP range, in Python?比较子网是否在 IP 范围内,在 Python 中?
【发布时间】:2014-04-17 06:12:47
【问题描述】:

我在 csv 文件中有一组带有标签描述的子网。我需要将这些描述分配给另一个 csv 文件中这些子网所属的 Data Probe 范围。

给定一个 IP 地址为 34.0.0.0 和网络掩码为 255.255.0.0 的子网,
我想检查子网是否在34.163.83.230-34.163.83.230范围内

我考虑过从子网的 ip 和网络掩码创建一个范围,并将其与 Data Probe 范围进行比较。我无法确定这是否会产生正确的答案。

我不能使用最新版本的 Python(这必须与运行 python 2.7 的应用程序一起使用),所以ipaddress 模块不适合我。

【问题讨论】:

    标签: python-2.7 comparison ip-address subnet netmask


    【解决方案1】:

    socket 模块提供inet_aton,它将您的地址转换为位串。然后您可以使用struct.unpack 将它们转换为整数,使用& 进行掩码,并使用整数比较:

    from socket import inet_aton
    from struct import unpack
    
    def atol(a):
        return unpack(">L", inet_aton(a))[0]
    
    addr = atol("30.44.230.0")
    mask = atol("255.255.0.0")
    lo = atol("32.44.230.0")
    hi = atol("32.44.230.255")
    prefix = addr & mask
    
    print lo <= prefix <= hi 
    

    【讨论】:

    • 谢谢。我用它来进行我需要的比较。我只是想让其他人知道这不是检查子网范围的完整解决方案。
    猜你喜欢
    • 2014-12-16
    • 2017-01-14
    • 2015-11-27
    • 2011-11-30
    • 2020-07-27
    • 2012-04-19
    • 2013-07-30
    • 2018-08-29
    • 2015-05-20
    相关资源
    最近更新 更多