我目前正在开发一个项目,通过在捕获数据包后解析SIP头消息来收集用户登录和扩展信息。我目前正在使用PCAP.net和SIPSorcery库来实现这一目标。该项目是用C#编写的
工作原理: 通过在PCAP.net中使用过滤器,我可以区分SIP相关的流量。每次捕获数据包时都会触发事件,并检查数据包类型,例如无论是SIP还是其他UDP相关的东西,比如DNS。如果这是一条SIP消息,我会解析标题,提取我感兴趣的信息
问题: 某些SIP端点生成多个包含相同UID的注册数据包。很难跟踪单个会话以及何时实际上最终注册了端点(即从SIP服务器接收200OK)。我尝试使用带有CallID的Dictionary,然后检查收到数据包的时间是否已经在字典中。
问题: 如何跟踪会话,以便我知道当我收到该特定会话的200OK时,它已注册并且流已完成
答案 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请求,因为:
此外,200响应并不意味着端点已注册。您应该检查“过期”标题和/或联系参数,以了解注册保持有效的时间。