BGP窥镜MCP服务器
通过Claude Desktop或任何MCP客户端从公共路由服务器查询实时BGP路由信息、ping IP地址并跟踪网络路径。
这是什么?
A. BGP观察镜 是一种可访问互联网的服务,它公开BGP(边界网关协议)路由数据。BGP是为互联网路由基础设施提供动力的协议。通过观察眼镜,您可以看到特定BGP说话者已经学习了哪些路由,以及它将如何将流量路由到给定的目的地。
该项目将13个公共RouteViews服务器打包成一个 MCP(模型上下文协议)服务器,使BGP查询、ping和traceroute可供Claude Desktop和其他AI助手使用。现在,你可以向克劳德询问有关实时权威数据的互联网路由。
示例问题克劳德可以回答:
- “通往8.8.0.0/24的AS路径是什么?”
- “此前缀是否路由?”
- “Linx路由服务器有多少BGP邻居?”
- “谁拥有AS15169?”
- “IP 1.1.1.1位于哪个国家?”
- “您能从不同的服务器ping 8.8.8.8并比较延迟吗?”
- “显示Google DNS的网络路径”
- “将不同地区的路线与1.1.1.1进行比较”
特性
- 查询实时BGP路由 来自13个全球分布的公共路由服务器
- Ping IP地址 从路由服务器到测试连接和测量延迟
- 追踪路线 访问IP地址以查看网络路径并识别涉及哪些AS
- 查找IP地理位置和BGP元数据 使用BGPKit公共API
- 查找ASN所有权 使用BGPKit公共API
- 检索BGP摘要统计信息 包括路由器ID、AS号、邻居计数
- IPv4和IPv6支持 -适用于两个地址家族
- CIDR符号支持 -查找整个子网
- 公共IP验证 -为了安全起见,阻止私有/保留地址范围
- 简单、快速的设置 -使用Claude Desktop只需几分钟
- 直接telnet连接 -没有严重的依赖关系或复杂的基础设施
- 实时数据 -从公共路由服务器查询实时BGP数据
快速开始
1.安装
pip install -e .2.配置克劳德桌面
将此添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"bgp-lg": {
"command": "python3",
"args": ["/path/to/bgp-lg-mcp/server.py", "--stdio"]
}
}
}3.重新启动克劳德桌面
BGP Looking Glass工具将出现在您的MCP工具列表中。开始询问BGP!
可用工具
JSON响应格式
所有工具均支持 文本 (默认)和 JSON 响应格式,以灵活使用数据。
使用JSON格式:
# Get structured JSON instead of text
route_lookup(destination="8.8.8.0/24", format="json")
bgp_summary(format="json")
asn_owner(asn="AS15169", format="json")
ip_lookup(ip="8.8.8.8", format="json")
list_servers(format="json")JSON格式的优点:
- 程序化解析 -易于解析和处理结构化数据
- 类型安全性 -Pydantic模型验证所有响应
- 结构一致 -所有工具都遵循相同的JSON模式
- 错误处理 -错误还会返回结构化JSON
- API集成 -更适合在MCP服务器之上构建
JSON响应示例:
{
"type": "ip_lookup",
"ip": "8.8.8.8",
"country": "US",
"asn": 15169,
"prefix": "8.8.8.0/24",
"name": "Google, YouTube (for Google Fiber see AS16591 record)",
"rpki": "valid",
"updated_at": "2026-02-25T10:00:00"
}______________________________________________________________________
route_lookup -查询BGP路由
查找特定IP地址或子网的路由方式。
参数:
destination-IPv4/IPv6地址或CIDR子网(例如。,8.8.8.0/24)server-要查询的路由服务器(默认:RouteViews Linx)format-响应格式:text(默认)或json
退货: 原始BGP查找输出,包括匹配路由、AS路径、下一跳信息和路由属性(如果format=“JSON”,则为结构化JSON)。
例子:
route_lookup(destination="1.1.1.1")
route_lookup(destination="2001:4860:4860::8888", server="Equinix Sydney")
route_lookup(destination="8.8.8.0/24", format="json")______________________________________________________________________
bgp_summary -获取路由器统计信息
从路由服务器检索BGP摘要信息。
参数:
server-要查询的路由服务器(默认:RouteViews Linx)format-响应格式:text(默认)或json
退货: BGP摘要输出显示:
- 路由器BGP ID和AS号
- 学习路线数量(RIB条目)
- BGP邻居总数及其状态
- 包含对等体信息、会话正常运行时间和前缀计数的详细邻居表
例子:
bgp_summary()
bgp_summary(server="Equinix Ashburn")
bgp_summary(format="json")使用案例:
- 验证路由服务器是否正常
- 监控主要网络的BGP会话状态
- 查看哪些同行正在积极宣传路线
______________________________________________________________________
list_servers -显示可用服务器
显示所有已配置的BGP窥镜服务器。
参数:
format-响应格式:text(默认)或json
退货: 服务器名称、状态(启用/禁用)、主机名和连接方法。
例子:
list_servers()
list_servers(format="json")______________________________________________________________________
asn_owner -查找ASN所有者
使用BGPKit API检索自治系统编号(ASN)的所有者名称。
参数:
asn-格式为“AS123”或“123”的自治系统编号(例如,“AS15169”、“64512”)format-响应格式:text(默认)或json
退货: ASN的所有者名称。
例子:
asn_owner(asn="AS15169")
asn_owner(asn="15169")
asn_owner(asn="AS64512")
asn_owner(asn="AS15169", format="json")JSON示例响应:
{
"type": "asn_owner",
"asn": "AS15169",
"owner": "GOOGLE - Google LLC"
}使用案例:
- 确定谁操作特定的AS
- 分析路由信息时验证AS所有权
- 了解BGP路径中涉及的实体
______________________________________________________________________
ip_lookup -地理位置和BGP元数据
使用BGPKit API查找IP地址的地理位置信息和BGP元数据。
参数:
ip-IPv4或IPv6地址(例如。,8.8.8.8或2001:4860:4860::8888)
- 必须是公共地址(出于安全考虑,私人/保留地址被拒绝)
format-响应格式:text(默认)或json
退货: IP地理定位数据包括:
- 国家 -GeoIP国家代码
- 自治系统号 -宣布IP的自治系统编号
- 前缀 -覆盖IP的CIDR前缀
- 名称 -组织名称(如有)
- 资源公钥基础设施 -RPKI验证状态(有效/无效/未知)
- 更新 -上次更新的时间戳
例子:
ip_lookup(ip="8.8.8.8")
ip_lookup(ip="1.1.1.1")
ip_lookup(ip="2001:4860:4860::8888")
ip_lookup(ip="8.8.8.8", format="json")文本输出示例:
IP Lookup: 8.8.8.8
Country: US
ASN: 15169
Prefix: 8.8.8.0/24
Name: Google, YouTube (for Google Fiber see AS16591 record)
RPKI Status: valid
Updated: 2026-02-25T10:00:00JSON输出示例:
{
"type": "ip_lookup",
"ip": "8.8.8.8",
"country": "US",
"asn": 15169,
"prefix": "8.8.8.0/24",
"name": "Google, YouTube (for Google Fiber see AS16591 record)",
"rpki": "valid",
"updated_at": "2026-02-25T10:00:00"
}使用案例:
- 确定IP地址位于哪个国家
- 查找运营IP的组织
- 验证已宣布前缀的RPKI签名状态
- 将流量来源映射到组织
- 验证前缀所有权
______________________________________________________________________
ping_host -平安IP地址
从BGP外观的服务器Ping IP地址,以测试连接并测量往返时间。
参数:
ip-IPv4或IPv6地址到ping(例如。,8.8.8.8,1.1.1.1)server-使用哪个路由服务器进行ping(默认:RouteViews Linx)format-响应格式:text(默认)或json
退货: Ping统计数据包括:
- 成功率 -成功ping的百分比(0-100%)
- 发送/接收的数据包 -数据包总数和成功返回的数据包
- 往返次数 -最小、平均和最大延迟(毫秒)
例子:
ping_host(ip="8.8.8.8")
ping_host(ip="1.1.1.1", server="RouteViews Main")
ping_host(ip="2001:4860:4860::8888", format="json")文本输出示例:
Ping Results for 8.8.8.8
Server: RouteViews Linx
Packets sent: 5
Packets received: 5
Success rate: 100%
Round-trip times (ms): min=10.5, avg=11.2, max=12.3JSON输出示例:
{
"type": "ping",
"ip": "8.8.8.8",
"server": "RouteViews Linx",
"stats": {
"sent": 5,
"received": 5,
"success_rate": 100,
"min_ms": 10.5,
"avg_ms": 11.2,
"max_ms": 12.3
},
"raw_output": "Success rate is 100 percent (5/5), round-trip min/avg/max = 10.5/11.2/12.3 ms"
}支持的服务器:
- 路线视图主✅
- Linx路线视图❌ (命令不可用)
- 路线视图2❌ (命令不可用)
- 其他服务器❌ (访问受限)
使用案例:
- 测试与远程IP地址的连接
- 测量不同地理位置的延迟
- 验证IP地址是否可访问
- 通过比较延迟来诊断网络问题
- 监控往返时间随时间的变化
______________________________________________________________________
traceroute_host -跟踪到IP地址的路由
跟踪从BGP窥镜服务器到IP地址的网络路径(跳数)。
参数:
ip-要跟踪的IPv4或IPv6地址(例如。,8.8.8.8,1.1.1.1)server-使用哪个路由服务器进行跟踪(默认:RouteViews Linx)format-响应格式:text(默认)或json
退货: 追踪路线结果包括:
- 跳数 -从源到目标的顺序跳转
- 主机名 -跃点的DNS名称(如果可用)
- IP地址 -跳的IP地址
- AS编号 -自治系统跳数
- 响应时间 -每个探头的往返时间(通常每跳3个探头)
例子:
traceroute_host(ip="8.8.8.8")
traceroute_host(ip="1.1.1.1", server="Equinix Sydney")
traceroute_host(ip="2001:4860:4860::8888", format="json")文本输出示例:
Traceroute to 8.8.8.8
Server: RouteViews Linx
Target hostname: dns.google
Total hops: 12
1. gw.example.com (10.0.0.1) 1.2 1.1 1.3 ms
2. isp-gateway.net (203.0.113.1) [AS 64500] 5.2 5.1 5.3 ms
3. * (no response)
4. core-router.example.net (203.0.114.1) [AS 65001] 10.5 10.2 10.8 ms
...
12. dns.google (8.8.8.8) [AS 15169] 25.3 25.1 25.5 msJSON输出示例:
{
"type": "traceroute",
"ip": "8.8.8.8",
"target_hostname": "dns.google",
"server": "RouteViews Linx",
"total_hops": 12,
"hops": [
{
"hop_number": 1,
"host": "gw.example.com",
"ip": "10.0.0.1",
"asn": null,
"times_ms": [1.2, 1.1, 1.3],
"rtt_avg_ms": 1.2
},
{
"hop_number": 2,
"host": "isp-gateway.net",
"ip": "203.0.113.1",
"asn": 64500,
"times_ms": [5.2, 5.1, 5.3],
"rtt_avg_ms": 5.2
},
{
"hop_number": 3,
"host": "*",
"ip": null,
"asn": null,
"times_ms": [],
"rtt_avg_ms": null
}
],
"raw_output": "..."
}支持的服务器:
- 路线视图主✅
- Linx路线视图❌ (命令不可用)
- 路线视图2❌ (命令不可用)
- 其他服务器❌ (访问受限)
了解跟踪路线输出:
- 随时间跳跃 -已成功响应延迟数据
- 啤酒花\* -路由器没有响应跟踪路由探测(有时路由器会阻止ICMP/UDP)
- AS编号 -显示路径中涉及哪些自治系统(网络)
- 延迟增加 -随着距离源越来越远,每一跳都应该有更高的延迟
使用案例:
- 识别互联网上两点之间的网络路径
- 诊断网络问题发生的位置(哪个跃点失败)
- 了解哪些AS参与了流量路由
- 验证网络之间的直接对等关系
- 绘制网络拓扑和互连图
- 通过识别慢跳来调试延迟问题
______________________________________________________________________
支持的路由服务器
13个全球分布的公共RouteViews服务器,均可免费访问:
| 服务器 | 位置 | 支持\_ ping | 支持\_ traceroute |
|---|---|---|---|
| RouteViews Linx | 英国伦敦 | 假 | 假 |
| RouteViews Main | 俄勒冈州,美国 | 真 | 真 |
| RouteViews2 | 美国俄勒冈州 | false | false |
| Equinix Ashburn | 美国阿什本 | 假 | 假 |
| DE-CIX纽约 | 美国纽约 | 假 | 假 |
| Equinix芝加哥 | 美国芝加哥 | 假 | 假 |
| NWAX波特兰 | 美国波特兰 | 假 | 假 |
| AMS-IX阿姆斯特丹 | 荷兰阿姆斯特丹 | 假 | 假 |
| Equinix新加坡 | 新加坡 | 假 | 假 |
| HKIX香港 | 香港 | 虚假 | 虚假 |
| Equinix悉尼 | 澳大利亚悉尼 | false | false |
| IX.br圣保罗 | 巴西圣保罗 | 假 | 假 |
| RouteViews WIDE | 日本东京 | 假 | 假 |
所有服务器都是:
- ✅ 可公开访问(无需注册)
- ✅ 全天候免费提供
- ✅ 从BGP源实时更新
- ✅ 由俄勒冈大学路线景观项目维护
配置
编辑 config.json 修改路由服务器或添加新服务器:
{
"servers": [
{
"name": "RouteViews Linx",
"host": "route-views.linx.routeviews.org",
"port": 23,
"connection_method": "telnet",
"username": "",
"password": "",
"prompt": ">",
"timeout": 15,
"enabled": true
}
]
}配置字段
- 名字 -服务器标识符(指定要查询的服务器时使用)
- 主机 -BGP路由器的主机名或IP地址
- 港口 -Telnet端口(几乎总是23)
- 连接方法 -目前为“telnet”;可以添加SSH支持
- 用户名 -登录用户名(空=匿名访问)
- 密码 -登录密码
- 提示 -命令提示指示器(用于检测响应何时完成)
- 超时 -连接超时(秒)
- 启用 -启用/禁用而不从配置中删除
出站速率限制
为了保护公共基础设施免受连接洪水的影响,对出站请求进行了限制:
- 每台服务器的telnet限制:
BGP_PER_SERVER_MAX_CONNECTIONS(默认值:2) - 通过telnet+BGPKit API调用的全局出站限制:
BGP_GLOBAL_MAX_OUTBOUND(默认值:10)
当达到限制时,新的请求会等待可用的插槽。
运行服务器
MCP标准模式(建议用于克劳德桌面)
python3 server.py --stdio这是Claude Desktop集成的默认设置。服务器在后台运行,并通过stdin/stdout进行通信。
流式HTTP模式
对于基于web的MCP客户端或测试:
python3 server.py开始 http://127.0.0.1:8000 MCP端点位于 /mcp
服务器支持两种传输模式:
- 工作室 (
--stdio)-适用于Claude Desktop等本地MCP客户端 - 流式HTTP (默认)-用于基于web的MCP客户端和远程访问
运作原理
- 你问克劳德一个BGP问题 -“AS通往1.1.1.1的路径是什么?”
- Claude调用适当的MCP工具 -
route_lookup与您的查询 - 该工具连接到公共路由服务器 通过telnet
- 执行BGP命令 -
show ip bgp - 返回原始路由器输出 致克劳德
- 克劳德解读和总结 结果给你
所有通信都使用简单的按需telnet连接,没有持久会话,也没有复杂的基础设施。
项目结构
服务器由以下部分组成:
- 服务器.py -配备所有工具的主MCP服务器
- bgp_lg.py -具有工作函数的库(telnet客户端、IP验证、ASN查找、配置管理)
- config.json -可用路由服务器的配置
- pyproject.toml -Python依赖关系
示例
检查子网是否已路由
User: Is 203.0.113.0/24 currently routed to the internet?
Claude: route_lookup(destination="203.0.113.0/24")
Result: [Shows all routes matching that prefix from the route server]
Claude: Based on the BGP data, this subnet is being announced by AS65001 with these paths...查找ASN所有者
User: Who operates AS15169?
Claude: asn_owner(asn="AS15169")
Result: Google LLC
Claude: AS15169 is operated by Google LLC, which owns several large networks...比较不同地区的路线
User: How does traffic to Google DNS (8.8.8.8) route from different regions?
Claude: Calls route_lookup for 8.8.8.8 with different servers
Claude: Shows how different route servers see the path to Google's infrastructure监视路由服务器运行状况
User: Is the Linx route server operating normally?
Claude: bgp_summary(server="RouteViews Linx")
Result: Shows 63 active BGP neighbors, millions of routes, healthy sessions
Claude: Yes, the Linx route server is operating normally with X neighbors...需求
- Python 3.7+
- 中列出的依赖关系
requirements.txt(FastAPI、uvicorn、mcp)
安装
git clone https://github.com/yourusername/bgp-lg-mcp.git
cd bgp-lg-mcp
pip install -e .发展
使用开发依赖项进行安装:
pip install -e ".[dev]"演出
- 连接时间:50毫秒-1.1秒(取决于服务器)
- 命令执行:通常\<500ms
- 总查询时间:每次查询0.5秒-1.5秒
- 无启动延迟 -工具立即可用
故障排除
Claude桌面中的连接错误
错误: “连接错误-检查您的MCP服务器是否正在运行…”
解决方案: 确保服务器正在运行:
python3 server.py --stdio并验证中的配置路径 claude_desktop_config.json 是正确的。
路由查找未返回任何结果
可能的原因:
- 目标是私有IP(10.x.x.x、192.168.x.x等)-为了安全起见,这些IP被阻止
- 路由服务器暂时无法访问
- 服务器过载(请尝试其他服务器)
解决方案: 尝试其他服务器或验证IP是否为公共:
route_lookup(destination="1.1.1.1", server="Equinix Ashburn")服务器无法启动
检查:
- Python 3.7+已安装:
python3 --version - 已安装依赖项:
pip install -e . - 端口8000未使用(用于流式http模式):
lsof -i :8000
局限性
- 仅限Telnet -目前仅支持telnet连接(兼容RFC 854)
- 仅限公共IP -专用/保留地址范围被阻止
- 不要求进行验证 -所有配置的服务器都是公共和免费的
- 出站请求限制 -强制执行每台服务器和全局并发限制
贡献
欢迎投稿!感兴趣的领域:
- SSH支持不支持telnet的服务器
- 其他公共路由服务器
- 性能优化
- 其他BGP查询类型
- 更好的错误处理和诊断
许可证
麻省理工学院
关于BGP和窥镜
BGP(边界网关协议) 是互联网的路由协议。它允许自治系统(网络)交换路由信息。
镜子 是一种公开BGP说话者路由表并允许查询的服务。它们在以下方面具有不可估量的价值:
- 解决路由问题
- 验证前缀公告
- 监控BGP会话运行状况
- 网络运营和可见性
了解更多:
- 路线视图项目 -维护此处使用的公共服务器
- BGP基础知识
- Looking Glass服务器
支持
如果您遇到问题或有建议,请在GitHub上打开问题或查看上面的故障排除部分。
