【问题标题】:python ipv6 to cidr gives wrong maskpython ipv6 to cidr给出了错误的掩码
【发布时间】:2015-05-02 05:05:00
【问题描述】:

我正在尝试将 ipv6 地址转换为 cidr 格式,但网络掩码似乎不正确。它应该是 /64 但我得到 /128

代码:

import ipaddress
ipv6 = '2001:19f0:5800:8561:5400:ff:fe07:cae5'
iv6cidr = ipaddress.ip_interface(ipv6)
print(iv6cidr)

输出:

2001:19f0:5800:8561:5400:ff:fe07:cae5/128

预期输出:

2001:19f0:5800:8561:5400:ff:fe07:cae5/64

我不是 IPv6 向导,但我发现的每个子网计算器都显示 /64

如何获得 cidr 格式的正确 IPv6 网络掩码??

如果配置:

vtnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=6c03bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        ether 56:00:00:07:ca:e5
        inet 108.61.169.203 netmask 0xfffffe00 broadcast 108.61.169.255
        inet6 fe80::5400:ff:fe07:cae5%vtnet0 prefixlen 64 scopeid 0x1
        inet6 2001:19f0:5800:8561::64 prefixlen 64
        inet6 2001:19f0:5800:8561:5400:ff:fe07:cae5 prefixlen 64 autoconf
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
        media: Ethernet 10Gbase-T <full-duplex>
        status: active

【问题讨论】:

  • IPv6 地址没有固有的前缀长度(::1 等少数例外)。 IPv4 地址也是如此,因为在 90 年代放弃了分类寻址。所以你必须以某种方式给出前缀长度/网络掩码(IPv4)作为输入。

标签: python ipv6 cidr


【解决方案1】:

/128 是正确的。您没有在输入中指定前缀长度,因此代码必须猜测您的意思。它做出的猜测是最正确的猜测:单个地址,例如可能用于环回接口。显示 /64 是一种假设。

【讨论】:

  • 您是否像 IPv4 网络掩码一样指定 /prefix?
  • 如何让它输出假设的 /64?
  • 显式添加到您的输入地址
猜你喜欢
  • 2017-10-29
  • 2020-12-22
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2016-02-18
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多