文章内容

2021/8/12 17:53:37,作 者: 黄兵

Python ipaddress 相关操作

最近在 Python 中操作 IP 使用的是 IPy 这个包,这里依赖的是第三方包,还要管理软件包,有些不方便。

Python 自带的由操作 IP 相关的包,是 ipaddress --- IPv4/IPv6 操作库,经过一段时间使用,与 IPy 这个功能差不多,所以就使用了 ipaddress 替换了 IPy。

下面是一些使用 ipaddress 的总结:

查询 IP 的版本:

首先导入相关模块:

from ipaddress import ip_address, IPv4Address, IPv6Address
get_ip_version = ip_address(ip_str).version
if get_ip_version == 4:
int_ip = int(IPv4Address(ip_str))
else:
int_ip = int(IPv6Address(ip_str))

Pythonic:

ip_str = str(IPv4Address(int_ip)) if get_ip_version == 4 else str(IPv6Address(int_ip))

这里返回4或6,代表 IPv4,IPv6

将 IP 地址转换成 int:

int_ip = int(IPv4Address(ip_str))

这里将一个 IPv4 的 IP 转换成 int 数据类型。

将 int IP 转换成 string 类型 IP:

int_ip = 3232235521
get_ip_version = ip_address(int_ip).version
if get_ip_version == 4:
ip_str = str(IPv4Address(int_ip))
else:
ip_str = str(IPv6Address(int_ip))

IP 地址的反向 DNS PTR 记录的名称:

ip_address('54.173.65.162').reverse_pointer
>>> '162.65.173.54.in-addr.arpa'

通过开始 IP 与结束 IP 划分网段,代码示例如下:

import ipaddress
[ipaddr for ipaddr in ipaddress.summarize_address_range(
ipaddress.IPv4Address('192.0.2.0'),
ipaddress.IPv4Address('192.0.2.130'))]

最后结果为:

[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]

还有一些其他的网络类相关操作,可以查看官方文档。


参考资料:

1、ipaddress --- IPv4/IPv6 操作库


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - Python ipaddress 相关操作

分享到:

发表评论

评论列表