How can I loop through an IP address range in python? Lets say I want to loop through every IP from 192.168.1.1 to 192.168. How can this be done?
5 Answers
If you want to loop through a network you can define a network using ipaddress module. Such as ipaddress.IPv4Network('192.168.1.0/24')
import ipaddress
for ip in ipaddress.IPv4Network('192.168.1.0/24'):
print(ip)
This will produce a result like this:
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
...
192.168.1.255
But if you want to iterate through a range of ip's, you might need to convert between ip and integer.
>>> int(ipaddress.IPv4Address('10.0.0.1'))
167772161
So:
start_ip = ipaddress.IPv4Address('10.0.0.1')
end_ip = ipaddress.IPv4Address('10.0.0.5')
for ip_int in range(int(start_ip), int(end_ip)):
print(ipaddress.IPv4Address(ip_int))
will produce a result like:
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
Comments
You can use itertools.product:
for i,j in product(range(256),range(256)):
print "192.168.{0}.{1}".format(i,j)
Comments
from netaddr import *
ip = IPNetwork('192.0.2.16/29')
>>> ip_list = list(ip)
>>> len(ip_list)
8
>>> ip_list
[IPAddress('192.0.2.16'), IPAddress('192.0.2.17'), ..., IPAddress('192.0.2.22'), IPAddress('192.0.2.23')]
2 Comments
Vince Bowdren
Hi Petr - your answer would be better if you could include some explanation of how or why your code would solve the questioner's problem.
Lilás
Hi Petr, thanks for this solution, it was exactly what I was looking for as I am already using netaddr and I don't want to import another lib
Using netaddr module: http://netaddr.readthedocs.io/en/latest/api.html#netaddr.IPSet.iter_ipranges
from netaddr import iter_iprange
generator = iter_iprange('192.168.1.1', '192.168.255.255', step=1)
generator.next() # 192.168.1.1
generator.next() # 192.168.1.2
1 Comment
joarleymoraes
link is broken.
192.168.a valid ip address?