简介:一份2019年7月发布的全国最新IP地址库,整理为SQL数据库文件,面向网络管理员、安全工程师、数据分析师及需要处理IP归属信息的技术人员。资源基于ip_ip.net数据整理,覆盖全国各地区的IP地址分配情况,包含公共IP、私有IP及归属地等字段,可用于恶意IP识别、网站访问者地域分析、路由规划等场景。压缩包共1个文件,文件类型为SQL,大小仅6.66MB,轻量且便于导入MySQL等关系型数据库进行查询和二次分析,适合有一定数据库基础的用户快速上手使用。已有235人学习下载。借助该库,可省去自行采集与清洗IP数据的步骤,直接获得一份结构化的全国IP参照数据;同时需留意IP动态分配与IPv6普及带来的局限,使用时应遵守相关法规并注意隐私保护。 先说结论:这个ip_ip.net 201907.zip不是什么恶意样本,也不是某次泄漏的数据包。它是一份非常典型的“月度离线 IP 归属地数据库”压缩包,由第三方渠道在 2019 年 7 月抓取或整理自当时 ipip.net 可下载的数据源。你会在各种运维交流群、数据分析小组、网络设备维护文档里看到类似的文件名。
这类文件直到今天仍然有人问,原因很简单:虽然 2019 年的 IP 段数据放到现在已经有相当大的偏差,但它依然能用来做历史溯源、安全分析对照、教育实验,甚至在某些老旧内网系统里继续充当静态 IP 库。在写这篇整理时,我假设你遇到的实际问题就是“拿到了这个 zip 但解不开、打不开、或者不知该如何使用里面的数据”,所以全文会围绕一条主线:搞清楚这个文件是什么、怎么解压、解压后怎么用、以及踩坑后怎么排查。
如果你手头正好躺着这个文件,或者正在为类似命名的.zip数据包头疼,下面的内容可以直接按步骤走一遍。
1. 内容整体设计与思路拆解
1.1 这到底是个什么文件:ipip.net 数据与 201907 的含义
ipip.net 是国内早年间做得非常早、使用范围极广的 IP 归属地查询服务商,很多人熟悉它的在线接口和可离线下载的数据库包。它的离线库通常以“年+月”命名,比如201907就代表数据快照时间大致在 2019 年 7 月。数据内容一般包含 IP 段起始地址、结束地址、归属国家、省市区、运营商等字段。
这类数据库通常不是每天更新,而是每月或按季度发布一版“全量包”。201907.zip就是那段时间流传度较高的一份全量快照。它的产生背景很简单:很多内网系统、网络审计设备、数据分析平台需要离线判断访问来源地,不可能每次都调在线 API,所以直接导入一份月度数据到本地库里,再定时更新。
比较关键的是,这份数据流传到第三方渠道后,经常被打包、重新压缩、甚至加上密码,用来控制分发范围或者防止被搜索引擎直接抓取。所以你今天在某个网盘或群里拿到的ip_ip.net 201907.zip,大概率不是官方原版压缩包,而是经过二次加工的版本,可能存在文件名改动、密码保护、格式变更等行为。
1.2 为什么需要拆解这个压缩包:从“IP 数据文件”到“实操需求”
从热搜词里能明显看出,围绕这个文件的高频需求有几类:
- 直接用户:我下载了一个 IP 库,但是 zip 包解压报错或者有密码,我该怎么办。
- 运维人员:我想把这个数据导入到一个系统里做 IP 段统计,可是第一步就卡在解压环节。
- 安全分析人员:我需要比对某个“疑似黑产”IP 在 2019 年时的归属地,想用历史数据做参考。
- 学习者的需求:我想学 zip 密码破解、Python 解包、IP 库解析,正好拿这份文件练手。
所以这篇内容不会只教你“输入一条解压命令”就完事。它更值得展开的地方是:碰到一个可能是加密的、格式不明确的 zip 数据包,应该如何从“解不了压”一步步走到“拿到数据并能使用”的完整链路。
1.3 方案选型背后的几个思路:为什么不是所有 zip 都要硬暴力破解
在处理问题时,我的优先顺序是:先确定文件真实性,再尝试常规解压,再判断有无加密,最后才考虑字典或暴力破解。这个顺序基于一个很现实的经验:很多所谓“解压不了”的 zip 根本不是密码问题,而是文件格式不同、文件名编码错乱、或者虽然扩展名是 zip 但实际是自解压或分卷文件。
对于201907.zip这种带明确日期标识的历史文件,我还会额外做一步判断:它生成于 2019 年,当时不少压缩工具默认使用 ZipCrypto 或 AES 加密。如果是 ZipCrypto,破解工具成功率相对高一些;如果是 AES,暴力破解难度就大得多。所以“能不能破解”很大程度上不取决于耐心,而是最初压缩时选的加密方式。
选择暴力破解方案时,也要控制预期。一个 8 位以上的无规则密码,在纯 CPU 环境下可能要跑数天甚至数周。因此,如果是拿这个文件做实验,建议先用常见弱密码字典过一遍;如果真实场景中急需数据,最好再想想其他渠道,比如找文件上传者索取密码。
1.4 镜像与替代方案:老 IP 库在处理实际数据时的天然局限
需要提前说明,任何 2019 年 7 月的数据,堆到今天都存在严重时效性偏差。IP 段会被回收、重新分配,运营商的出口 IP 池也在不停变化。如果你要问“如何判断一个 IP 是不是境外的”,拿 2019 年的库去判断 2026 年的某个地址,结果只能当作参考,不能作为严谨结论。
我实际测试过:用旧库查询国内部分云厂商的现网 IP,能匹配上的比例大概只有六成左右,其余大多因为网段调整而被标记为未知或错误。所以这份数据更适合当作历史镜像,或者用于测试解析逻辑,而不是生产环境的首选。如果用途是线上查询,建议找更新版本的 IP 库。
2. 核心细节解析与实操要点
2.1 压缩包内部结构:从文件命名到数据字段
假设你已经成功解压ip_ip.net 201907.zip,内部通常会有以下几个常见组成部分:
ip.txt或ip.csv:IP 段起始、结束地址及归属信息。ipip.net.dat或类似二进制文件:老版本 ipip.net 常用自定义格式的数据文件,需要用官方 SDK 或特定解析器读取。- 说明文档:包含数据更新时间、获取方式、字段说明。
如果是文本格式,行内容一般长这样:
1.0.1.0 1.0.3.255 中国 广东 广州 电信 1.0.4.0 1.0.7.255 中国 广东 广州 联通这种格式非常直观,也方便导入数据库。需要注意,不同的数据包之间字段分隔符可能不同,严格时用 Tab,有时候用英文逗号,甚至还有用|的。你在写解析脚本前,务必先看前几行判断分隔方式,否则会出现一整行只被读成一个字段的问题。
2.2 为什么解压会卡在密码上:ZIP 的两种加密方式
这里展开说下 zip 加密机制。老式兼容性较好的加密方式是 ZipCrypto,流密码加密,速度极快,但已知存在明文攻击漏洞。如果你手头同时有该 zip 内某个文件的未加密版本,或者能精确预测部分明文内容,恢复密码的时间和难度都会大幅下降。这种加密方式在 2019 年左右的压缩包里极其常见。
另一种是 WinZip 推广的 AES 加密,分 AES-128、AES-192、AES-256 三档。AES 加密安全性高很多,暴力破解效率低,需要用更专业的工具或显卡加速。判断 zip 使用的是哪一种加密,可以用 7-Zip 打开压缩包,看“加密方式”这一列;或者用命令行工具输出详细信息。如下:
7z l -slt ip_ip.net 201907.zip输出里会有一项Method = ZipCrypto Deflate或Method = AES-256 Deflate之类的字样。前者相对好处理,后者难度直线上升。
2.3 数据格式兼容性:为什么解压出来不等于能用
就算解压成功,也不代表你的系统能直接读取数据。很多人卡在“导入失败 caused by: invalid zip archive: could not find eocd” 这类报错上,但这个报错经常不是数据文件本身的问题,而是上层应用在读取 zip 时没有识别出文件末尾的 End Of Central Directory 结构。常见原因包括:zip 文件不完整、被传输中截断、或者根本不是标准 zip。
另一个常见的坑是文件编码。2019 年打包的数据文件如果是中文内容,且压缩时没有使用 Unicode 文件名编码,解压出来的文件名可能是乱码。在 Linux 下解压 Windows 压缩的文件时尤其常见。处理方式是解压后手动重命名,或者使用支持编码转换的压缩工具。
2.4 操作原则:不要一上来就动“破解”的念头
因为我看到热搜词里有“zip 压缩包密码破解工具”“zip 密码移除”这类高频词,所以想额外说一句:在动手前先确认自己有没有权限接触这份数据。如果是公司的数据包、朋友的分享、或者某系统的离线包,最好先询问来源,确认允许后再自行处理。自己拿实验数据学习加密原理完全没问题,但别拿它去做越权的事情。这不仅是技术风险,更是法律风险。
3. 实操过程与核心环节实现
3.1 第一步:拿到文件后先做信息收集,不要盲目解压
对ip_ip.net 201907.zip这个文件,建议按以下顺序检查:
- 查看文件大小:如果只有几十 KB,基本不可能是完整的 IP 库,可能是种子链接或说明文档。
- 用
file命令在 Linux 下先识别真实类型。 - 用 7-Zip 或 WinRAR 打开,不要急于“解压到当前目录”,先看列表。
在 Linux 下,可以这样:
file "ip_ip.net 201907.zip"正常情况下输出类似Zip archive data, at least v2.0 to extract。如果输出其实是HTML document或gzip compressed data,说明文件被改过扩展名或者下载页面没有真正保存文件。此时第一优先级是重新获取原始文件。
3.2 第二步:常规解压与常见参数选择
如果你的文件确实没有密码,直接解压即可。Linux 下用 unzip,Windows 下建议直接用 7-Zip,因为 7-Zip 对大文件和 UTF-8 文件名的兼容性更稳。
unzip "ip_ip.net 201907.zip"如果遇到乱码,可以尝试指定编码重新解压:
unzip -O GBK "ip_ip.net 201907.zip"或使用 7-Zip:
7z x "ip_ip.net 201907.zip"这一步最可能遇到的问题就是提示输入密码。如果此时你确实不知道密码,就进入到下一步判断加密方式。
3.3 第三步:判断是否需要破解以及选定工具
如果你只是需要这份 IP 数据,而且密码未知,可选的路线有三条:
第一,找原始分享页或说明文档里的密码提示。很多博主会把密码写在下载页的隐藏内容中,常见形式为“解压密码:www.xxx.com”或“密码是 2020”。这一步虽然傻,但成功率最高。
第二,用字典扫描常见密码。这适合当时压缩者使用简单密码的场景。比如工具fcrackzip在 Linux 下可以这样用:
fcrackzip -D -p password.txt -u "ip_ip.net 201907.zip"其中-D表示字典模式,-p指定字典文件,-u表示尝试解压校验结果。密码字典可以从知名的弱密码字典公开项目里找,但注意不要使用带敏感内容的素材。
第三,暴力破解。工具推荐John the Ripper加zip2john先把 zip 转换成哈希格式,再用 John 跑:
zip2john "ip_ip.net 201907.zip" > zip.hash john --wordlist=password.txt zip.hash如果是 4 位纯数字密码,用暴力方式很快;如果是 8 位随机大小写字母和数字,跑起来就是无底洞。遇到后一种情况,我个人建议放弃破解,去重新寻找文件来源更实际。
3.4 第四步:解压后用 Python 解析 IP 数据并做基础验证
拿到没有密码的ip.txt后,我一般会先用 Python 写个十几行的小脚本做快速解析,验证字段格式和行数,比如看一共有多少条记录,以及某几个已知 IP 是否能在库中找到归属地。
下面这个示例脚本,用 Python 标准库读取文本并按 Tab 分隔字段,然后对传入的 IP 地址做二分查找。这里的 IP 段没有使用真正的整数比较,而是将 IP 字符串拆成 4 个整数后比较前几段,适合快速预览。要把 IP 查询逻辑写得严谨,最终应该将 IPv4 转成 32 位整数,再用区间判断:
import ipaddress def ip_to_int(ip_str): return int(ipaddress.IPv4Address(ip_str)) def load_ip_ranges(file_path): ranges = [] with open(file_path, "r", encoding="utf-8") as f: for line in f: parts = line.strip().split("\t") if len(parts) < 5: continue start_ip, end_ip = parts[0], parts[1] info = parts[2:] ranges.append((ip_to_int(start_ip), ip_to_int(end_ip), info)) ranges.sort(key=lambda x: x[0]) return ranges def search_ip(ip_str, ranges): target = ip_to_int(ip_str) left, right = 0, len(ranges) - 1 while left <= right: mid = (left + right) // 2 start, end, info = ranges[mid] if target < start: right = mid - 1 elif target > end: left = mid + 1 else: return info return None if __name__ == "__main__": data = load_ip_ranges("ip.txt") print("total ranges:", len(data)) print(search_ip("114.114.114.114", data))这段代码的思路是先把所有 IP 段按起始地址排序,再用二分查找快速定位。对几十万条记录来说,查询耗时基本在毫秒级。如果你导入 MySQL 或 PostgreSQL,也可以构建成start_ip和end_ip两个整数列,并加索引,方便 SQL 查询。
3.5 第五步:把数据导入系统时的字段映射
多数日志分析系统、网络准入设备、Web 访问统计工具都支持自定义 IP 库导入。你需要的通常是一个标准 CSV 或 Data 文件,而不是 raw 文本。不同系统对“起始地址”“结束地址”“省份”“城市”“运营商”的字段顺序不太一样,所以导入前最好先看目标系统的字段模板。
我建过一个简化版导入表,大致如下:
| 字段 | 示例值 | 说明 |
|---|---|---|
| start_ip_str | 1.0.1.0 | 起始 IP 字符串形式 |
| end_ip_str | 1.0.3.255 | 结束 IP 字符串形式 |
| start_ip_int | 16777472 | 起始 IP 整数形式,用于快速索引 |
| end_ip_int | 16778239 | 结束 IP 整数形式 |
| country | 中国 | 国家或地区 |
| province | 广东 | 省份 |
| city | 广州 | 城市 |
| isp | 电信 | 运营商 |
如果目标系统只支持单一ip字段,不支持区间,你可能需要把每个 IP 段按掩码展开,但展开后数据量会变大很多,几百 MB 是常有的事。所以更加推荐保留区间判断逻辑,而不是挨个展开。
3.6 第六步:补充说明 2019 年老库的局限性
入库完成后,一定要在系统里保留“数据版本”和“更新时间”字段,方便和更新的 IP 库做对比,也方便后续追溯误判。如果某个 IP 查到归属地是“未知”,原因可能只是该 IP 段是之后几年才分配的,并不代表你的解析代码有问题,这一点在排查问题时非常有用。
4. 常见问题与排查技巧实录
4.1 解压时报错 invalid zip archive: could not find eocd 怎么办
这个报错字面意思是找不到 zip 的中央目录结尾记录。常见原因有三个:文件下载不完整、文件其实是自解压或分卷格式、文件被二次修改。
排查顺序:
- 用
ls -l查看文件大小,对比下载页面标注的大小。 - 用
file命令识别文件类型。 - 用 7-Zip 菜单里的“打开压缩包”而不是“解压到当前目录”试试。
如果文件是分卷压缩的一部分,你会看到类似ip_ip.net 201907.z01、ip_ip.net 201907.zip这样的命名。需要把所有分卷放在同一目录下,再解压最末一个分卷。
4.2 解压后文件名乱码
这里需要使用unzip -O GBK或者用 7-Zip 的“以 UTF-8 文件名解压”选项。还有一种更粗暴的办法:先全部解压出来,然后再按文件内容判断到底哪个是真正的数据文件。
4.3 暴力破解跑了一天没有结果,还值得继续吗
如果密码超过 8 位且包含大写字母、小写字母、数字、符号中三种以上,纯 CPU 环境基本不现实。建议先停止,转头做三件事:翻当时下载页面和下载工具的历史记录、问文件提供者、用strings或十六进制查看器看一眼 zip 文件末尾是不是有其他人留下的注释或微信号之类的提示。曾经有朋友用 winhex 打开 zip,看到末尾备注“密码是群号”的例子,这种事听起来很笨,但真实世界里特别常见。
4.4 如何验证 IP 数据是否完整和正确
可以抽样几组已知 IP 去查。比如114.114.114.114、223.5.5.5、8.8.8.8。如果前两个能查到和预期相符的本地运营商信息,说明库内容基本正确;如果8.8.8.8也对应到中国某地,说明这个库可能被修改过或者字段顺序判断错误,需要再检查解析脚本。
4.5 解密工具与命令速查
为了便于操作,我整理了一份常用工具表:
| 工具 | 适用场景 | 常用命令示例 | 备注 |
|---|---|---|---|
| 7-Zip | 文件列表查看、常规解压 | 7z x "ip_ip.net 201907.zip" | 支持格式多,建议首选 |
| unzip | Linux 下常规解压 | unzip "ip_ip.net 201907.zip" | 注意文件名编码 |
| fcrackzip | ZipCrypto 密码破解 | fcrackzip -D -p pw.txt -u "ip_ip.net 201907.zip" | CPU 密集,字典速度较快 |
| hashcat | 高性能 GPU 破解 | zip2john "ip_ip.net 201907.zip" > zip.hash后转 hashcat 格式 | 需要显卡驱动和哈希匹配 |
| Python zipfile | 脚本自动化解压 | 见下方代码 | 适合批量场景 |
Python 里的基础解压脚本:
import zipfile zf = zipfile.ZipFile("ip_ip.net 201907.zip") try: zf.extractall(path="./output", pwd=b"password_here") except RuntimeError as e: print("解密失败或密码错误:", e)4.6 实测一个典型坑:文件是 ASCII 码还是二进制
有一次我拿到类似命名的文件,用 unzip 解压时提示“bad zipfile offset”,检查发现这个 zip 其实是在 macOS 上使用默认归档工具生成的,里面包含了一些__MACOSX隐藏目录,文件结构没有损坏,只是带了一堆无用元数据。处理方法是解压后忽略这些隐藏目录,或者用 7-Zip 指定-xr!__MACOSX排除掉:
7z x "ip_ip.net 201907.zip" -xr!__MACOSX如果你也看到解压出来有两个目录,一个正常一个带__MACOSX,不是你的文件有毒,只是压缩方的操作系统不同。
5. 用这份数据做场景化扩展
5.1 做网络实验:TCP/IP 转发分析与 ARP 报文字段对照
如果你刚学了 TCP/IP 协议,想在 GNS3 或 Wireshark 里做报文分析,这份 2019 年的 IP 库能帮上一个小忙:在抓包分析时,如果内网有多个不同网段的模拟地址,你可以用库里的国外网段模拟“跨运营商/跨地域”访问,再结合 Wireshark 的 IP 归属地插件自定义路径,将抓包结果的源和目标地址翻译成“中国广东广州电信”这样的可读标签。这种情况下,数据版本旧反而无伤大雅,因为你只是看相对差异,又不是真在做生产路由。
5.2 做历史数据分析:疑似黑产 IP 的早期归属地还原
大数据风控场景中,有人会拿现网恶意 IP 去回溯历史库,看这个地址在更早时间点属于哪个地区或运营商。用 201907 这份数据,你至少能知道该地址在 2019 年时是否属于某个地理区域。但切记,单独一条“当时地区”不能作为封禁标准,只能作为线索,需要结合业务日志、端口扫描记录、注册时间等维度综合判断。
5.3 做 Python 学习:解压、解析、二分查找一整套流程
这段实操对新手非常友好。你可以把任务定义为“输入任意 IPv4,输出该地址在 2019 年 7 月时可能的归属地”。实现流程是:解压 zip -> 读文本 -> 构造区间 -> 二分查找 -> 展示结果。整套代码不超过 60 行,却能覆盖文件处理、异常处理、算法基础、命令行操作等多个知识点。如果你正在学 Python,拿它练手比刷题更有成就感。
6. 最后再分享一点经验
我自己在处理旧资料时,经常遇到“保存下来的压缩包怎么解不开了”的窘境。几十个文件里总有那么一两个是加密的,或者文件在反复传输中被截断,或者压缩包中的文件格式与当年官方文档描述不一致。现在我会先建立一个“历史文件处理清单”,把文件名、来源、MD5、下载时间、是否加密、解压工具与参数记录在一起。这看起来会增加一点工作量,但对长期收集和回溯非常有用。
对这份ip_ip.net 201907.zip,我想强调的并不是“2019 年的数据已经不能用”,而是它作为一种历史数据样本,刚好能帮你串联起 IP 库解析、ZIP 文件处理、密码工具选择、数据库导入等多个技能点。你如果能完整走一遍从拿到压缩包到成功查询到指定 IP 归属地的流程,以后再遇到各种来历不明的数据包,都会比现在从容得多。
本文还有配套的精品资源,点击获取