【问题标题】:How can I get the subnet of this IP?我怎样才能得到这个IP的子网?
【发布时间】:2022-12-17 10:55:55
【问题描述】:

我有这个IP:192.168.1.1/24,我想得到这个192.168.1.0/24.在 python 中是否有任何内置方法?

我试图通过字符串修改来解决这个问题,但我认为如果有某种内置方法会更好。

所以基本上,有很多 IP 地址属于“192.0.2.0/28”,如下所示。

for addr in IPv4Network('192.0.2.0/28'):
    addr


IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
IPv4Address('192.0.2.9')

但我想知道是否只给出了一个子网大小的元素,比如 192.0.2.8/28 或 192.0.2.7/28,我想找回这个 192.0.2.0/28

【问题讨论】:

  • 你不能用字符串修改来解决它。这涉及到数学。
  • 你试过built-in tools了吗?

标签: python networking


【解决方案1】:

您将需要创建一个 IPv4Interface,然后获取 network 属性。或者,如果您知道要检查的子网,则可以使用 subnet_of 检查您指定的网络是否在另一个子网中。

from ipaddress import IPv4Interface, ip_network

interface_a = IPv4Interface('192.0.2.1/24')
interface_b = IPv4Interface('192.0.2.7/28')
print(interface_a.network)
print(interface_b.network)

a = ip_network('192.0.1.1/24')
b =ip_network('192.0.2.8')

print(b.subnet_of(a))

# outputs
192.168.1.0/24
192.0.2.0/28
True

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多