px普贤教程PuXian
普贤教程 › 包参考

ipaddr 包

IP 地址与 CIDR

项值
包名ipaddr
版本0.2.0
可用版本0.1.0 / 0.2.0
入口ipaddr.px
分类网络与协议
文件数 / 行数1 / 402

安装与引入

bash
pxpkg init          # 首次
pxpkg add ipaddr@0.2.0
pxpkg install
px
import ipaddr
所属分类教程:网络与协议

公开接口

函数参数
ipv4_parses
ipv4_to_strn
cidr_parsecidr
cidr_validcidr
ipv4_in_cidrip, cidr
ipv4_cidr_networkcidr
ipv6_parses
ipv6_to_strh
ipv6_in_cidrip, cidr
ipv6_is_ipv4_mappedh
ipv6_extract_v4h
ip_is_ipv4s
ip_is_ipv6s
ip_valids
其余 18 个 def(内部与辅助,可直接调用但不属稳定接口)
函数参数
ip_pow2k
ip_finds, sub
ip_find_froms, sub, start
ip_is_digitc
ip_parse_ints
ipv4_cidr_splitcidr
ipv4_maskprefix
ipv4_cidr_broadcastcidr
ipv4_cidr_host_countcidr
ip_hexvalc
ip_hex_digitv
ip_hexn
ip_hex4n
ip_hex_to_ints
ip_has_dots
ip_v4_to_hextet_strsv4str
ip_hextetsparts, count_total
ip_hextets_strh, start, end

包内说明(源码头注释)

text
============================================================
普贤生态库:registry/ipaddr —— IP 地址与 CIDR
------------------------------------------------------------
纯函数库(无 IO、无状态),编译(px build)与解释(px run)双模式一致。
对齐 Python ipaddress / Go net/netip 心智:
ipv4_parse(s)          → Ok(int 0..2^32-1) | Err
ipv4_to_str(n)         → Ok("a.b.c.d") | Err
ip_valid(s)/ip_is_ipv4(s)/ip_is_ipv6(s) → bool
ipv4_in_cidr(ip, cidr) → bool          "192.168.1.100" in "192.168.1.0/24"
cidr_parse(cidr)       → Ok({addr, prefix}) | Err(IPv4)
cidr_valid(cidr)       → bool(IPv4)
ipv4_cidr_network/broadcast/host_count(cidr) → Ok(...) | Err
ipv6_parse(s)          → Ok([8 个 hextet int]) | Err(支持 :: 压缩 + IPv4 内嵌)
ipv6_to_str(h)         → Ok(压缩规范串) | Err
ipv6_in_cidr(ip6, cidr6) → bool
ipv6_is_ipv4_mapped(h) → bool          检测 ::ffff:0:0/96 前缀
ipv6_extract_v4(h)     → Ok("a.b.c.d") | Err  从 IPv4-mapped 提取 IPv4
说明:
- IPv4 宽严:必须 4 段纯数字、0-255;允许前导零("01.2.3.4" = 1.2.3.4)
- IPv6 仅小写/大写 hex;支持 "::"(至多一次)
- 新增:IPv4 内嵌尾段(RFC 4291)
"::ffff:192.168.1.1"(IPv4-mapped)和 "::192.168.1.1"(IPv4-compatible)
- IPv6 压缩规则:压缩最长连续零段(长度≥2,取首个最长段)
============================================================