Python - 根据起始 IP 创建 IP 列表
Python - Create list of IPs based off starting IP
我花了几个小时研究,这让我很困惑。在我走上一条新路之前,我正在寻找最佳实践。
我最终想要一个 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
时,出现奇怪的错误,并且认为 replac
ing 可能不是最佳做法。
我觉得如果我放弃 ipaddress
模块,将会有一种更简单的方法来做到这一点。这样做的更好方法是什么,所以我的输出只是
list_of_ips = [192.168.1.1, 192.168.1.2, 192.168.1.3]
IPv4Address
是返回对象的数据类型。那就是一个class的名字; class 的显示函数表示它 returns 您看到的格式,IP 地址为字符串。您需要查找 class 以找到一个方法(函数)或属性(数据字段)以字符串形式为您提供 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")))
我花了几个小时研究,这让我很困惑。在我走上一条新路之前,我正在寻找最佳实践。
我最终想要一个 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
时,出现奇怪的错误,并且认为 replac
ing 可能不是最佳做法。
我觉得如果我放弃 ipaddress
模块,将会有一种更简单的方法来做到这一点。这样做的更好方法是什么,所以我的输出只是
list_of_ips = [192.168.1.1, 192.168.1.2, 192.168.1.3]
IPv4Address
是返回对象的数据类型。那就是一个class的名字; class 的显示函数表示它 returns 您看到的格式,IP 地址为字符串。您需要查找 class 以找到一个方法(函数)或属性(数据字段)以字符串形式为您提供 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")))