python - python 如何以不同的时间间隔递增?

标签 python ip-address

假设我有一个 IP 地址192.168.1.1 我将如何像这样以不同的时间间隔递增?

192.168.1.2
192.168.1.3

...一直到192.168.1.999,然后“翻转”到192.168.2.1

最佳答案

您应该使用 stdlib ipaddress为了这。不要尝试使用原始字符串操作来完成此操作,因为存在一些陷阱和奇怪的边缘情况。使用面向对象的库将防止您生成无效数据。

迭代从 192.168.1.0 到 192.168.1.255(含)的 ipv4 地址相当于迭代 192.168.1.0/24 subnet 。使用network对象:

>>> from ipaddress import ip_network
>>> list(ip_network('192.168.1.0/24'))
[IPv4Address('192.168.1.0'),
 IPv4Address('192.168.1.1'),
 IPv4Address('192.168.1.2'),
...
 IPv4Address('192.168.1.255')]

其中一些地址不是可用的主机,例如 255 是 broadcast address 。迭代 hosts相反,如果这就是您正在寻找的:

>>>> list(ip_network('192.168.1.0/24').hosts())
[IPv4Address('192.168.1.1'),
 IPv4Address('192.168.1.2'),
 IPv4Address('192.168.1.3'),
...
 IPv4Address('192.168.1.254')]

请注意,192.168.1.999 不是有效的 IP 地址,因此不要生成它!无论如何,验证器都会阻止您创建它:

>>> from ipaddress import ip_address
>>> ip_address('192.168.1.254')
IPv4Address('192.168.1.254')
>>> ip_address('192.168.1.999')
# ValueError: '192.168.1.999' does not appear to be an IPv4 or IPv6 address

ip address object 转换返回到一个普通的旧字符串,只需调用 str 即可。

您的问题还询问了有关“滚动”到 192.168.2.1 的问题。这只是迭代不同的子网。 192.168.1.0/24中的24指的是分配给网络前缀的24个有效位(其余8位保留用于主机寻址),即子网掩码255.255.255.0。

要使其“翻转”,您实际上只想迭代更大的子网:

>>> gen = iter(ip_network('192.168.0.0/16'))
>>> for i in range(255*2):
...     next(gen)
...     
>>> next(gen)
IPv4Address('192.168.1.254')
>>> next(gen)
IPv4Address('192.168.1.255')
>>> next(gen)
IPv4Address('192.168.2.0')
>>> next(gen)
IPv4Address('192.168.2.1')

要从单个 IP 地址字符串获取网络对象,您可以使用 supernet方法:

>>> from ipaddress import ip_address, ip_interface
>>> ip = ip_address('192.168.1.1')
>>> net = ip_interface(ip).network
>>> net
IPv4Network('192.168.1.1/32')
>>> net.supernet(prefixlen_diff=8)
IPv4Network('192.168.1.0/24')

了解Internet Protocol version 4有关更多信息,请参阅 Python 的官方文档 ipaddress模块。

关于python - python 如何以不同的时间间隔递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51070784/

相关文章:

python - 使用 2 个标识符合并数据帧

python - 使用 Flask for Python 获取访问者的 IP 地址

git - IP地址更改后如何访问git remote repo

mobile - 对于网络 session ,移动设备的表观 IP 是否大部分稳定?

php - CakePHP 获取 IP 地址

Python:替换numpy数组的每第5个值

python - 如何检查子进程是否在Windows上被信号杀死

dns - 导航到 IP 地址显示与导航到主机名不同的页面?

python - 使用 python 通过 https 下载 mbox 文件

python - Python 如何读取 Ubuntu/Linux 中分离屏幕 session 的标准输出?