Python-基于起始IP创建IP列表

Python-基于起始IP创建IP列表,python,networking,ip-address,Python,Networking,Ip Address,我花了几个小时研究,这让我很难堪。在我走上新的道路之前,我正在寻找最佳实践 我最终想要一个IP列表(只是IP),当给定一个起始IP时,基于列表中项目的数量 我一直在使用ipaddress模块;这是我找到的最近的 import ipaddress IP_Start = 192.168.1.1 hostnames = [hostname1, hostname2, hostname3] list_of_ips = [] my_range = range(len(hostnames)) for ips

我花了几个小时研究,这让我很难堪。在我走上新的道路之前,我正在寻找最佳实践

我最终想要一个IP列表(只是IP),当给定一个起始IP时,基于列表中项目的数量

我一直在使用
ipaddress
模块;这是我找到的最近的

import ipaddress
IP_Start = 192.168.1.1
hostnames = [hostname1, hostname2, hostname3]
list_of_ips = []
my_range = range(len(hostnames))
for ips in my_range:
    list_of_ips.append(ipaddress.ip_address(IP_Start) + my_range[ips])
print(list_of_ips)
输出:

list_of_ips = [IPv4Address('192.168.1.1'), IPv4Address('192.168.1.2'), IPv4Address('192.168.1.3')]
由于某些原因,我无法从字符串列表中去掉“IPv4Address(“”)”;我的输出可能不是传统的列表。使用
str.replace
时,我会出现奇怪的错误,figure
replac
可能不是最佳做法

我觉得如果我放弃
ipaddress
模块,就会有一种更简单的方法来实现这一点。这样做的更好方法是什么?这样我的输出就简单了

list_of_ips = [192.168.1.1, 192.168.1.2, 192.168.1.3]

IPv4Address
是返回对象的数据类型。这是一个类的名称;该类的display函数表示它返回您看到的格式,IP地址作为字符串。您需要查找该类以找到一个方法(函数)或属性(数据字段),以将IP地址作为字符串提供给您,而不需要对其余对象进行标记

最简单的方法是转换为
str

for ips in my_range:
    list_of_ips.append(str(ipaddress.ip_address(IP_Start)) ... )

这里是如何做到这一点与内置只

首先使用一个函数将IP地址转换为长整数,然后使用另一个函数将长整数转换回IP地址

import socket,struct
def ip_to_int(ip_address):
    return struct.unpack('!I', socket.inet_aton(ip_address))[0]


def int_to_ip(int_value):
    return socket.inet_ntoa(struct.pack('!I', int_value))
然后你需要做的就是在你的范围内迭代

def iter_ip_range(start_address, end_address):
    for i in range(ip_to_int(start_address), ip_to_int(end_address) + 1):
        yield int_to_ip(i)
就用它吧

print(list(iter_ip_range("192.168.11.12","192.168.11.22")))

哈哈,哇!!这是伟大的,它正是我所寻找的,它只是添加了5个字符的代码。太神了“str”结尾)在我的行尾,所以看起来像。。对于my_范围内的ip:list_of_ips.append(str(ipaddress.ip_address(ip_Start)+my_范围[ips])哇,非常感谢。我正在保存这个片段!这将在以后的过程中派上用场,我在下面使用了Prune的解决方案,它几乎没有修改我必须使它工作的内容。谢谢你的时间!