You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

netaddr升级至1.2.1后BaseIP类is_private方法替代方案咨询

替代netaddr旧版本is_private方法的实现方案

核心逻辑对齐

netaddr 0.10.1版本的BaseIP.is_private()会检查IP是否属于私有地址、链路本地地址、环回地址、站点本地地址等范围,新版本可以通过组合官方提供的预定义网络集合完整复现这一逻辑。

具体实现

1. 导入所需预定义集合

from netaddr import (
    IPV4_PRIVATE_USE, IPV4_LINK_LOCAL, IPV4_LOOPBACK, IPV4_SITE_LOCAL,
    IPV6_PRIVATE_USE, IPV6_LINK_LOCAL, IPV6_LOOPBACK, IPV6_SITE_LOCAL
)

2. 定义兼容函数

写一个轻量工具函数,同时兼容IPv4和IPv6:

# 提前合并网络集合,避免重复计算
_IPV4_PRIVATE_FULL = IPV4_PRIVATE_USE | IPV4_LINK_LOCAL | IPV4_LOOPBACK | IPV4_SITE_LOCAL
_IPV6_PRIVATE_FULL = IPV6_PRIVATE_USE | IPV6_LINK_LOCAL | IPV6_LOOPBACK | IPV6_SITE_LOCAL

def is_private(ip):
    """复现netaddr 0.10.1版本is_private方法的完整逻辑"""
    if ip.version == 4:
        return ip in _IPV4_PRIVATE_FULL
    elif ip.version == 6:
        return ip in _IPV6_PRIVATE_FULL
    return False

3. 替换原有调用

把旧代码中的:

if mynetwork.is_private():
    # DO SOMETHING

替换为:

if is_private(mynetwork):
    # DO SOMETHING

覆盖范围说明

这个实现完全覆盖旧版本is_private()以及IPV4_PRIVATEISH/IPV6_PRIVATEISH包含的所有场景:

  • 私有地址段(对应*_PRIVATE_USE)
  • 链路本地地址(对应*_LINK_LOCAL)
  • 环回地址(对应*_LOOPBACK)
  • 站点本地地址(对应*_SITE_LOCAL)

内容的提问来源于stack exchange,提问作者NPatel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:42:04