簡體   English   中英

所有ip都在子網掩碼范圍內

[英]All ip in range of subnet-mask

我知道如何獲得范圍內的所有IP

from netaddr import iter_iprange
generator = iter_iprange('192.168.1.1', '192.168.255.255', step=1)

我想要的是獲得所有用一些IP修復子網掩碼的IP。

例如,我得到Ip 2.2.2.2和掩碼255:255:255:0所以我得到255個IP地址2.2.2.2 - 2.2.2.255,但如果子網掩碼是255.255.255.254我沒有修復此問題的IP

我怎么能在python中得到它?

您可以使用IPNetwork:

from netaddr import IPNetwork

ip_addr = '2.2.2.2'
mask = '255.255.255.0'
network = IPNetwork('/'.join([ip_addr, mask]))
generator = network.iter_hosts()

注意: 2.2.2.2/255.255.255.0相當於CIDR 2.2.2.0/24 ,兩者都適用於IPNetwork
轉換為您獲得的列表:

In []:
list(generator)

Out[]:
[IPAddress('2.2.2.1'),
 IPAddress('2.2.2.2'),
 IPAddress('2.2.2.3'),
 ...
 IPAddress('2.2.2.252'),
 IPAddress('2.2.2.253'),
 IPAddress('2.2.2.254')]

根據netaddr.iter_host文檔:

  • 對於IPv4,始終排除網絡和廣播地址。 對於包含少於4個IP地址/ 31和/ 32的子網,按照RFC 3021的方式報告

RFC 3021說:

在具有31位子網掩碼的點對點鏈路中,上面的兩個地址必須被解釋為主機地址。

因此報告了兩個掩碼為255.255.255.254 IP地址:

In []:
mask = '255.255.255.254'
list(IPNetwork('/'.join([ip_addr, mask])).iter_hosts())

Out[]:
[IPAddress('2.2.2.2'), IPAddress('2.2.2.3')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM