SIP Session 跟踪

SIP Session Tracking

我目前正在从事一个项目,该项目通过在捕获数据包后解析 SIP header 消息来收集用户登录和分机信息。我目前正在使用 PCAP.net 和 SIPSorcery 库来完成此操作。该项目是用C#编写的

工作原理: 通过在 PCAP.net 中使用过滤器,我可以划分 SIP 相关流量。每次捕获数据包时都会触发一个事件,我会检查数据包类型,例如无论是 SIP 还是其他与 UDP 相关的东西,例如 DNS。如果这是 SIP 消息,我解析 header 提取我感兴趣的信息

问题: 某些 SIP 端点会生成多个包含相同 UID 的注册数据包。很难跟踪单个 session 以及端点实际最终注册的时间(即从 SIP 服务器接收 200OK)。我尝试将 Dictionary 与 CallID 一起使用,然后检查何时收到数据包是否已在 Dictionary 中。

问题: 我如何跟踪 session 以便我知道何时收到特定 session 的 200OK,它已注册并且流已完成

SIP 消息中的 Call-ID 字段用于跟踪 SIP 会话。查看 RFC 3261 以获取有关呼叫 ID 的更多详细信息。

呼叫 ID 充当 SIP 会话的唯一标识符。在您的情况下,您可以尝试从 SIP-REGISTER 消息中搜索 Call-ID 以跟踪后续消息。

SIP 端点发送 REGISTER 请求以将其联系地址绑定到 address-of-record。此类注册由 Call-ID header 字段标识。

请记住,可能会出现具有相同 Call-ID 值的多个 REGISTER 请求,因为:

  • 端点将定期更新其注册,因为每个注册都有一个过期时间间隔
  • REGISTER 请求被质询以进行身份​​验证,SIP 端点发送带有身份验证信息的新请求。
  • 重传

此外,200 响应并不意味着端点已注册。您应该检查 'expires' header and/or 联系参数以了解注册的有效期。