List Of Ip Addresses In Python To A List Of Cidr
How do I convert a list of IP addresses to a list of CIDRs? Google's ipaddr-py library has a method called summarize_address_range(first, last) that converts two IP addresses (sta
Solution 1:
Install netaddr.
pip install netaddr
Use functions of netaddr:
# Generate lists of IP addresses in range.ip_range = netaddr.iter_iprange(ip_start, ip_end)
# Convert start & finish range to CIDR.ip_range = netaddr.cidr_merge(ip_range)
Solution 2:
in python3, we have a buildin module for this: ipaddress.
list_of_ips = ['10.0.0.0', '10.0.0.1', '10.0.0.2', '10.0.0.3', '10.0.0.5']
importipaddressnets= [ipaddress.ip_network(_ip) for _ip in list_of_ips]
cidrs = ipaddress.collapse_addresses(nets)
list(cidrs)
Out[6]: [IPv4Network('10.0.0.0/30'), IPv4Network('10.0.0.5/32')]
Solution 3:
You can do it in one line using netaddr:
cidrs = netaddr.iprange_to_cidrs(ip_start, ip_end)
Solution 4:
Well, summarize_address_range
reduces your problem to splitting your list into consecutive ranges. Given that you can convert IP addresses to integers using
def to_int(str): struct.unpack("!i",socket.inet_aton(str))[0]
this should not be too hard.
Solution 5:
For the comment made by CaTalyst.X, note that you need to change to code in order for it to work.
This:
cidrs = netaddr.ip_range_to_cidrs('54.64.0.0', '54.71.255.255')
Needs to become this:
cidrs = netaddr.iprange_to_cidrs('54.64.0.0', '54.71.255.255')
If you use the first instance of the code, you'll get an exception since ip_range_to_cidrs isn't a valid attribute to the netaddr method.
Post a Comment for "List Of Ip Addresses In Python To A List Of Cidr"