jk20342/speer

GitHub: jk20342/speer

一个无外部依赖的轻量级 C 语言 P2P 网络协议栈,实现了 Noise 加密握手、yamux 流多路复用和部分 libp2p 兼容功能。

Stars: 2 | Forks: 0

# speer 一个小型的、类似 libp2p 的 C 语言协议栈。由个人独立维护;对一个人来说工作量有点大。 但我们还是做到了。 **两个入口点(同一代码库,不同的传输方式):** | api | 传输协议 | 对端节点 | | --- | --- | --- | | `speer.h` | udp + speer `packet.c` 格式(内嵌 noise **xx**;非 libp2p 的 tcp/quic) | 仅限原生 speer | | `speer_libp2p_tcp.h` | tcp + multistream + noise xx + yamux | kubo、py-libp2p、rust-libp2p 等 基于 tcp 的实现 | `examples/libp2p_tcp_full_session.c` 会拨号连接到一个标准的 libp2p tcp 主机(noise → yamux → stream proto);它已经与 py-libp2p 进行了核对验证。 它包含 noise xx、基于 tcp 的 libp2p、yamux、mdns、部分 dht 功能、部分 quic,以及一个 tls 1.3 核心。无任何外部依赖。 源码规模:`src/` 和 `include/` 目录下共 121 个 `.c`/`.h` 文件,计 19,180 行代码 (其中非空行 16,747 行)。不包含测试、示例、rust 代码和构建输出。 更多细节: - [架构](docs/architecture.md) - [安全性](docs/SECURITY.md) ## 构建 ``` make make examples make test ``` 在 Windows 上使用 mingw: ``` mingw32-make .\tests\run_tests.ps1 ``` ## 快速使用 基于 udp 的原生 speer 主机(网络层仅限 speer-to-speer): ``` #include "speer.h" speer_host_t* host = speer_host_new(seed, NULL); speer_peer_t* peer = speer_connect(host, peer_pk, "1.2.3.4:4242"); speer_stream_t* s = speer_stream_open(peer, 0); speer_stream_write(s, (uint8_t*)"hello", 5); while (running) speer_host_poll(host, 100); ``` 基于 tcp 的 libp2p 会话(与 tcp 上的其他 libp2p 实现互通): ``` #include "speer_libp2p_tcp.h" #include "transport_tcp.h" speer_libp2p_identity_t id; /* fill id from keys - copy pattern in examples/libp2p_tcp_full_session.c */ int fd; speer_tcp_dial(&fd, "127.0.0.1", 4001); speer_libp2p_tcp_session_t session; speer_libp2p_tcp_session_init_dialer(&session, fd, &id); /* then yamux + multistream per stream - same example file */ ``` 包含 yamux 和协议开启的完整引导程序位于 `examples/libp2p_tcp_full_session.c`。 ## 示例 ``` ./examples/echo_server ./examples/chat ./examples/libp2p_ping demo ./examples/libp2p_quic_ping ``` 包含 mdns/tcp/noise/yamux 的终端聊天演示程序位于 rust 工作空间中的 crate `speer-chat`(`rust/speer-chat`)。 ## 安装 cmake install 会同时导出 cmake 和 pkg-config 元数据: ``` cmake -S . -B build -DSPEER_BUILD_TESTS=OFF cmake --build build cmake --install build ``` 然后使用者可以选择使用 `find_package(speer)` 或 `pkg-config speer`。 ## Rust Rust 仓库: - [`speer-sys-rust`](https://github.com/jk20342/speer-sys-rust) - 原始 FFI 绑定 - [`speer-rust`](https://github.com/jk20342/speer-rust) - 安全的 Rust 封装 - [`speer-rust-chat`](https://github.com/jk20342/speer-rust-chat) - 终端聊天应用 ## 状态 - noise xx: 完整 - yamux: 完整 - mdns: 完整,但请将记录视为提示信息 - dht: 实用核心部分 - tls 1.3: 核心片段 - quic v1: 数据包编解码器,尚非完整的连接协议栈 - relay / dcutr: 部分实现;v2 hop reserve:`relay_public_hop_check`(网络,公共 relay)。 ## 许可证 MIT
标签:Bash脚本, DHT, libp2p, mDNS, Noise协议框架, P2P网络, QUIC协议, TCP/IP, TLS 1.3, UDP通信, Yamux, 分布式哈希表, 加密通信, 区块链基础设施, 去中心化, 多路复用, 客户端加密, 嵌入式网络, 底层网络开发, 无外部依赖, 点对点通信, 组播DNS, 网络协议栈, 网络安全, 隐私保护, 零依赖网络库