環境:Windows10_x64 Python版本 :3.9.2 sip協議提供了OPTIONS請求方法可用於探測對端狀態,今天記錄下Windows10環境下使用python3.9簡單實現sip協議的options功能(udp承載)的過程,並提供示例代碼及相關資源下載,可從如下渠道獲取: 關註微信公 ...
環境:Windows10_x64 Python版本 :3.9.2 sip協議提供了OPTIONS請求方法可用於探測對端狀態,今天記錄下Windows10環境下使用python3.9簡單實現sip協議的options功能(udp承載)的過程,並提供示例代碼及相關資源下載,可從如下渠道獲取: 關註微信公眾號(聊聊博文,文末可掃碼)後回覆 20230624 獲取。
一、背景描述
sip協議提供了OPTIONS請求方法,可實現如下功能: 1)查詢對端能力; 2)檢測對端狀態(類似ping的功能); 3)NAT會話保活; 4)探測網元數量; 其中,檢測對端狀態用的比較多,主要用於探測對端服務是否正常。 sip OPTIONS的定義及描述,可參考rfc 3261: https://www.rfc-editor.org/rfc/rfc3261.html二、運行效果
這裡演示下使用python發送sip協議的OPTIONS的運行效果,使用FreeSWITCH對接,分為正常探測和異常處理。1、正常探測
可以在控制台開啟sip日誌來觀察: sofia global siptrace on2、異常情況
在控制台關閉freeswitch後,查看腳本運行狀態,腳本使用了異常處理,可以處理timeout異常。 運行效果演示視頻獲取途徑: 關註微信公眾號(聊聊博文,文末可掃碼)後回覆 2023062401 獲取。三、具體實現
這裡列舉下關鍵點,並提供示例代碼。1、python實現的關鍵點
1)協議模板 根據rfc定義的OPTIONS格式,生成python中使用的消息模板:OPTIONS sip:{dstSipHost}:{dstSipPort} SIP/2.0 Via: SIP/2.0/UDP {srcSipHost}:{srcSipPort};rport;branch={branchId} Max-Forwards: 70 From: <sip:{srcSipHost}>;tag={tagId} To: <sip:{dstSipHost}> Call-ID: {callId} CSeq: {cseqNum} OPTIONS User-Agent: myChecker Content-Length: 02)sequence號 需要註意返回消息的CSeq值是否和發送的一致。 3)探測周期 太快和太慢都不好,具體數值根據應用的實際情況調整。 4)socket需要設置超時 可通過 settimeout 函數進行設置,具體參考python的socket文檔。
2、示例代碼
完整示例代碼獲取途徑:
關註微信公眾號(聊聊博文,文末可掃碼)後回覆 20230624 獲取。