13

如何在python中遍历IP地址范围?假设我想遍历从 192.168.1.1 到 192.168 的每个 IP。如何才能做到这一点?

4

5 回答 5

24

如果要循环通过网络,可以使用 ipaddress 模块定义网络。如 ipaddress.IPv4Network('192.168.1.0/24')

import ipaddress
for ip in ipaddress.IPv4Network('192.168.1.0/24'):
    print(ip)

这将产生如下结果:

192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
...
192.168.1.255

但是,如果您想遍历一系列 ip,您可能需要在 ip 和整数之间进行转换。

>>> int(ipaddress.IPv4Address('10.0.0.1'))
167772161

所以:

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))

将产生如下结果:

10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
于 2017-11-09T08:07:19.710 回答
5

您可以使用itertools.product

for i,j in product(range(256),range(256)):
    print "192.168.{0}.{1}".format(i,j)
于 2012-11-13T21:11:26.817 回答
4

你试过吗,你知道,循环range吗?

for i in range(256):
    for j in range(256):
        ip = "192.168.%d.%d" % (i, j)
        print ip
于 2012-11-13T20:59:14.200 回答
3
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')]
于 2016-08-15T07:45:00.043 回答
2

使用 netaddr 模块: 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
于 2015-11-19T10:32:36.143 回答