【问题标题】:How to get the IP prefix while we have subnet and IPv4 address using python-netaddr?当我们使用 python-netaddr 获得子网和 IPv4 地址时,如何获取 IP 前缀?
【发布时间】:2012-05-30 09:24:09
【问题描述】:

我正在使用 python-netaddr 库来处理 IP 地址和子网。我阅读了 netaddrd 的完整文档:Netaddr documentation。但没有找到任何解决我的问题的方法。我有一个 IP 地址和子网,我想通过使用它们来获取该 IP 的前缀。这样我就可以打印所有进入子网的 ip。

例如:

Ip Address: 192.0.2.0
Subnet Network: 255.255.255.0

It should return the prefix which is : 24

【问题讨论】:

  • 24 是从哪里来的?
  • 你试过吗? IPAddress('192.0.2.0/255.255.255.0')?您可以获取该子网中所有地址的列表,并在您链接到的文档中提供示例。
  • /24是一种表示掩码255.255.255.0的方式,也是11111111.11111111.11111111.00000000
  • 所以你想,给定一个点状网络掩码,得到前缀长度? ip地址在这里没有区别,是吗?
  • IPAddress() 不支持网络掩码或子网前缀!这就是为什么你需要使用 IPNetwork()

标签: python ip python-2.7 ip-address inetaddress


【解决方案1】:

要获得 24,您可以使用以下 sn-p

ip = IPNetwork('192.0.2.0/255.255.255.0')
print ip.prefixlen

但如果你想要子网中所有地址的列表,使用起来会更容易:

ip = IPNetwork('192.0.2.0/255.255.255.0')
list(ip)

【讨论】:

    【解决方案2】:

    使用给定的网络掩码,我们可以通过以下函数获得前缀:

    def getPrefix(mask):
        prefix = sum([bin(int(x)).count('1') for x in mask.split('.')])
        return prefix
    

    【讨论】:

      【解决方案3】:
      def getPrefix(binary):
          prefixCount=0
          for i in (str(binary)):
              if(i == '1'):
                  prefixCount+=1
          return prefixCount
      

      如果子网转换为二进制格式并在输入中给出,这将返回您的“Prefixcount”。

      【讨论】:

        【解决方案4】:

        子网掩码是:255.255.255.0 我就是这样: 1。 1. 1. 0

        255 是所有 8 位都打开的。 IE。全部为 1。 0 是所有 8 位都关闭。 如果您查看此子网掩码 [255.255.255.0],前 3 个八位字节全部设为“开启”,而最后一个八位字节设为“关闭”。
        因此,计算在这种情况下为 ON 的所有八位字节,3 个八位字节 我们可以说:255.255.255.0 1. 1. 1 .0 8 + 8 + 8 + 0 =24

        【讨论】:

        • 看来你可以拆分它,bitwise-and 并加入它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 2019-08-12
        • 2012-06-16
        • 2016-09-20
        • 2011-05-10
        • 2018-11-24
        • 2018-10-27
        相关资源
        最近更新 更多