【问题标题】:Standard way to serialize and plot IP addresses?序列化和绘制 IP 地址的标准方法?
【发布时间】:2016-05-11 18:51:36
【问题描述】:

我正在尝试找到一种将 IP 地址转换为整数或实数值的方法,以便可以对它们进行数学分组并以有意义的方式进行绘制。理想情况下,具有相同最左边八位字节的 IP 会相似,共享最左边两个八位字节的 IP 会更相似,依此类推。

是否有标准的、可接受的方式来执行此操作?例如,在 Python 库中编码?还是我只需要编写自己的算法?

谢谢。

【问题讨论】:

    标签: python ip data-visualization data-science


    【解决方案1】:

    你的意思是,像...ipaddress module

    >>> import ipaddress
    >>> i = ipaddress.ip_address('10.9.8.7')
    >>> int(i)
    168364039
    

    具有相同最左边八位字节的 IP 地址将接近,因为如果将地址转换为 int,它只是指 IP 地址所代表的实际数字 (10.9.8.7 ≙ 10*256^3 + 9*256^2 + 8*256^1 + 7*256^0)。

    它也适用于 IPv6:

    >>> int(ipaddress.ip_address("2001:db8::1"))
    42540766411282592856903984951653826561
    

    【讨论】:

    • 我曾考虑过这一点,但在实践中,该模块生成的数字彼此之间存在显着差异,确实应该组合在一起。例如10.255.35.2 == 184493058 和 10.1.1.2 == 167837954。这个翻译比我理想中的要嘈杂一些,但也许它必须这样做。
    • 如您所见,它仍然非常接近。例如,如果您想检查第一个八位字节是否匹配,您可以将两个值都向右移动 24,即184493058>>24 == 167837954>>24
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2019-07-29
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多