【问题标题】:I need some method to check if an IPv6 address is in a net range in python我需要一些方法来检查 IPv6 地址是否在 python 的网络范围内
【发布时间】:2012-08-07 08:37:01
【问题描述】:

作为验证的一部分,我需要这样做,我有 IPv4 的解决方案。 但由于 IPv6 可以有多种格式,我无法找到确切的解决方案。 有什么建议吗?

【问题讨论】:

标签: python ipv6


【解决方案1】:

有很多方法可以解决您的问题。您可以从类似任务的解决方案开始:

这个想法是使用 Python 中的 socket 模块:

socket.inet_pton(socket.AF_INET6, address)

【讨论】:

  • 所以现在使用 inet_pton 我得到了 IP 地址的二进制格式,但是我如何检查它是否在网络范围内。
【解决方案2】:

从 Python 3.3 开始,可以使用

import ipaddress
ipaddress.ip_address(ip) in ipaddress.IPv6Network(network)

例如,

import ipaddress
ip = "2001:db8:85a3::8a2e:370:7334"
network = "2001:db8:85a3::/64"
test = ipaddress.ip_address(ip) in ipaddress.IPv6Network(network)
print(test)   # True

还有一个backport for Python 2.6+。

编辑: 您也可以使用以下同时支持 IPv4 和 IPv6 的函数

ipaddress.ip_network(addr)

【讨论】:

    【解决方案3】:

    查看IPy。在 Python 中处理 IP 地址和子网时,它非常有用。

    【讨论】:

    • 非常感谢您提供的信息 :-)
    猜你喜欢
    • 2017-07-13
    • 2023-04-03
    • 1970-01-01
    • 2015-09-11
    • 2013-08-22
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多