SIP 会话跟踪

Posted

技术标签:

【中文标题】SIP 会话跟踪【英文标题】:SIP Session Tracking 【发布时间】:2018-02-05 12:46:14 【问题描述】:

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

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

问题: 一些 SIP 端点会生成多个包含相同 UID 的注册数据包。很难跟踪单个会话以及端点实际最终注册的时间(即从 SIP 服务器接收 200OK)。我尝试使用带有 CallID 的字典,然后检查何时收到一个数据包,如果它已经在字典中。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

以上是关于SIP 会话跟踪的主要内容,如果未能解决你的问题,请参考以下文章

WEB中会话跟踪

会话跟踪技术

java中会话跟踪技术

会话跟踪(控制)

07.会话跟踪技术cookie与session

Java:跟踪用户登录会话 - 会话 EJB 与 HTTPSession