尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

jc --ip-address 解析器完全指南:将 IPv4/IPv6 地址字符串一键转换为结构化 JSON

发布时间:2026/9/25 11:44:47

资讯中心
01
ARTICLE

jc --ip-address 解析器完全指南:将 IPv4/IPv6 地址字符串一键转换为结构化 JSON

jc --ip-address 解析器完全指南:将 IPv4/IPv6 地址字符串一键转换为结构化 JSON
开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载本指南深入讲解 jc 项目的ip_address解析器它能同时接受标准点分十进制与整数记法的 IPv4/IPv6 地址含 CIDR 前缀与 Scope ID并输出包含网段计算、地址分类、int/hex/bin 多进制转换的完整 JSON 结构。读完本文你将掌握jc --ip-address的 CLI 用法、jc.parse(ip_address, ...)的模块调用方式、输出 Schema 中每一个字段的语义以及底层如何基于 Python 标准库ipaddress实现。解析器定位面向地址字符串的通用转换器jcJSON Convert是一个把常用命令行工具输出、文件类型和通用字符串转换为 JSON、YAML 或字典的 CLI 工具与 Python 库。ip_address是其中的一个字符串类解析器专门处理纯粹的 IP 地址文本而不是某个命令的输出。根据 jc/parsers/ip_address.py 中的元信息该解析器版本1.5作者 Kelly Brazil兼容平台linux、darwin、cygwin、win32、aix、freebsd标签standard、string、slurpable——其中slurpable意味着它可以配合 jc 的--slurp选项一次性解析多行地址。由于它不依赖任何外部命令只接受地址文本本身非常适合在自动化脚本中快速把 IP 字符串结构化再交给jq等工具做过滤与统计。两种调用方式CLI 与 Python 模块CLI 方式将地址字符串通过标准输入管道传给 jc$ echo 192.168.1.1 | jc --ip-address需要美化输出pretty时追加-p$ echo 192.168.2.10/24 | jc --ip-address -p从 jc/lib.py 可以看出ip-address被注册在解析器名称列表中CLI 通过--ip-address长选项即可触发。模块方式在 Python 中调用jc.parse()import jc result jc.parse(ip_address, ip_address_string)parse()是解析器的主入口其函数签名定义在 jc/parsers/ip_address.pydef parse(data: str, raw: bool False, quiet: bool False) - Dict参数类型说明datastring待解析的地址文本IPv4/IPv6可含 CIDR、Scope ID或直接是整数记法rawboolean为True时返回未处理的原始结构化数据quietboolean为True时抑制警告信息如平台兼容性提示函数内部会先调用jc.utils.compatibility()校验平台兼容性、用jc.utils.input_type_check()检查输入类型再进入正式的解析逻辑。支持的输入格式根据文档说明该解析器接受标准记法与整数记法两种形式的 IPv4/IPv6 地址标准记法还可以附加 CIDR 子网掩码与 Scope ID输入形式示例说明IPv4 标准地址192.168.1.1点分十进制IPv4 带 CIDR192.168.2.10/24可计算网段、广播地址等IPv4 点分掩码192.168.0.1/255.255.128.0测试用例 tests/test_ip_address.py 验证了这种写法输出cidr_netmask为 17IPv4 整数记法3232236042等价于192.168.2.10IPv6 标准地址127:0:de::1支持::压缩写法IPv6 带 CIDR127:0:de::1/96IPv6 带 Scope ID127:0:de::1%128/96%后为接口 Scope ID如%eth0、%128IPv6 整数记法1531727573536155682370944093904699393等价于127:0:de::1从源码看整数与字符串的判定发生在解析初期jc/parsers/ip_address.py解析器先尝试把data直接int()转换失败则按字符串处理因此两种记法可以无缝混用。输出 Schema 全字段解析文档给出了完整的 JSON Schema所有字段按功能可分为五大组1. 版本与地址形态字段类型说明versionintegerIP 版本号IPv4 为 4IPv6 为 6max_prefix_lengthinteger最大前缀长度IPv4 为 32IPv6 为 128ipstring规范化后的裸地址不带 CIDRip_compressedstring压缩写法IPv6 用::折叠连续零段ip_explodedstring展开写法IPv6 每段补足 4 位十六进制ip_splitarray[string]按段拆分的地址列表IPv4 为 4 个十进制数IPv6 为 8 个四位十六进制段scope_idstring/nullIPv6 接口 Scope ID无则为nullipv4_mappedstring/nullIPv4 映射地址::ffff:x.x.x.x中还原出的 IPv4无则为nullsix_to_fourstring/null6to4 地址2002::/16中内嵌的 IPv4无则为nullteredo_clientstring/nullTeredo 地址中的客户端 IPv4无则为nullteredo_serverstring/nullTeredo 地址中的服务器 IPv4无则为null2. 网络与主机范围字段类型说明dns_ptrstring反向 DNS PTR 记录名IPv4 为in-addr.arpaIPv6 为ip6.arpanetworkstring网络地址broadcaststring广播地址hostmaskstring主机掩码与子网掩码互补netmaskstring子网掩码cidr_netmaskintegerCIDR 前缀长度如/24为 24hostsinteger可用主机数不含网络地址与广播地址first_hoststring第一个可用主机地址last_hoststring最后一个可用主机地址3. 地址分类标志布尔字段说明is_multicast是否为组播地址is_private是否为私有地址RFC 1918 等is_global是否为全球可达地址is_link_local是否为链路本地地址is_loopback是否为回环地址is_reserved是否为保留地址is_unspecified是否为未指定地址4. 整数表示int 子对象int下包含ip、network、broadcast、first_host、last_host五个整数字段将各地址转为无符号大整数IPv6 为 128 位整数数值可达 39 位十进制。5. 十六进制与二进制表示hex / bin 子对象hex以冒号分隔的十六进制字节串IPv4 为 4 组、IPv6 为 16 组覆盖ip、network、broadcast、hostmask、netmask、first_host、last_hostbin固定长度的二进制字符串IPv4 为 32 位、IPv6 为 128 位覆盖同样的 7 个字段。实战示例六种典型输入输出以下示例全部来自文档是验证解析器行为的最佳素材可直接复制运行。示例 1IPv4 CIDR$ echo 192.168.2.10/24 | jc --ip-address -p输出要点version: 4、network: 192.168.2.0、broadcast: 192.168.2.255、cidr_netmask: 24、hosts: 254、first_host: 192.168.2.1、last_host: 192.168.2.254is_private: truedns_ptr为10.2.168.192.in-addr.arpaint.ip为3232236042hex.ip为c0:a8:02:0abin.ip为11000000101010000000001000001010。示例 2IPv4 整数记法$ echo 3232236042 | jc --ip-address -p整数3232236042被还原为192.168.2.10。注意此时未提供 CIDR因此cidr_netmask为 32、hosts为 1、network/broadcast/first_host/last_host均为地址本身、hostmask为0.0.0.0、netmask为255.255.255.255。示例 3IPv6 CIDR Scope ID$ echo 127:0:de::1%128/96 | jc --ip-address -pscope_id为128version: 6、max_prefix_length: 128ip_exploded为0127:0000:00de:0000:0000:0000:0000:0001cidr_netmask: 96、hosts: 4294967294is_global: true、is_reserved: truedns_ptr为1.0.0.0.0.0...0.0.0.e.d.0.0.0.0.0.0.7.2.1.0.ip6.arpa。示例 4IPv6 整数记法$ echo 1531727573536155682370944093904699393 | jc --ip-address -p该 128 位整数被还原为127:0:de::1此时cidr_netmask为 128、hosts为 1、hostmask为::、netmask为全ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。示例 5IPv4 映射地址IPv4-Mapped$ echo ::FFFF:192.168.1.35 | jc --ip-address -pipv4_mapped字段还原出192.168.1.35ip_split同时包含 6 个 IPv6 段与 4 个 IPv4 十进制段[0000, ..., ffff, c0a8, 0123]的旧式输出或含192,168,1,35的新式输出取决于 Python 版本。示例 66to4 与 Teredo 地址$ echo 2002:c000:204::/48 | jc --ip-address -p # 6to4 $ echo 2001:0000:4136:e378:8000:63bf:3fff:fdd2 | jc --ip-address -p # Teredo6to4 示例的six_to_four为192.0.2.4Teredo 示例的teredo_client为192.0.2.45、teredo_server为65.54.227.120。这些派生属性直接来自 Pythonipaddress标准库对特殊 IPv6 地址类型的内建识别。源码实现底层原理与边界处理核心依赖Python 标准库 ipaddress解析器在 jc/parsers/ip_address.py 中导入了re、binascii与标准库ipaddress。整个转换过程围绕ipaddress.ip_interface()展开它一次性完成地址合法性校验、CIDR 与掩码解析、网段/广播地址计算并暴露scope_id、ipv4_mapped、sixtofour、teredo等属性。Scope ID 的兼容处理Python 3.9 之前的版本不支持 IPv6 地址带%scope的写法源码用正则SCOPE_PATTERN re.compile(r%[a-zA-Z0-9]*[^/])jc/parsers/ip_address.py先把%后的内容剥离并暂存解析成功后再回填到scope_id字段scope_match re.search(SCOPE_PATTERN, data) if scope_match: scope_string scope_match.group(0)[1:] data re.sub(SCOPE_PATTERN, , data)掩码字段的跨版本兼容由于旧版 Python如 3.6在输入为十进制整数时不提供hostmask/netmask源码通过try/except AttributeError手工兜底jc/parsers/ip_address.pyIPv4 回退为0.0.0.0/255.255.255.255IPv6 回退为::/ 全ffff。/31、/32、/127、/128 的特殊处理普通网段的主机范围是网络地址 1到广播地址 - 1但对点对点链路使用的极端前缀源码jc/parsers/ip_address.py做了专门分支/31IPv4与/127IPv6first_host与last_host直接用网络地址和广播地址hosts为 2/32IPv4与/128IPv6first_host与last_host都等于地址本身hosts为 1。int / hex / bin 的生成int直接对ipaddress对象调用int()hex借助辅助函数_b2a()jc/parsers/ip_address.py把.packed字节串用binascii.hexlify(byte_string, :)转成冒号分隔的十六进制为了兼容 Python 3.6/3.7separator参数 3.8 才引入还保留了手写两两分组的回退分支bin由_bin_format()jc/parsers/ip_address.py通过format(int(ip), 0 str(length) b)生成指定位数的二进制串IPv4 32 位、IPv6 128 位。整个解析器在parse()最后以raw_output if raw else _process(raw_output)返回其中_process()目前是直接透传说明该解析器默认输出的即为符合 Schema 的结构化数据。测试验证与边界覆盖仓库中的 tests/test_ip_address.py 为解析器提供了完整的单元测试覆盖了以下场景空输入返回{}test_ip_address_nodata纯 IPv4、IPv4CIDR、IPv4 点分掩码、IPv4 整数记法纯 IPv6、IPv6CIDR、IPv6CIDRScope ID、IPv6 整数记法IPv4 映射地址::FFFF:192.168.1.35同时兼容新旧两种 Python 行为6to4 地址2002:c000:204::/48与 Teredo 地址2001:0000:4136:e378:8000:63bf:3fff:fdd2。其中 IPv4 映射与 6to4 的测试特意设计了新旧风格均可通过的容错断言以兼容不同 Python 版本对is_reserved、is_private等分类标志的判定差异——这也是文档示例中个别布尔值与不同 Python 版本输出可能略有出入的原因。进阶用法与 --slurp 组合批量解析由于解析器带有slurpable标签可以配合--slurp选项将多行地址一次性转换为 JSON 数组$ printf 192.168.1.1\n192.168.2.10/24\n | jc --ip-address --slurp -p这在批量审计、巡检脚本中非常实用结合jq可以按is_private、cidr_netmask等字段快速过滤地址清单。更完整的 jc 使用方式可参考 docs/readme.md 与 EXAMPLES.md。小结jc --ip-address把IP 地址字符串这一常见数据形态一次性扩展为包含网络规划、地址分类、多进制表示的完整结构化 JSON。其实现完全基于 Python 标准库ipaddress并针对旧版 Python 的scope_id、hostmask、netmask缺失做了兼容兜底对/31、/32、/127、/128等极端前缀也有专门处理。无论你是用它做脚本里的地址解析还是配合--slurp与jq做批量地址审计本文给出的 Schema 对照与示例都能直接作为参考。赞分享开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载相关推荐jc 将 /proc/net/if_inet6 转为结构化 JSON解析 Linux 网络接口 IPv6 地址表的实战指南jc 将 /proc/net/if_inet6 转为结构化 JSON解析 Linux 网络接口 IPv6 地址表的实战指南 Linux 内核通过 /proc/开发工具fastfetch 内置的 Shell 补全脚本怎么用为 bash/zsh/fish 启用 tab 补全fastfetch 内置的 Shell 补全脚本怎么用为 bash/zsh/fish 启用 tab 补全 fastfetch 仓库自带三份 shell 补全脚开发工具jc proc-cpuinfo 解析器将 Linux /proc/cpuinfo 精准转换为结构化 JSONjc proc cpuinfo 解析器将 Linux /proc/cpuinfo 精准转换为结构化 JSON 本文基于 proc_cpuinfo 解析器文档开发工具上一篇揭秘Calibre-Web自更新机制如何保留配置和数据库安全升级下一篇Roc 语言 REPL 闭包求值实战以 simple_string_closure 快照测试为例解析函数式求值管线创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。