2017-08-28 146 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'標題和/或聯繫人蔘數以瞭解註冊將保持有效的時間。