跳到主要内容

IPv4 批量转换实战:把一堆点分十进制 IP 转整数、十六进制再反向还原

讲清楚 IPv4 点分十进制和 32 位整数怎么互转,为什么数据库存整数更省空间,IP 范围比较和 geoip 批量查询为何依赖整数,以及如何在浏览器本地批量处理一整列地址。

发布于 作者 李雷
#IPv4 #IP 转整数 #网络运维 #数据清洗 #本地工具

IPv4 批量转换实战:把一堆点分十进制 IP 转整数、十六进制再反向还原

运维和后端最常踩的一个坑,是把 IP 当字符串存进数据库,然后在做范围比较时发现 192.168.1.9 排在 192.168.1.10 后面。点分十进制是给人看的,机器更喜欢一个干净的 32 位整数。这篇把转换的算法、落库策略和批量处理流程一次讲透。

点分十进制到底怎么变成 32 位整数

一个 IPv4 地址由四段(octet)组成,每段 8 位,合起来正好 32 位。把它转成整数的公式很直白:从左到右每一段分别乘以 256 的幂,再相加。

具体点说,地址 a.b.c.d 的整数值是:

a × 256³ + b × 256² + c × 256¹ + d × 256⁰
= a × 16777216 + b × 65536 + c × 256 + d

192.168.1.1 算一遍:

192 × 16777216 = 3221225472
168 × 65536     =   11010048
  1 × 256       =        256
  1 × 1         =          1
-----------------------------
合计            = 3232235777

所以 192.168.1.1 对应的整数就是 3232235777。反向还原也是同一套逻辑:拿整数对 256 连续取模并整除,从低位往高位依次取出 dcba 四段。十六进制更直接,3232235777 写成 0xC0A80101,每两位十六进制刚好对应一段(C0=192、A8=168、01=1、01=1),调试抓包时一眼就能对上。

为什么数据库存整数比存字符串省空间又快

一个 192.168.100.200 这样的字符串,按 VARCHAR 存最长要占 15 个字节加长度头。换成无符号 32 位整数,固定 4 个字节。一张几百万行的访问日志表,光这一列就能省下一大半空间,索引体积同步缩小,B 树更扁,查得更快。

更关键的是排序和比较。整数列的 BETWEEN<> 是真正的数值比较;字符串列的比较是逐字符的字典序,'9' > '10' 这种反直觉结果会让范围查询全错。MySQL 其实内置了 INET_ATONINET_NTOA 做这件事,但很多团队的数据来自 CSV 导出、客服工单或日志抓取,落库前需要先在本地批量清洗成干净的一列,再喂给导入脚本。

IP 范围比较和 geoip 批量查询为什么离不开整数

geoip 数据库的本质,就是一张「起始整数 - 结束整数 - 国家/城市」的区间表。查一个 IP 属于哪个地区,等价于找哪个区间满足 start_int ≤ ip_int ≤ end_int。如果 IP 还是点分字符串,这个区间判断根本没法用普通索引跑。

判断某个地址是否落在某个 CIDR 段里,也是同一个道理。10.0.0.0/8 转成整数后是一段连续区间 [167772160, 184549375],任意一个待查 IP 只要转成整数,一次 BETWEEN 就有答案。批量场景下,先把上万个待查地址整列转成整数,再和区间表做一次 join,远比逐个字符串匹配高效。

我自己的一次批量清洗经历

上个月我接手一份合并自三个来源的白名单,CSV 里混着点分地址、残留的 10.0.0.0/8 网段、多打一段的脏数据,还有从网页复制时带进来的隐藏空白。我没有写一次性脚本,而是直接把整列粘进 IPv4 地址列表转换器,勾上去重和排序,把无效项一起带出来复核。它精确标出了那条多了一段的地址和那个 CIDR 残留,剩下的干净列表我直接导成 SQL IN 子句贴进了导入语句。整个过程没有任何数据离开浏览器,对内网资产清单来说这点很重要。

批量转换的本地处理流程

把一整列地址做格式转换,建议按这个顺序走:

  1. 粘贴或上传源文本,工具在浏览器本地解析每一段点分四段地址;
  2. 先规范化,去掉隐藏空白和前导零,避免 192.168.001.001192.168.1.1 被当成两条;
  3. 去重并排序,让输出按数值顺序排列,方便后续做范围切分;
  4. 保留无效项复核,看清楚哪一行会让 SQL 导入卡住;
  5. 选择输出格式,逐行、CSV、JSON、SQL IN 或 TypeScript union,直接拿去用。

如果你只是想从一大段日志或网页文本里把地址挑出来,而不需要后续转换,可以用更聚焦的 IPv4 地址提取器,它专门做抽取这一步。两个工具都 100% 在本地跑,不会把源文本发到任何服务器。

几个容易被忽略的细节

格式正确不等于地址真实存在,校验只保证它是合法的点分四段,不代表那台主机在线。从网页复制的文本几乎一定带隐藏空白,导入前务必先规范化再去重,否则去重会漏。需要留审计线索时,别只复制最终列表,导出带行号的 CSV 或 Markdown,回头排查能直接定位到原文哪一行。

把 IP 当整数处理,是网络数据工程里最朴素也最值钱的一个习惯。一旦这列干净了,落库、查 geoip、做范围比较全都顺了。


Made by Toolora · Updated 2026-06-13