steponeerror/ip-radar
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
原文
IP Radar
English | 简体中文

把 60 个公开情报源搬回家:查任何 IP,拿一份全面的画像——一句话结论、逐源证据、置信度,加上地理·城市·ASN、云/托管、代理/VPN/Tor、服务身份,一次看全。一条命令,自己部署。
演示模式 —— 数据源管理与更新已禁用,查询功能完整可用;自部署解锁全部能力。
![]() ☠️ 恶意 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 出各源并排结论,批量也行
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星链计划

