sylhetyhackvenger/BGP

GitHub: sylhetyhackvenger/BGP

一个基于 C 语言的高性能 BGP 协议客户端 CLI 工具,用于在网络环境中进行对等连接、会话测试与路由监控。

Stars: 1 | Forks: 0

# BGP BGP 是一个 Gateway Protocol 客户端,支持 4 字节 ASN、多协议扩展、route refresh、ADD‑PATH 以及指数退避重连。提供 JSON 日志、线程安全的输出,并通过 Python 启动器自动安装依赖。非常适合在生产或实验室环境中进行对等连接、测试和监控 BGP 会话。 # BGP – Border Gateway Protocol 对等端 CLI 工具

BGP Banner

轻量级、高性能的 BGP speaker,专用于对等连接、测试和监控

## 📖 描述 **BGP** 是一个功能齐全的单二进制 Border Gateway Protocol (BGP) 客户端,专为网络工程师、开发者和安全研究人员设计。它实现了核心的 BGP‑4 规范 (RFC 4271) 以及现代扩展,包括 4 字节 AS 号码 (RFC 6793)、多协议扩展 (RFC 4760)、route refresh (RFC 2918) 和 ADD‑PATH (RFC 7911)。该工具使用 C 语言编写以实现最高效率,可在 Linux、macOS 和 Android (Termux) 上运行,且仅需极少的依赖。 凭借其每个对等端一个线程的架构和非阻塞 I/O,BGP 可以同时处理多个并发对等会话。它输出结构化的 JSON 日志,便于与监控管道、SIEM 系统或自定义分析工具集成。可选的指数退避重连机制确保在不稳定的网络环境中保持弹性的连接。 无论您是**测试 BGP 实现**、**调试路由策略**、**监控 BGP 会话**还是**构建网络自动化工具**,BGP 都能提供可靠、可脚本化且低开销的解决方案。内置的 Python 启动器会在支持的平台上自动处理依赖安装(gcc、libjansson、pkg‑config),将设置时间缩短至几秒钟。 ## 🚀 功能仪表板 | 功能 | 描述 | |------------|-------------| | **完整的 FSM** | 实现所有 BGP 有限状态机状态:Idle、Connect、Active、OpenSent、OpenConfirm、Established | | **4 字节 ASN** | 全面支持 32 位 AS 号码 (RFC 6793) 及 AS_TRANS 协商 | | **Multiprotocol** | IPv4、IPv6、VPNv4 和 EVPN 地址族 (AFI/SAFI) | | **Route Refresh** | 优雅的 route refresh 能力 (RFC 2918) | | **ADD‑PATH** | 支持为每个前缀通告多条路径 (RFC 7911) | | **Hold Timer** | 可配置的保持时间(默认 600 秒)及 Keepalive 计时器 | | **重连** | 指数退避(5 秒至 120 秒),最大重试次数可配置 | | **JSON 输出** | 机器可读的日志,支持格式化输出或 JSONL 格式 | | **线程安全** | 专用写入线程可防止 stdout 阻塞 | | **跨平台** | 可在 Linux、macOS 和 Termux (Android) 上运行 | | **零配置** | Python 启动器自动安装依赖项 | ## 📦 安装 ### 前置条件 - **C 编译器** (gcc 或 clang) - **libjansson** (JSON 库) - **pkg‑config** (用于编译器标志) - **make** (可选,用于构建) ### 自动安装(推荐) ``` # 克隆或下载这两个文件:bgp.c 和 bgp.py python bgp.py ``` Python 启动器将: · 检测您的操作系统 (Linux、Termux) · 通过 apt、yum、dnf 或 pkg 安装缺失的依赖 · 将 C 程序编译至 ./bgp · 提供交互式或命令行模式 手动构建 ``` gcc -o bgp bgp.c -ljansson -lpthread -lm -Wall -O2 ``` 🛠️ 用法 命令行选项 ``` Usage: bgp [options...] [ ...] -s, --source IP to source BGP connection from -a, --asn Local ASN (supports 4‑byte ASNs). Default: 65000 -r, --rid Local router ID. Default: 1.1.1.1 -l, --logging Logging level (0‑4). Default: 3 (Info) -f, --format Output format: 'json' or 'jsonl'. Default: json -R, --reconnect Enable automatic reconnection with backoff -m, --max-retries Max reconnection attempts (0 = infinite) -t, --hold-time Hold time in seconds. Default: 600 -h, --help Show this help formats: , or ,, ``` 自动模式(快速测试) ``` python bgp.py auto ``` 这将连接到 192.168.1.1 的 AS 65001,对等端命名为 TestPeer。 手动模式(自定义参数) ``` python bgp.py manual ``` 在出现提示时输入您自己的选项,例如: ``` -a 65000 -R -t 180 10.0.0.1,65001,Core-Router ``` 直接二进制执行 ``` ./bgp -a 65000 -s 192.168.1.100 -R -l 4 172.16.0.1,65002,Peer1 ``` 📊 示例输出 (JSON) ``` { "time": 1700000000, "peer_name": "Core-Router", "id": 42, "type": "OPEN", "length": 29, "message": { "version": 4, "asn": 65001, "hold_time": 600, "router_id": "10.0.0.1", "capabilities": [ { "code": 2, "name": "Route Refresh" }, { "code": 65, "name": "4‑octet ASN", "asn": 65000 } ] } } ``` 🧩 仪表板 – 工具特性与功能 类别 详情 性能 使用 C 语言编写,非阻塞 I/O,按对等端分配线程,可处理数百个会话 可扩展性 模块化设计,易于添加新功能或地址族 安全性 支持 BGP 认证 (MD5) 和优雅关闭 (CEASE) 可观测性 JSON 日志、会话在线时间、消息计数器、错误分类 自动化 可通过 Python wrapper 进行脚本编写,可集成至 CI/CD pipelines 中 调试 详细的日志级别、FSM 状态转换追踪、packet dumps 🧪 手动使用示例 1. 建立带重连的会话 ``` ./bgp -a 65000 -R -m 5 -t 300 192.168.1.1,65001,Router-A ``` 2. 使用源 IP 和 JSONL 格式 ``` ./bgp -s 10.0.0.2 -f jsonl 10.0.0.1,65002 ``` 3. 带自定义名称的多个对等端 ``` ./bgp 172.16.0.1,65003,Core 172.16.0.2,65004,Edge ``` 4. 调试模式(级别 4)且不重连 ``` ./bgp -l 4 -t 180 192.168.2.1,65005 ``` 👤 作者 SYLHETYHACKVENGER (THE‑ERROR808) 特别感谢开源社区提供的 BGP 标准和库,使这款工具的诞生成为可能。 📜 许可证 该项目基于 MIT 许可证授权 – 详情请参阅 LICENSE 文件。 🙌 贡献 欢迎提交贡献、问题和功能请求! 请提交 pull request 或在仓库中提出 issue。 以 ❤️ 致敬全球的网络工程师。
标签:BGP, Docker 部署, 内核驱动, 客户端加密, 网络协议, 网络测试, 网络运维, 路由器, 逆向工具