如何在Python中将IPv4范围(起始和结束)转换为斜杠表示法?

2 投票
3 回答
2768 浏览
提问于 2025-04-16 21:32

有没有什么脚本可以把一个起始IP地址和一个结束IP地址转换成斜杠表示法?

举个例子:

>>> ip_long = '10.182.71.0-10.182.75.255'
>>> convert_to_slash(ip_long)
10.182.71.0/24, 10.182.72.0/22

3 个回答

1

还有一种解决方案:

from ipaddress import IPv4Address, summarize_address_range

a=" ".join(map(str, summarize_address_range(IPv4Address('8.8.8.8'), IPv4Address('8.8.9.1'))))

print(a)
1

Google的ipaddr-py库里有一个叫做summarize_address_range(first, last)的方法。

summarize_address_range(first, last):
"""Summarize a network range given the first and last IP addresses.

Example:
    >>> summarize_address_range(IPv4Address('1.1.1.0'),
        IPv4Address('1.1.1.130'))
    [IPv4Network('1.1.1.0/25'), IPv4Network('1.1.1.128/31'),
    IPv4Network('1.1.1.130/32')]

Args:
    first: the first IPv4Address or IPv6Address in the range.
    last: the last IPv4Address or IPv6Address in the range.

Returns:
    The address range collapsed to a list of IPv4Network's or
    IPv6Network's.

Raise:
    TypeError:
        If the first and last objects are not IP addresses.
        If the first and last objects are not the same version.
    ValueError:
        If the last object is not greater than the first.
        If the version is not 4 or 6.
"""
4

使用来自 ipaddresssummarize_address_range() 函数,这个函数是 Python 3 标准库的一部分(同时也可以在 Python 2 中使用,具体可以查看 这个链接)。

>>> import ipaddress
>>> first = ipaddress.IPv4Address('10.182.71.0')
>>> last = ipaddress.IPv4Address('10.182.75.255')
>>> summary = ipaddress.summarize_address_range(first, last)
>>> list(summary)
[IPv4Network('10.182.71.0/24'), IPv4Network('10.182.72.0/22')]

撰写回答