SIP会话跟踪

时间:2017-08-28 09:24:40

标签: sip pcap.net

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

此外,200响应并不意味着端点已注册。您应该检查“过期”标题和/或联系参数,以了解注册保持有效的时间。