2017-08-28 157 views
1

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

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

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

问题: 我如何跟踪会话,所以我知道,当我收到200 OK为特定的会话,它被注册并流完成

回答

0

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

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

0

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

请注意,可出现具有相同的Call-ID值的多个REGISTER请求,因为:

  • 端点将定期更新其注册,因为每个登记具有期满间隔
  • REGISTER请求是对认证提出挑战,并且SIP端点发送带有认证信息的新请求。
  • 重传

此外,200响应不意味着端点注册。您应该检查'expires'标题和/或联系人参数以了解注册将保持有效的时间。