Skip to content
项目

steponeerror/ip-radar has 38 GitHub stars and 1 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-09 20:08 UTC. Last push 2026-11-05.

这些数字如何统计

One verdict per IP, in plain words — evidence, confidence, geo & ASN fused from 60 public intel sources. 53/60 need no API key. One command, fully self-hosted.

可以做什么

  • Works out of the box — first start downloads and builds every keyless feed into millions of records (live count: /api/db-status).
  • Cold start doesn't block — the container opens within seconds; queries unlock only when the keyless feeds are fully built. Never a verdict on half a dataset.
  • A verdict, not a pile of lists — one line of conclusion per IP, per-source evidence on the table, 0-100 confidence (log-odds Bayesian fusion: source reliability → logit coefficients, 60-day half-life decay on threat assertions, cross-source corroboration; 0 = no evidence, not innocence; scalar fields don't decay).
  • Geo · City · ASN — dual city sources (GeoLite2 + DB-IP), iptoasn for the ASN, plus CN ISP classification incl. HK/MO/TW.

实测星标增长

24小时
0
7天
更新延迟
15天
更新延迟
1个月
更新延迟

各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。

README.zh-CN.md

原文

logo IP Radar

English | 简体中文

IP Radar — 自托管的 IP 情报

把 60 个公开情报源搬回家:查任何 IP,拿一份全面的画像——一句话结论、逐源证据、置信度,加上地理·城市·ASN、云/托管、代理/VPN/Tor、服务身份,一次看全。一条命令,自己部署。

License: AGPL v3 Docker Python 3.12+ FastAPI React 19

Live Demo

演示模式 —— 数据源管理与更新已禁用,查询功能完整可用;自部署解锁全部能力。

恶意 IP 查询结果
☠️ 恶意 IP:逐源证据 + 置信度结论
干净 IP 的地理富化
🌱 干净 IP:地理 · 城市 · ASN 富化

🚀 在线演示 ipradar.huxiao0207.dpdns.org —— 点下面的示例,直接在 Demo 里看结果:
☠️ 恶意 IP · 🕵️ Tor/VPN 出口 · 🌱 干净 IP

快速开始

Docker(自托管推荐)

一个容器装下全部(FastAPI 后端 + 构建好的前端)。Docker Compose 要 v2.24+(docker compose version 看一眼)。

git clone https://github.com/steponeerror/ip-radar.git
cd ip-radar
docker compose up -d --build

打开 http://127.0.0.1:8000。首次启动数秒内容器即可访问——页面顶部横幅会实时展示免密钥源(除 7 个密钥源外全部,含地理/城市/ASN、主要封禁列表与云网段)的下载/构建进度,构建完成后查询自动解锁;之后每次启动都从 ipradar-data 卷秒级加载。

想开 7 个密钥源(ipinfo_lite / abuseipdb / otx / otx_subscribed / ip2proxy / threatfox / urlhaus,共 5 个密钥:OTX 两源共用、abuse.ch 两源共用)?把密钥写进 .env.local(已 gitignore,盖过 .env),或粘贴进管理台 Sources 页的源 key 字段(页面填的密钥下一次刷新即生效,无需重启):

cp .env .env.local   # 编辑 .env.local 填入密钥
docker compose up -d

五个变量,去哪申请(.env 里有同样的注释和空样例行):

源 变量 申请
ipinfo_lite IPINFO_TOKEN https://ipinfo.io/account/token
abuseipdb ABUSEIPDB_API_KEY https://www.abuseipdb.com/account
otx OTX_API_KEY https://otx.alienvault.com/settings
otx_subscribed OTX_API_KEY(与 otx 共用) https://otx.alienvault.com/settings
ip2proxy IP2PROXY_TOKEN https://www.ip2location.com/
threatfox / urlhaus ABUSECH_AUTH_KEY(两源共用) https://auth.abuse.ch/ 注册 Auth-Key;密钥在导出 URL 路径内,日志已打码

npm/pip 下载慢(国内网络常见)——传镜像 build-args:

docker compose build --build-arg PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple \
                      --build-arg NPM_REGISTRY=https://registry.npmmirror.com

注意:

  • 端口默认只绑 127.0.0.1;要上局域网/公网,改 docker-compose.yml 的 ports——同源网页使用免 key;程序化/API 调用需要 /admin 签发的 API key(在 docker-compose.yml 的管理员 env 注释块里解锁)。
  • 反代部署时设置 IP_RADAR_PROXY_HEADERS=1(受信代理默认 172.16.0.0/12,可用 IP_RADAR_FORWARDED_ALLOW_IPS 覆盖,见 docker-compose.yml)——否则 per-IP 限流只能看到代理 IP。
  • 各源有自己的使用条款,商用责任自负(本仓库的 AGPL-3.0 只管代码)。
  • 升级:git pull && docker compose up -d --build,数据卷原地保留。
  • 磁盘:给数据卷留够 ≥6 GB。

docker compose up 之后的一切——读懂结果页、管理台、完整 API、备份/升级/告警 runbook——都在**《使用手册》**(MANUAL.zh-CN.md / English)。

桌面伴侣

IP Radar Desktop —— 托盘伴侣
🖥️ 托盘常驻 —— 热键一按,剪贴板 IP 出各源并排结论,批量也行

IP Radar Desktop 把同样的查询搬到桌面:常驻系统托盘,全局热键一按,剪贴板里的 IP 直接出各源并排结论,整份 IP 清单一次性批量查。Linux / macOS / Windows 安装包在 Releases 页。

特性

  • 开箱即用,除 7 个密钥源外全部免密钥 —— 首次启动自动下载构建,数百万条记录入库(确切数量以 /api/db-status 实测为准);剩下 7 个 🔑 源想开的话,密钥填法见快速开始。
  • 冷启动不挡路 —— 容器数秒就能打开,免密钥源的下载/构建进度在页面顶部横幅实时滚动,建完查询自动解锁——绝不拿着半份数据先给结论。
  • 一份结论,不是一堆列表 —— 单 IP 一句话结论,逐源证据摆给你看,0-100 置信度(log-odds 贝叶斯融合:源可靠性转对数几率系数、威胁断言按 60 天半衰期衰减、交叉佐证;0 = 无证据,而非清白;标量字段不衰减,city/ip_range 保留原语义)。
  • 地理 · 城市 · ASN —— GeoLite2 + DB-IP 两票给城市,iptoasn 给自治域,CN ISP 归属(含港澳台)也认得。
  • 代理 · VPN · Tor · CDN · 云,一眼认出来 —— 实检代理列表、VPN 网段(含 NordVPN、ProtonVPN)、Tor 出口、三大 CDN 边缘、五家云厂商托管网段(AWS · Google · Azure · Oracle · Alibaba,单源五 feed、逐家健康可见),都标得清清楚楚;知名基础设施还会亮出服务身份(8.8.8.8 → DNS · Google Public DNS)。
  • IPv6 也能查 —— 裸 v6 / 小段 v6 CIDR 直接查,地理·城市·ASN·VPN·CDN·封禁段对 v6 生效;地理/城市/ASN、云厂商网段、CDN 边缘、DROPv6 等源原生覆盖 v6;多数威胁列表上游本就无 v6 数据,如实显示无记录。
  • 日间/夜间主题切换 —— 明暗一键切换,选择自动记忆、首帧前恢复不闪屏。
  • 一个容器跑全栈,内存自己看着办 —— docker compose up -d --build 就有;并发数按宿主机内存自动升降(吃紧调低、宽裕回升),后台自动刷新按源错峰:日更源每天 2 次、周更源每周 1 次,各源固定时刻错开。
  • STIX 2.1 导出 —— /api/lookup/{ip}/stix 一键导出;镜像自带 stix2(requirements 预装),开箱即用。

架构

一句话:公开源自动下载 → 逐源解析分类入库(LMDB)→ 查询时多源加权融合 → FastAPI + React 界面。

flowchart TD
    A["Public sources<br/>(keyless auto + 7 keyed)"] --> B["Cold-start download /<br/>30-min scan · per-source 12h staggered refresh slots"]
    B --> C["Per-source parsers<br/>(classification pipeline)"]
    C --> D["LMDB store<br/>(named volume · mmap)"]
    D --> E["Fusion at query time<br/>(log-odds · corroboration · decay)"]
    E --> F["FastAPI"]
    F --> G["React UI"]

存储、融合、查询,全在你本地——你的查询不发给任何第三方。

使用

打开 http://127.0.0.1:8000,随手输一个 IP:结论、逐源证据、地理/ASN 一起回来。API 也能直接用。程序化调用需 API key——先在 docker-compose.yml 解锁 admin env 注释块并重启,再到 /admin 签发;同源网页免 key;程序化调用加 -H "Authorization: Bearer <key>"。

# 核心查询(需 key,见上)
curl -s http://127.0.0.1:8000/api/lookup/1.12.0.1
# → {"ip":"1.12.0.1","country":{"value":"CN",..},"city":{"value":"Guangzhou",..},"asn":{"value":132203,..},"classifications":{..},"attributes":{..}}

# 记录数与状态
curl -s http://127.0.0.1:8000/api/db-status

其余管理端点(sources / eval / update-db / tasks / events 等)在《使用手册》API 参考里逐个列出;UI 上点一下也能触发刷新。仍勿将端口暴露给不受信网络。

安全须知

  • 同源 web 层是浏览器便利,不是鉴权边界:裸 HTTP 客户端可任意伪造 Host/Origin。端口可达不受信网络时,真正的护栏是 API key(/admin 签发)或校验 Host 的反代(Caddy/Nginx 站点匹配)。
  • 源目录(/api/sources)与 eval 成绩单(/api/eval*)仅管理员可用——在 /admin 登录后访问。
  • /docs / /redoc / /openapi.json 默认关闭;设 IP_RADAR_ENABLE_DOCS=1 开启(开发便利——公网部署保持关闭)。

公开演示守卫(可选)

面向任何公网暴露实例的可选守卫中间件,对匿名访客隐藏写入/内部面。三个旋钮默认全关(自托管零行为变化):IP_RADAR_PUBLIC_DEMO=1 开启;IP_RADAR_DEMO_ADMIN_IPS 与 IP_RADAR_DEMO_TRUST_XFF=1 控制维护者例外通道(绕过演示限制)。完整端点语义、豁免规则与 XFF 信任安全前提见 deploy/README.md。

Fail2ban 集成:拉黑前先问一句

scripts/fail2ban/ipradar.conf 提供一个 fail2ban action:ban 之前先查本地 IP Radar 的结论——确认恶意(confidence ≥ 70 可调)则记入长封名单;CDN/基础设施边缘直接跳过 ban 留日志,不再误封 Cloudflare。装法与参数见 scripts/fail2ban/README.md。

Graylog 集成:日志富化

用 Graylog 内置 Lookup Table(HTTP JSONPath adapter)把日志里的源 IP 换成国家、ASN 和融合后的威胁结论(threat.verdict / threat.confidence)——无插件、查询不出网、无限量。配置步骤与 pipeline 规则见 integrations/graylog/README.md。

Wazuh 集成:告警富化(VirusTotal 集成的本地替代)

integrations/wazuh/custom-ipradar 把每条带 IP 的 Wazuh 告警富化为 ECS threat.indicator 跟进告警——本地无限量查询,不把告警 IP 送给第三方。装法、ossec.conf 配置与告警样例见 integrations/wazuh/README.md。

用 AI 扩展数据源

仓库还自带三个 AI agent skills(.pi/skills/)——用支持项目级 skills 的编码代理(如 pi),一句话就能让 AI 替你把源加上:

Skill 什么时候用 一句话示例
discover-intel-sources 还没想好加哪个源,先要候选清单与评估 “帮我找几个值得加的威胁情报源”
add-intel-source 已选定某个源,要完整接入 “把 GreyNoise 加进来”
manage-intel-source 管理现有源:体检、更新、替换 “看看各源的健康状况”

数据源与致谢

下面每一份数据都属于它的提供方——感谢它们一直开放、一直维护。🔑 = 要免费/付费密钥(去哪填见快速开始);* = 聚合源,荣誉归于上游列表的维护者。

威胁信誉

源 提供方 贡献 🔑
abuseipdb AbuseIPDB Most-reported attacker IPs 🔑
otx AlienVault OTX Community threat pulses (IPv4 indicators) 🔑
otx_subscribed AlienVault OTX Subscribed pulse library (curated honeypots / C2 lists) 🔑
spamhaus Spamhaus DROP/EDROP hijacked ranges
stopforumspam StopForumSpam Forum-spammer IPs (365-day window, report counts)
threatfox abuse.ch Malware IOC feed (CSV/ZIP) 🔑
urlhaus abuse.ch Malicious URLs → IPs 🔑
tweetfeed * TweetFeed Crowd-sourced IOCs from X/Twitter
ipsum * IPsum Daily compile of many public blocklists
firehol * FireHOL Level1/2 + abusers/proxies/webserver 子列表
blocklist_de * Blocklist.de 10 attack-type sublists + aggregate
emerging_threats Proofpoint ET Provenance-curated firewall blocklist
binarydefense Binary Defense Honeypot attacker banlist
bruteforce BruteForceBlocker SSH brute-force attacker IPs
ciarm CINS Army Passive-reputation bad-guys list
greensnow GreenSnow Compromised-host blocklist
dataplane Dataplane.org Rolling 7-day sensor signals (merged)
dshield DShield Top-attacker /24 blocks (attack counts)
f3csystems f3cSystems Honeypot scanner blocklist (Sekoia sensors)
reportedip ReportedIP WordPress-honeypot community reputation
siberkapan SiberKapan Turkish honeypot-network sensor blocklist
threatcluster ThreatCluster Curated high-confidence malicious IPs
turris_greylist Turris Sentinel Distributed-router greylist (protocol probes)
drb_ra * C2IntelFeeds Aggregated C2 IPs (30-day hunts)
knock_knock Knock-Knock 13-protocol honeypot attacker blocklist (month window)
rtbh RTBH.com.tr Turkish 54-sensor DDoS-source RTBH list
scanner_ranges MISP warninglists · Palo Alto Xpanse 扫描器厂商自报的网段——66 份 MISP *-scanning 列表 + Xpanse 官方页
sw_scanners ShadowWhisperer/IPs 自采策展的扫描器 IP 清单(逐行带厂商名,日更)
sw_threats ShadowWhisperer/IPs 自采策展的威胁 IP 清单(逐行带类别和首次出现时间)
myip_ms myip.ms 自有爬虫全网抓取加用户举报汇成的活跃黑名单(10 天滚动窗)
sblam Sblam! 表单垃圾黑名单(表单陷阱传感器网络)
data_shield * duggytuxy/Data-Shield 每日聚合的 IPv4 封禁清单(约 9 万条裸 IP)
ziyadnz * ziyadnz/threat-intel-ip-feeds 把约 10 个公开源聚成每日逐 IP 清单(每行保留出处)
cps_collected_iocs * CriticalPathSecurity CPS 公司自有 IOC 的汇总(裸 IP 清单)
malicious_ip * romainmarcoux/malicious-ip 五个分片合并的封禁清单(约 100 万条唯一 IP,逐小时重建)
ustc_blackip USTC 中国科大的校园自保黑名单(运行约 15 年,解封要人工复议)

地理与 ASN

源 提供方 贡献 🔑
geolite_city MaxMind GeoLite2 City / geo per IP
dbip_city DB-IP City-lite — 2nd city voting source
iptoasn IPtoASN ASN + AS-name ranges
cn_isp clang.cn ISP ranges China ISP classification (mainland + HK/MO/TW)
ipinfo_lite IPinfo Country / ASN / ranges enrichment 🔑
rir_delegated AFRINIC · APNIC · ARIN · LACNIC · RIPE NCC 五大 RIR 每日发布的注册分配文件——每段 IP 的分配日期、注册国、状态
rir_abuse RIPE NCC · AFRINIC 注册库里的 abuse 投诉邮箱(按网段,来自 RPSL 全量导出)
caida_asorg CAIDA ASN 到组织名的映射(月度快照,查询时拼接)

网络资产

源 提供方 贡献 🔑
ip2proxy IP2Location PX2 LITE proxy ranges 🔑
proxyscrape ProxyScrape Open proxy IPs
tor_exits Tor Project Tor exit node addresses
danmeuk_tor dan.me.uk Full Tor relay list (~11k nodes) — second is_tor witness
x4bnet_vpn X4BNet VPN ranges
nordvpn NordVPN NordVPN server ranges (mirror)
protonvpn ProtonVPN ProtonVPN server ranges (mirror)
hookzof hookzof Live-checked SOCKS5 proxies
thespeedx TheSpeedX Live-checked HTTP proxies
cdn_edges CloudFront · Cloudflare · Fastly CDN edge ranges
cloud_ranges AWS · Google · Azure · Oracle · Alibaba 云 / 托管网段 —— 单一来源、五家各一份订阅文件(feed);部分失败容忍(单家挂保留旧快照)
infra_services curated Public DNS resolvers / NTP infrastructure (root servers moved to root_servers)
root_servers IANA IANA root hints (named.root)
dns_public DNSCrypt Community public DNS resolver endpoints (public-resolvers.md, sdns stamps decoded)
cloudzy Cloudzy(CPS 镜像) Cloudzy 的 VPS 托管网段(资产陈述,不作指控)
anycast_census UT-Dallas Anycast Census 主动测量得到的任播 /24 前缀(约 4.1 万条,混播前缀已剔除)

开发

dev 模式(前端 :5173 热更新,后端 API 走 :8000):

./dev.sh

想分开跑也行(注意 --host 0.0.0.0 会把 API 暴露给局域网/公网——网页访客免 key 可查、程序化调用需 key,仅在清楚后果时使用):

# backend(首次:python3 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt)
cd backend && source .venv/bin/activate
uvicorn main:app --reload --host 0.0.0.0 --port 8000

# frontend
cd frontend && npm run dev

类生产(构建前端,一切都走 :8000):

./start.sh

评估层

评估层并排给出两种可靠性数字:声明的 r(逐源手工设定,生产权威)与实测 源间一致率 θ(由各源互相印证的程度推算出的可靠性参考值,仅供参考,不是准确率)。θ 从不是准确率声明, 也从不自动写入生产权重—— 采纳实测值必须走一个人审 PR,并在 diff 里引用评估报告。

在 backend/ 下用 python -m ipdb._eval 驱动:--audit(转载关系审计:源与源之间谁抄了谁,以历次保存的模型文件为证据,只报告不干预, 仅供参考)、--anchors(已知答案回归检查,任一失败退出码 1)、 --dsem(DS-EM 公平对决:市场 vs 声明 r vs π̂;π̂ = 评估程序从各源相互印证结构估出的 真实比例估计,仅供参考)。admin 控制台的数据源页同样并排展示这两种 数字——实测源间一致率 θ(90% CI)与各源声明 r。

测试

首次先装依赖(含 pytest / stix2):

# backend(在 backend/ 下)
cd backend
[ -d .venv ] || python3 -m venv .venv
.venv/bin/pip install -r requirements-dev.txt
.venv/bin/python -m pytest -q

# frontend(在 frontend/ 下)
cd frontend && npm test

版本通知与一键更新

git pull && docker compose up -d --build

数据卷原地保留,升级无数据迁移。页面顶部横幅会提示新版本(「检查更新」手动查询)并给出这条命令;取消注释自更新挂载后横幅上还会出现「立即更新」按钮。选配挂载的安全注意(docker.sock)、绝对路径要求、维护者发版坑:见《使用手册》运维章。

备份与恢复

全部状态都在同一个 named volume(ipradar-data → /app/data):各源原始下载、LMDB epoch 目录(每次重建生成的新版本目录)及其伴随文件(.ptr/.count 等 sidecar,即数据库旁边的状态小文件)、SQLite 双库 auth.db/alerts.db。重建从不原地写,停容器拷卷即得完整一致的备份。停机/热拷两种做法、恢复核对步骤、什么真正不可再生:见《使用手册》备份与恢复。

来源告警(可选)

通知默认静默。把 IP_RADAR_ALERT_URLS(任意 environment 块或 .env.local)设为逗号分隔的 apprise 风格 URL(mailto:、Discord/Telegram/Lark webhook),某源停止更新、持续失败或库加载失败时会收到一条合并消息;重启生效。详见《使用手册》源告警。

许可证

© 2026 steponeerror,采用 AGPL-3.0 授权;各情报源有自己的使用条款。

引用、魔改或 fork 本项目时,请遵守 AGPL-3.0:保留本许可与版权声明、标明你修改过的部分;基于本项目的衍生作品对外提供网络服务时,也须以 AGPL-3.0 开源。如果这个项目对你的研究、文章或产品有帮助,欢迎引用:https://github.com/steponeerror/ip-radar。

关于这份代码

这个项目是 vibe coding 写出来的。它必然有这样那样的问题;请多包涵,也欢迎到 Issues 告诉我哪里不对。

后记

某 TJ 威胁情报公司:工作氛围友好,强度也不高——只是欠了我大半年的工资,劳动仲裁之后,依然没有支付。

说实话,我对它并没有恨意,只是作为工作者立场不同。同时公司的处理方式并不正确。

只是,我用正常账号访问公司的免费基础服务,你把我的号封了——这就有点离谱了吧。

本项目致力于维护劳动者的合法权益,同时保证人人都有基础的 IP 情报可用。

404星链计划

IP Radar 现已加入 404星链计划

友情链接

探索相关项目