【问题标题】:How to normalize IPv6 ip using TCL/Perl?如何使用 TCL/Perl 规范化 IPv6 ip?
【发布时间】:2016-05-05 18:11:26
【问题描述】:

我想将 IPv6 ip 的短格式转换为扩展格式。假设我将 ipv6 ip 作为 fe80::1 到 fe80:0000:0000:0000:0000:0000:0000:0001 和 fe80:0010::1 作为 fe80:0010:0000:0000:0000:0000:0000: 0001 等等。您能帮忙用 TCL 或 Perl 或 Python 语言编写脚本吗?

代码应该是动态的,无论我给出的扩展格式都应该是扩展格式。

【问题讨论】:

  • 附带说明,您应该接受任何有效的 IPv6 格式,但您应该始终返回压缩格式,每个 RFC 5952

标签: python perl tcl ipv6


【解决方案1】:

在 Perl 中,使用 Net::IP 模块:

$ perl -MNet::IP=:PROC -le'print ip_expand_address("fe80::1", 6);'
fe80:0000:0000:0000:0000:0000:0000:0001

【讨论】:

    【解决方案2】:

    在 Tcl 中,使用 ip 包:

    % package require ip
    1.2.2
    % ::ip::normalize fe80::1
    fe80:0000:0000:0000:0000:0000:0000:0001
    

    文档:ip

    【讨论】:

    • 谢谢。我可以看到 ::ip::normalize 的源代码吗?我想看看代码流。
    • @user3441116:源代码为here,请注意版权和许可条款。
    • 谢谢。我只是想了解这个过程背后的逻辑。
    【解决方案3】:

    对于 Python,我建议使用 netaddr 来处理任何类型的 IP 地址。在您的情况下,它能够以不同的forms/dialects 格式化 IPv6。

    对于您的特定用例,您应该能够做到:

    import netaddr
    
    ip = netaddr.IPAddress("fe80::1")
    
    print ip.format(dialect=netaddr.ipv6_verbose)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-07
      • 2017-04-09
      • 1970-01-01
      • 2010-11-26
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多