跳到正文
发现
命令行工具开发者工具

SIPhon:高性能 SIP 代理与 B2BUA 平台

用 Rust 编写、Python 脚本化的 SIP 代理、B2BUA 与 IMS 平台,面向语音基础设施开发者。

admin
发布于 2026-11-04
浏览
11
访问
0
下载
0
版本
v1.15.11
平台
Windows、macOS、Linux
该作品还没有经过官方审核。访问演示、下载或复制命令前,请自行确认来源可信。

详细介绍

项目简介

SIPhon 是一个用 Rust 编写的高性能 SIP 代理、B2BUA 和 IMS 平台,脚本层使用 Python,配置使用 YAML。它借鉴 Kamailio、OpenSIPS 的架构经验,但重新设计了开发者接口:以 Rust 替代 C 获得内存安全,以 Python 函数替代专用配置语言,以 YAML 替代 modparam(),并支持脚本热重载。

协议引擎遵循与 Kamailio 相同的 RFC:事务状态机按 RFC 3261 §17,注册器按 §10,代理按 §16。概念可直接对应,例如 request.relay() 对应 t_relay(),registrar.save() 对应 save("location")。

主要功能

  • SIP 核心:RFC 3261 解析器、有状态代理、事务状态机、并行/顺序分叉、Record-Route / Loose Route,并通过 RFC 4475 torture 测试。
  • B2BUA 一等公民:@b2bua.on_invite / on_answer / on_bye 装饰器提供带两条独立 SIP 对话的 call 对象,支持媒体锚定、头部改写、分叉;默认每条 B-leg 使用独立 Call-ID 与 From-tag,天然实现拓扑隐藏。
  • 注册与鉴权:Registrar、GRUU、Service-Route、Digest(RFC 2617/7616)、AKAv1-MD5、IPsec SA 管理、Milenage 密钥派生。
  • 传输层:UDP、TCP、TLS 1.3、WebSocket(WS/WSS)、SCTP(需 sctp feature),以及 NAT 穿越(rport)、Outbound/Flow Tokens、DNS SRV/NAPTR、ENUM。
  • 媒体与网关:RTPEngine 媒体锚定、SDP 编解码过滤、网关/负载均衡。
  • Diameter 与 IMS:Diameter 基础协议及 Cx、Rx、Ro、Rf、Sh 接口,iFC、5G SBI(Npcf、Nchf)。
  • 业务与运维:Presence/SUBSCRIBE/NOTIFY、CDR(file/syslog/http/postgres)、合法监听 X1/X2/X3、SIPREC、限速、IP ACL、HEP/Homer 追踪、Prometheus 指标、Admin HTTP API、优雅关闭。
  • 扩展模块:http 随官方构件提供;smpp、sigtran(M3UA/M2PA/SUA、MTP3、SCCP GTT、MAP/CAP/INAP)需自行编译二进制。

安装与使用

官方容器镜像、.deb、.rpm 和发布压缩包自带 free-threaded Python 3.14t,无需宿主机安装 Python。

从 crates.io 安装:

cargo install siphon-sip

带可选后端:

cargo install siphon-sip --features redis-backend,postgres-backend

SCTP 传输默认关闭(依赖 libsctp,仅 Linux),需显式开启:

cargo install siphon-sip --features sctp

从源码构建时,Python 解释器在编译期由 PYO3_PYTHON 决定,要求 Python 3.12+;Python 3.14t(free-threaded)可完全消除 GIL。纯 Python 测试 SDK siphon-sip 支持 Python 3.10+,脚本单元测试无需代理运行时。

一个 B2BUA 脚本示例:

from siphon import b2bua, log, gateway

@b2bua.on_invite
def on_invite(call):
    call.media.anchor(engine="rtpengine")
    call.remove_headers_matching("^X-")
    gw = gateway.select("carriers")
    call.dial(gw.uri, timeout=30)

注意事项

  • SIPhon 定位为代理、SBC、网关与会话控制场景,并非完整 PBX;作者明确表示它不是 Kamailio / OpenSIPS 的替代品。
  • SCTP 支持仅限 Linux,构建前需安装 libsctp-dev,运行时需要 libsctp1。
  • smpp 与 sigtran 不在默认构件中,需要自行构建 siphon-bin。
  • 项目采用 MIT 许可证。

本作品整理自 GitHub 开源项目 siphon-project/siphon-sip,原作者 @siphon-project,许可证 MIT。中文介绍由 AI 根据项目 README 整理,以原仓库为准。

更新记录

  1. v1.15.11当前版本

    会议功能增强:新增会议成员名单与 on_conference_change 回调,最后一方离会时触发 end_owner;在加入、offer、route 和 adopt_replaced 时支持按席位转发 DTMF。

评论