Token导航 LogoToken导航TokenDH.com
Peer Glass logo
运维云端stdio官方级别未说明来源级核验

Peer Glass

MCP Server

PeerGlass是一款互联网资源智能查询工具,通过RDAP协议同时查询全球五大区域互联网注册管理机构(RIRs)的数据,支持RPKI验证、BGP路由检查、历史分配时间线追踪、IXP对等数据发现及网络健康监控,可通过自然语言或REST API访问。

工具数

42

提示词数

0

GitHub Stars

1

资源数

0
PythonClaude云端部署Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

duksh

提供方

duksh

最后核验

2026/5/17 20:23

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install -e .

详细介绍

🔍 PeerGlass——互联网资源智能

PeerGlass Branding

协议说明: PeerGlass使用 RDAP (注册数据访问协议-- RFC 7480–7484)。RDAP(RFC 7480–7484)是IANA授权的JSON继承者 传统纯文本WHOIS。 你看到的地方 *“历史名人”* 在源代码或API响应中,即 RIPE-Stat自己的端点名称——这不是我们的协议选择。

查询全部 5个全球区域互联网注册机构 同时使用RDAP, 通过以下方式验证路线 资源公钥基础设施,检查 边界网关协议 路由可见性,跟踪已满 历史分配时间表,发现 IXP对等数据 通过PeeringDB, 和监视器 网络健康 -全部来自Claude中的自然语言或通过REST API。

______________________________________________________________________

5个RIR是什么?

把互联网的IP地址空间想象成一个全球土地登记处。 IANA(根)将大块委托给5个区域机构:

RIR地区国家
🌍 非洲裔非洲54
🌏 亚太互联网信息中心亚太地区56个经济体
🌎 美国网络地址注册管理组织北美美国、加拿大、加勒比海
🌎 花边拉丁美洲和加勒比地区33
🌍 成熟的NCC欧洲、中东、中亚75+

______________________________________________________________________

快速开始

安装

git clone https://github.com/duksh/peerglass
cd peerglass
pip install -e .

配置MCP客户端(Claude和其他人)

PeerGlass作为标准MCP stdio服务器运行(mcp.run()server.py), 因此,任何兼容MCP的AI客户端都可以使用它,而不仅仅是Claude Desktop。

对于Claude Desktop,编辑 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) 或 %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "peerglass": {
      "command": "peerglass",
      "args": []
    }
  }
}

如果 peerglass 不在您的PATH中,请使用:

{
  "mcpServers": {
    "peerglass": {
      "command": "python",
      "args": ["/full/path/to/peerglass/server.py"]
    }
  }
}

重新启动克劳德桌面。全部 42工具 立即可用。

启动REST API

uvicorn api:app --host 0.0.0.0 --port 8000 --reload

交互式文档:http://localhost:8000/docs

启动Web UI

cd ui
npm install
npm run dev        # Dev server at http://localhost:5173

对于生产构建:

cd ui
npm run build      # Output in ui/dist/

VITE_API_BASE_URL 指向您的PeerGlass API部署:

VITE_API_BASE_URL=https://api.peerglass.io npm run build

______________________________________________________________________

示例查询(Claude中的自然语言)

第1阶段——注册表查找:

"Who owns the IP address 185.220.101.1?"
"What is the abuse contact for 8.8.8.8?"
"Who is AS13335 registered to?"
"Are all 5 RIR RDAP servers online right now?"

第2阶段——路由安全:

"Is the route 1.1.1.0/24 via AS13335 RPKI valid?"
"Is 8.8.8.0/24 currently visible in the global BGP table?"
"What prefixes is AS15169 (Google) announcing right now?"
"Find all internet resources registered to Cloudflare globally."

第三阶段——历史情报:

"Show me the full registration history of 8.8.8.0/24."
"Has the prefix 192.0.2.0/24 ever been transferred between organizations?"
"Give me the global IPv4 exhaustion stats for all 5 RIRs."
"Show me the prefix hierarchy for 1.1.1.0/24 — parent blocks and sub-assignments."

第4阶段——对等、IXP、健康和监测:

"Who does AS13335 (Cloudflare) peer with at internet exchanges?"
"List all IXPs where Google has a presence."
"Is the network for 1.1.1.0/24 currently healthy — any ROA issues or BGP anomalies?"
"Monitor AS13335 for changes since last baseline."

第5阶段——DNS智能:

"What DNS records does cloudflare.com have?"
"Is the DNSSEC chain valid for google.com?"
"Check if 1.2.3.4 is on any spam blocklist."
"Audit the email security posture of example.com."
"Has my DNS change for api.example.com propagated globally yet?"

第6阶段——TLS、证书和威胁情报:

"When does the TLS certificate for cloudflare.com expire?"
"Show me all certificates ever issued for *.example.com."
"Is 198.51.100.1 flagged as malicious — what ports and CVEs does Shodan see?"
"What hostnames has the IP 1.2.3.4 served historically?"

______________________________________________________________________

所有42个MCP工具

第1阶段——注册表查询

工具描述缓存TTL
rir_query_ip查询所有5个RIR的IP地址(并行)1小时
rir_query_asn查询ASN的所有5个RIR(并行)1小时
rir_get_abuse_contact查找全球任何IP的滥用联系人1小时
rir_server_status健康检查所有5台RDAP服务器实时
rir_cache_stats查看查询缓存状态和TTL实时

第2阶段——路由智能

工具描述缓存TTL
rir_check_rpki验证前缀+ASN的RPKI/ROA状态15分钟
rir_check_bgp_status检查前缀或ASN的BGP可见性5分钟
rir_get_announced_prefixes列出ASN的所有BGP公布前缀5分钟
rir_audit_org审核组织的所有IP/ASN资源6小时

第三阶段——历史情报

工具描述缓存TTL
rir_prefix_history任何前缀或ASN的完整所有权时间表12小时
rir_detect_transfers检测跨组织/跨RIR资源转移12小时
rir_ipv4_stats全球IPv4/IPv6/ASN仪表板+可选的委托IPv4阻止列表(include_blocks,筛选器,分页)24小时
rir_prefix_overview前缀层次结构:父、子、BGP状态1小时

第4阶段——对等、IXP、健康和监控

工具描述缓存TTL
rir_peering_infoASN的PeeringDB对等数据+BGP邻居1小时
rir_ixp_lookup在全球范围内搜索互联网交换点6小时
rir_network_healthRPKI+BGP+RDAP健康综合检查5分钟
rir_change_monitor检测自上次基线以来的变化(增量报告)实时

第5阶段——DNS智能

工具描述缓存TTL
peerglass_dns_resolve具有RDAP IP相关性的DNS解析(A/AAAA/PTR/MX/TXT/NS…)5分钟
peerglass_dns_enumerate完整DNS记录枚举——一次调用中的所有类型+SPF/DMAC提取5分钟
peerglass_dns_dnssecDNSSEC信任链验证(安全/不安全/虚假/不可撤销)5分钟
peerglass_dns_dnsbl并行对30个RBL(Spamhaus、Barracuda、SORBS…)进行DNS阻止列表检查15分钟
peerglass_dns_email_security电子邮件安全审计:SPF、DMARC、DKIM、MX、BIMI+风险评分15分钟
peerglass_dns_propagation同时跨10个全局解析器进行DNS传播检查实时

第6阶段——TLS、证书和威胁情报

工具描述缓存TTL
peerglass_tls_inspectTLS证书检查:主题、SAN、过期、密码套件、HSTS1小时
peerglass_ct_logs通过crt.sh搜索证书透明度日志--发现所有颁发的证书6小时
peerglass_threat_intel威胁情报:Shodan InternetDB(开放端口、CVE)+GreyNoise(分类、风险评分)15分钟
peerglass_passive_dns通过RIPE统计的被动DNS历史记录——随着时间的推移,哪些IP/主机名被关联了12小时

第7阶段——BGP深度

工具描述缓存TTL
rir_check_irr通过IRRExplorer验证IRR路由对象——检查RIPE/RADB/ARIN/APNIC/LACNIC的一致性1小时
rir_detect_route_leakBGP路由泄漏检测——识别无谷违规和多源异常5分钟
rir_looking_glass通过RIPE RIS的BGP观察镜——来自全球有利位置的真实AS路径5分钟
rir_route_stability路线襟翼和稳定性分析——状态变化、正常运行时间百分比、稳定性评分15分钟

第8阶段——人道主义和危机情报

工具描述缓存TTL
peerglass_shutdown_detect国家BGP关闭检测——比较当前前缀计数与基线5分钟
peerglass_monitor_register注册关机/更改事件的webhook警报实时
peerglass_shutdown_timeline具有SHA-256完整性哈希的历史BGP关闭时间线(适用于联合国报告)1小时
peerglass_dns_censorshipDNS审查指纹识别——检测NXDOMAIN注入、IP中毒、DPI阻止10分钟
peerglass_satellite_connectivity卫星互联网跟踪——星链、Viasat、OneWeb BGP存在15分钟
peerglass_country_chokepoints国家互联网瓶颈地图——关键交通提供商,弹性评分6小时
peerglass_ooni_reportOONI审查措施——封锁域名、Tor可访问性、规避工具30分钟
peerglass_country_health综合国家互联网健康仪表板——来自BGP+DNS+OONI+卫星的0-100分5分钟

第9阶段——高级平台

工具描述缓存TTL
rir_as_relationships通过CAIDA AS-Rank API进行AS关系分类(提供商/客户/同行)7天
peerglass_geo_lookup通过MaxMind GeoLite2 City进行GeoIP富集(需要 PEERGLASS_GEOIP_DB 环境变量)24小时
peerglass_atlas_traceRIPE Atlas从全球有利位置分布追踪路线(需要 PEERGLASS_RIPE_ATLAS_KEY)5分钟

______________________________________________________________________

REST API-41个端点

PeerGlass将每个工具都公开为REST端点,允许与 仪表板、脚本和CI/CD管道——不需要Claude。

注册表和路由

方法端点描述
得到/v1/ip/{ip}RDAP查找IP地址
得到/v1/asn/{asn}ASN的RDAP查找
得到/v1/abuse/{ip}滥用任何IP的联系方式
得到/v1/rpki?prefix=...&asn=...RPKI验证
得到/v1/bgp/{resource}BGP可见性状态
得到/v1/announced/{asn}宣布的ASN前缀
得到/v1/org?name=...审核组织名称的所有资源
得到/v1/history/{resource}前缀/ASN所有权历史
得到/v1/transfers/{resource}传输检测
得到/v1/stats/ipv4全球IPv4/IPv6/ASN统计数据
得到/v1/overview/{prefix}前缀层次结构概述
得到/v1/peering/{asn}来自PeeringDB的对等信息
得到/v1/ixpIXP搜索和列表
得到/v1/health/{resource}复合网络健康检查
得到/v1/monitor/{resource}变化监测(增量)

DNS智能

方法端点描述
得到/v1/dns/resolve/{target}DNS解析+RDAP IP关联
得到/v1/dns/enumerate/{domain}完整DNS记录枚举(所有类型)
得到/v1/dns/dnssec/{domain}DNSSEC信任链验证
得到/v1/dns/dnsbl/{ip}DNS阻止列表检查(并行30个RBL)
得到/v1/dns/email/{domain}电子邮件安全审计(SPF/DMARC/DKIM/BIMI)
得到/v1/dns/propagation/{domain}DNS在10个全局解析器上的传播

TLS、证书和威胁Intel

方法端点描述
得到/v1/tls/{hostname}TLS证书检查
得到/v1/ct/{domain}证书透明度日志搜索
得到/v1/threat/{ip}威胁情报(Shodan+GreyNoise)
得到/v1/pdns/{resource}被动DNS历史记录(RIPE统计)

BGP深度

方法端点描述
得到/v1/irr?prefix=...&asn=...IRR路由对象验证
得到/v1/route-leak/{prefix}BGP路由泄漏检测
得到/v1/looking-glass/{prefix}BGP观察镜(RIPE RIS)
得到/v1/stability/{prefix}路径襟翼稳定性分析

人道主义与危机

方法端点描述
得到/v1/shutdown/{country_code}国家BGP关闭检测
职位/v1/shutdown/monitor注册关闭webhook警报
得到/v1/shutdown/timeline/{resource}历史停机时间线
得到/v1/censorship/{domain}DNS审查指纹识别
得到/v1/satellite/{country_code}卫星连接状态
得到/v1/chokepoints/{country_code}国家互联网瓶颈
得到/v1/ooni/{country_code}OONI审查措施
得到/v1/health/country/{country_code}综合国家互联网健康

高级平台

方法端点描述
得到/v1/as-relationships/{asn}AS关系分类(CAIDA)
得到/v1/geo/{ip}GeoIP富集(MaxMind GeoLite2)
得到/v1/atlas/{target}RIPE Atlas分布式追踪路线
职位/v1/bulk在一次呼叫中批量查询多达50个资源

快速示例:

# Look up who owns 1.1.1.1
curl http://localhost:8000/v1/ip/1.1.1.1

# Validate RPKI for Cloudflare's prefix
curl "http://localhost:8000/v1/rpki?prefix=1.1.1.0/24&asn=AS13335"

# Get BGP peers for Google
curl http://localhost:8000/v1/peering/AS15169

# List AFRINIC delegated IPv4 blocks (allocated + Ghana), paginated
curl "http://localhost:8000/v1/stats/ipv4?rir=AFRINIC&include_blocks=true&status=allocated&country=GH&limit=5&offset=0&format=json"

# DNS — enumerate all record types for a domain
curl http://localhost:8000/v1/dns/enumerate/cloudflare.com

# DNS — check email security (SPF/DMARC/DKIM)
curl http://localhost:8000/v1/dns/email/cloudflare.com

# DNS — check if an IP is on any blocklist
curl http://localhost:8000/v1/dns/dnsbl/1.2.3.4

# DNS — check propagation across 10 global resolvers
curl "http://localhost:8000/v1/dns/propagation/cloudflare.com?record_type=A"

# TLS — inspect certificate for a hostname
curl http://localhost:8000/v1/tls/cloudflare.com

# Certificates — find all certs ever issued for a domain
curl http://localhost:8000/v1/ct/cloudflare.com

# Threat intel — open ports, CVEs, risk score for an IP
curl http://localhost:8000/v1/threat/1.2.3.4

# Passive DNS — what hostnames has this IP served?
curl http://localhost:8000/v1/pdns/1.1.1.1

交互式文档(Swagger UI):http://localhost:8000/docs

______________________________________________________________________

建筑

┌─────────────────────────────────────────────────────────┐
│                    PEERGLASS                            │
│                                                         │
│   Claude (LLM)              REST Clients                │
│       │ MCP / stdio              │ HTTP                 │
│       ▼                          ▼                      │
│   server.py (42 tools)      api.py (41 endpoints)       │
│       │                          │                      │
│       └──────────┬───────────────┘                      │
│                  ▼                                       │
│           rir_client.py  ── All async HTTP calls         │
│                  │                                       │
│       ┌──────────┼──────────────────┐                   │
│       ▼          ▼                  ▼                   │
│  normalizer.py  formatters.py    cache.py               │
│  (unify RDAP)   (markdown/JSON)  (TTL tiers)            │
│       │                                                  │
│       ▼                                                  │
│    models.py  (Pydantic v2 data models)                  │
└─────────────────────────────────────────────────────────┘

External APIs called at runtime:
  ├── RDAP:    rdap.afrinic.net / rdap.apnic.net / rdap.arin.net
  │            rdap.lacnic.net  / rdap.db.ripe.net
  ├── RPKI:    rpki.cloudflare.com
  ├── BGP:     stat.ripe.net (bgp-state, announced-prefixes,
  │            routing-status, asn-neighbours, historical-whois)
  ├── IXP:     peeringdb.com/api/net, /api/ix, /api/netixlan
  ├── Stats:   NRO Extended Delegation Stats (all 5 RIRs)
  └── Routing: data.iana.org/rdap/ (IANA bootstrap)

并行查询的工作原理

asyncio.gather() fires all 5 RIR queries at exactly the same time:

  AFRINIC ──── responds in 1.1s ──── 404 Not Found
  APNIC   ──── responds in 0.9s ──── ✅ 200 OK  ← authoritative
  ARIN    ──── responds in 1.2s ──── 404 Not Found
  LACNIC  ──── responds in 1.4s ──── 404 Not Found
  RIPE    ──── responds in 0.8s ──── 404 Not Found

Total wall-clock time: ~1–2s (parallel) vs ~6–8s (sequential)

______________________________________________________________________

Web用户界面(Sprint 7)

PeerGlass包括一个搜索优先、以暗终端为主题的web前端,该前端由 React 18+Vite 5+TypeScript+顺风CSS.

特性

  • 自动检测:粘贴任何IP、ASN、前缀、域或2个字母的国家代码——UI会自动检测类型并运行正确的工具
  • 7个工具类别:注册·路由·DNS·TLS·威胁·危机·对等
  • 黑暗终端主题:深色背景,单空间字体(JetBrains Mono),青色/绿色重音调色板
  • Markdown渲染:所有API结果呈现为带语法突出显示的格式化标记
  • 危机控制面板:叙利亚、缅甸、乌克兰、白俄罗斯、伊朗、俄罗斯等国的一键式国家健康检查
  • 41种工具可供使用:每个REST端点都通过UI公开

配置

变量默认值描述
VITE_API_BASE_URLhttp://localhost:8000PeerGlass API基础URL

目录结构

ui/
├── src/
│   ├── App.tsx                  # Main layout + tab state
│   ├── components/
│   │   ├── SearchBar.tsx        # Search input with auto-type detection
│   │   ├── ResultPanel.tsx      # Markdown result renderer
│   │   ├── TabBar.tsx           # Category + tool tab navigation
│   │   ├── StatusBadge.tsx      # RPKI/BGP/shutdown status indicators
│   │   └── CountryDashboard.tsx # Crisis country quick-access grid
│   ├── hooks/
│   │   └── usePeerGlass.ts      # Query state management hook
│   └── api/
│       └── client.ts            # Typed wrappers for all 41 endpoints
└── dist/                        # Production build output

______________________________________________________________________

测试

PeerGlass拥有 两个独立的测试套件 服务于不同的目的。 你应该同时运行这两个程序——它们捕获不同类别的问题。

┌─────────────────────────────────────────────────────────────┐
│                   TESTING PYRAMID                           │
│                                                             │
│      🔺 INTEGRATION TESTS  (test_integration.py)            │
│      /\   Real internet. Real APIs. Real data.              │
│     /  \  Proves the product actually works end-to-end.     │
│    /────\  Run this on your machine or a GCP VM.            │
│                                                             │
│   🔺 UNIT / STATIC TESTS  (test_peerglass.py)              │
│   /\   In-memory. No network. Instant.                      │
│  /  \  Proves code structure, branding, and wiring.         │
│ /────\  Runs anywhere including CI/CD.                      │
└─────────────────────────────────────────────────────────────┘

______________________________________________________________________

测试1--静态/单元测试(test_peerglass.py)

它检查什么:

#测试它验证什么
1编译检查全部7个 .py 文件解析时没有语法错误
2品牌审核没有过时的旧产品/服务器标识字符串
3RDAP端点所有5个RIR RDAP URL都存在且正确
4协议头Accept: application/rdap+json 已设置
5用户代理已更新为 peerglass/1.0.0
6MCP服务器名称"peerglass"
7工具数量正好42个 @mcp.tool() 室内装饰师 server.py
8REST端点中存在的所有41条路由 api.py
9FastAPI运行时TestClient在内存中点击3个端点,验证响应
10READMEPeerGlass品牌,42个工具,RDAP注释全部存在

如何跑步:

cd peerglass
python test_peerglass.py

预期产量:

============================================================
PEERGLASS — COMPLETE TEST SUITE
============================================================
1. COMPILE CHECK
   ✅ server.py  ✅ rir_client.py  ✅ formatters.py
   ✅ models.py  ✅ cache.py  ✅ normalizer.py  ✅ api.py

2. BRANDING AUDIT — no stale WHOIS identity strings
   ✅ server.py  ✅ rir_client.py  ✅ README.md  ...

...

✅ ALL TESTS PASSED — 0 errors
  Python files: 7  |  MCP tools: 42  |  REST endpoints: 41
  Protocol: RDAP throughout (RFC 7480-7484)
  Branding: PeerGlass throughout
============================================================

何时运行: 在每次承诺之前。运行时间不到3秒。不需要互联网。

______________________________________________________________________

测试2——集成测试(test_integration.py)

它检查什么:

使用以下命令对外部互联网注册表/数据提供商进行真正的HTTP调用 知名、稳定的测试夹具 (Cloudflare AS13335、谷歌AS15169、1.1.1.0/24)。每个测试都断言 实际响应数据——而不仅仅是服务器的响应。

#测试调用API固定装置断言
1RDAP可达性所有5个RIR1.1.1.1HTTP 200或404(两者都表示服务器已启动)
2RDAP IP查找APNIC1.1.1.1objectClassName=ip network, startAddress=1.1.1.0
3RDAP ASN查找ARINAS13335objectClassName=autnum,名称包含 CLOUDFLARE
4RPKI验证RIPE统计1.1.1.0/24 AS13335status=ok,验证状态为 valid
5BGP状态RIPE统计1.1.1.0/24RIS对等体可见前缀,存在源ASN
6已公布的前缀RIPE统计AS13335>=5个前缀,IPv4+IPv6混合
7历史数据RIPE统计AS15169status=ok,返回历史对象版本
8PeeringDB 网络PeeringDBAS13335发现网络记录,存在对等策略
9IANA BootstrapIANAAS13335已映射到正确的RDAP服务URL
10非洲裔RDAP非洲裔102.176.0.0objectClassName=ip network,非洲国家代码
11ASN邻居RIPE统计AS13335返回上游/对等ASN列表
12PeeringDB IXPPeeringDB全球IXP列表,包括名称和国家
13IANA一致性IANA/ICANNIPv4+IPv6+ASN引导文件所有5个RIR服务URL都存在

如何跑步:

# On your local machine or a GCP VM (requires internet access)
cd peerglass
python test_integration.py

预期输出(通过):

============================================================
  PEERGLASS — LIVE INTEGRATION TEST SUITE
  Real HTTP calls. No mocks. No fakes.
============================================================
  Time: 2026-02-20 14:00:00 UTC
  APIs: RIPE · ARIN · APNIC · LACNIC · AFRINIC · RIPE Stat · PeeringDB · IANA

────────────────────────────────────────────
  TEST 1 — RDAP Server Reachability (all 5 RIRs)
────────────────────────────────────────────
   ✅ PASS  RIPE RDAP reachable      HTTP 404
   ✅ PASS  ARIN RDAP reachable      HTTP 404
   ✅ PASS  APNIC RDAP reachable     HTTP 200
   ✅ PASS  LACNIC RDAP reachable    HTTP 404
   ✅ PASS  AFRINIC RDAP reachable   HTTP 404

...

============================================================
  SUMMARY
  Checks run   : 48
  ✅ Passed    : 47
  ❌ Failed    : 0
  ⚠️  Skipped  : 1
  Duration     : ~20-40s

  🎉 ALL TESTS PASSED — PeerGlass live APIs confirmed working!
============================================================

何时运行:

  • 在发布之前
  • 更改后 rir_client.py (HTTP层)
  • 对外部API URL或参数进行任何更改后
  • 按计划(例如GCP VM上的每日cron)检测上游API变化

为什么在没有配置的情况下无法在CI/CD中运行: 集成测试要求对外部API进行出站互联网访问 (RIPE、ARIN、APNIC、LACNIC、非洲、RIPE统计、PeeringDB、IANA)。标准CI运行程序(GitHub操作 免费版)可以上网,所以这些测试可以在那里运行。受限的 沙盒(拟人克劳德环境,一些公司代理)将被阻止 出站呼叫和每次测试都会失败 403 Forbidden --这是 沙盒的预期行为,而不是PeerGlass中的错误。

______________________________________________________________________

了解测试结果

为什么RDAP返回404仍然通过?

APNIC owns 1.1.1.0/24 (Cloudflare's block). If you ask RIPE for 1.1.1.1:

  You:  GET https://rdap.db.ripe.net/ip/1.1.1.1
  RIPE: HTTP 404

This 404 is RIPE saying "I know about this IP but it's not mine."
The server is alive and working correctly. 404 = server reachable.
200 = server reachable AND it's the authoritative RIR for that IP.
Both are valid success states for the reachability test.

为什么测试7有时会跳过?

RIPE统计 historical-whois 端点的覆盖范围是可变的。对于某些 ASN回归了丰富的历史;对于其他人来说 objects 数组为空。 空数组是有效的API响应-将记录跳过以区分 “API中的“无数据”已损坏。

______________________________________________________________________

同时经营两套套房

cd peerglass

# Step 1: Always run static tests first (fast, catches code errors)
python test_peerglass.py
echo "Exit code: $?"

# Step 2: Only run integration tests if static tests pass
if [ $? -eq 0 ]; then
    python test_integration.py
fi

______________________________________________________________________

验证——源锁定检索与模型召回

如果你想验证PeerGlass是确定性的,并且是源固定的 (真正的API检索),而不是模型调用,运行这个快速检查。

  1. 要求ChatGPT获取所有5个RIR RDAP端点 1.1.1.1 并仅返回原始JSON。
  2. 多次重复完全相同的提示。
  3. 将ChatGPT输出与下面的直接端点结果进行比较。

在ChatGPT中使用此提示:

For IP 1.1.1.1, query these exact RDAP endpoints and return ONLY JSON:

- AFRINIC: https://rdap.afrinic.net/rdap/ip/1.1.1.1
- APNIC: https://rdap.apnic.net/ip/1.1.1.1
- ARIN: https://rdap.arin.net/registry/ip/1.1.1.1
- LACNIC: https://rdap.lacnic.net/rdap/ip/1.1.1.1
- RIPE: https://rdap.db.ripe.net/ip/1.1.1.1

Output schema per RIR:
{
  "rir": "...",
  "url": "...",
  "http_status": ...,
  "objectClassName": "... or null",
  "handle": "... or null",
  "error": "... or null"
}

Do not summarize. Do not infer.

地面实况脚本(直接端点调用):

python - <<'PY'
import asyncio
import json
import httpx

ENDPOINTS = {
    "AFRINIC": "https://rdap.afrinic.net/rdap/ip/1.1.1.1",
    "APNIC": "https://rdap.apnic.net/ip/1.1.1.1",
    "ARIN": "https://rdap.arin.net/registry/ip/1.1.1.1",
    "LACNIC": "https://rdap.lacnic.net/rdap/ip/1.1.1.1",
    "RIPE": "https://rdap.db.ripe.net/ip/1.1.1.1",
}

async def query_one(client, rir, url):
    try:
        r = await client.get(url, timeout=20)
        content_type = r.headers.get("content-type", "")
        data = r.json() if "json" in content_type else {}
        return {
            "rir": rir,
            "url": url,
            "http_status": r.status_code,
            "objectClassName": data.get("objectClassName"),
            "handle": data.get("handle"),
            "error": None,
        }
    except Exception as exc:
        return {
            "rir": rir,
            "url": url,
            "http_status": None,
            "objectClassName": None,
            "handle": None,
            "error": str(exc),
        }

async def main():
    headers = {
        "Accept": "application/rdap+json",
        "User-Agent": "peerglass/verification",
    }
    async with httpx.AsyncClient(headers=headers, follow_redirects=True) as client:
        results = await asyncio.gather(*[
            query_one(client, rir, url) for rir, url in ENDPOINTS.items()
        ])
    print(json.dumps(results, indent=2))

asyncio.run(main())
PY

如果ChatGPT输出不一致或在直接调用稳定时无法获取, 这种差异正是PeerGlass使用确定性源锁定检索的原因。

______________________________________________________________________

添加自己的集成测试

test_integration.py 脚本被设计为可扩展的。每次测试如下 这种模式:

async def test_your_thing():
    section("TEST N — Short description")
    print("  What API, what fixture, what you expect")

    url = "https://example-api.com/endpoint"
    params = {"resource": "your-fixture", "sourceapp": "peerglass-test"}
    headers = {"Accept": "application/json", "User-Agent": "peerglass/1.0.0 (integration-test)"}

    try:
        async with httpx.AsyncClient(timeout=25.0) as client:
            resp = await client.get(url, params=params, headers=headers)

        if resp.status_code != 200:
            fail("API returned 200", f"HTTP {resp.status_code}"); return

        data = resp.json()
        value = data.get("some", {}).get("field", "")

        ok("Field is what I expected", f"value='{value}'") if value == "expected" else fail("Field check", f"Got '{value}'")

    except Exception:
        fail("API call failed", traceback.format_exc()[-120:])

然后将其添加到 main() 协程:

async def main():
    ...
    await test_your_thing()   # ← add here
    ...

______________________________________________________________________

使用的外部API

API用途缓存TTL
所有5个RIR RDAP端点IP/ASN注册数据(RDAP JSON)1小时
data.iana.org/rdap/Bootstrap:哪个RIR拥有哪个IP/ASN范围永久
rpki.cloudflare.comRPKI/ROA验证(验证的ROA有效载荷)15分钟
stat.ripe.net/data/bgp-stateBGP路由表可见性5分钟
stat.ripe.net/data/announced-prefixesASN宣布的前缀5分钟
stat.ripe.net/data/asn-neighboursBGP对等/上游/下游ASN1小时
stat.ripe.net/data/historical-whoisRDAP对象更改历史记录(RIPE的命名)12小时
stat.ripe.net/data/allocation-history分配生命周期事件12小时
stat.ripe.net/data/prefix-overview前缀层次元数据1小时
stat.ripe.net/data/routing-status路由状态和可见性5分钟
peeringdb.com/api/net网络对等策略1小时
peeringdb.com/api/ixInternet交换点目录6小时
peeringdb.com/api/netixlan网络到IXP成员记录1小时
NRO扩展委托统计权威IPv4/IPv6/ASN分配计数(所有5个RIR)24小时

______________________________________________________________________

第3阶段数据源说明

RIPE统计历史人物

记录对RDAP对象所做的每一次更改:当组织字段更改时, 当状态改变时,当添加新的维护者时。被...使用 rir_prefix_historyrir_detect_transfers.名字 *“历史名人”* 是RIPE Stat自己的端点命名——PeerGlass始终使用RDAP协议。

新闻报道: 最适合RIPE NCC资源。部分适用于其他RIR。

RIPE统计数据分配历史

记录完整的分配生命周期:当块首次从 RIR池,当它被子分配给ISP时,当它返回时。

NRO扩展授权统计

每个RIR每天以管道分隔的文本文件形式发布。包含所有 有史以来创建的单个IP和ASN记录,以及当前状态。权威的 来源于 rir_ipv4_stats.

RIPE统计前缀概述/更少细节/更多细节

并行查询三个API,以构建前缀层次树 rir_prefix_overview.

______________________________________________________________________

用例工作流

BGP劫持调查

1. rir_query_ip(suspicious_ip)         → Who registered this IP?
2. rir_check_bgp_status(prefix)        → Which ASN is announcing it right now?
3. rir_check_rpki(prefix, asn)         → Is the announcement RPKI-valid?
4. rir_prefix_overview(prefix)         → Any unexpected more-specifics?
5. rir_detect_transfers(prefix)        → Did this block recently change hands?

并购尽职调查

1. rir_audit_org(company_name)         → What IP blocks does this company own?
2. rir_prefix_history(each_prefix)     → When were they acquired?
3. rir_detect_transfers(each_prefix)   → Were any transferred recently?
4. rir_get_announced_prefixes(asn)     → What are they actively routing?

对等和IXP分析

1. rir_get_peering_info(asn)           → Where does this network peer?
2. rir_lookup_ixps(city or ixp_name)  → Find IXPs in a region
3. rir_network_health(asn)             → Is the network healthy?
4. rir_change_monitor(asn)             → Any changes since last check?

政策研究/ISO报告

1. rir_ipv4_stats()                    → Full global IPv4/IPv6/ASN dashboard
2. rir_ipv4_stats(rir_filter="AFRINIC")→ Africa-specific detail
3. Compare ipv6_total_prefixes across  → IPv6 adoption rates by region

______________________________________________________________________

IPv4耗尽上下文

RIRIPv4可用池已用尽
APNIC2011年4月15日
RIPE NCC2012年9月14日
ARIN2015年9月24日
LACNIC2020年6月
非洲裔2020-2021

所有RIR现在都在转移政策下运作。IPv4地址交易 二级市场。 rir_ipv4_stats 实时跟踪剩余池。

______________________________________________________________________

许可证

麻省理工学院

目录标签

目录标签

PythonClaude云端部署互联网资源查询本地部署RDAP协议RPKI验证BGP路由检查网络健康监控

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

部署方式(deploymentType,部署类型)

remote-capable

工具数量(toolCount,工具数)

42

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiononeremote-capable

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP