文章内容
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')]
还有一些其他的网络类相关操作,可以查看官方文档。
参考资料:
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - Python ipaddress 相关操作
评论列表