用Python實現的Internet電話軟件(P2P-SIP)<開源>


本博客為本人學習筆記,代碼出自GitHub:https://github.com/theintencity/p2p-sip

由於GitHub原著為英文,且相當的啰嗦,本文為翻譯內容並去除其啰嗦的部分

重點:代碼只支持Python

 

Python版本開源互聯網點對點軟件 

  關鍵詞:SIPP2PPythonp2psipDHTimplementation

  相關鏈接: Blog39 peersImplementing SIP telephony in PythonStudent ProjectsSupport

  解釋:網絡電話可以是對等體系的應用,參與者不需要依賴昂貴或管理的服務提供者的情況下彼此定位和通訊。

本項目目標是使用Python語言中的會話啟動協議(P2P-SIP)來實現開源的點對點(peer-tp-peer,簡稱P2P)的互聯網通話軟件,項目支持開放協議,如IETF SIP和RTP

 

peer-to-peer系統優點:具有高擴展性、容錯性、針對災難性故障的穩健性。因為它沒有中央服務器,並且沒有網絡自我組織

 

代碼結構

  • src/tools/htmlify.py工具用於生成帶注釋的web視圖代碼
  • src/app下面包含了,如SIP客戶端(voip.py),使用Bamboo的DHT(dht.py)等等
  • src/std下面包含了各種IETF RFC實現的Internet草案,例如RFC 3261, RFC 3550, RFC 2617等等
  • 有些模塊是未完成的半成品

 

代碼整體分為兩部分 - standards和applications。 某些RFC和Internet-drafts中指定的standards在std包中實現,而高級應用程序在app包中實現。 構建此項目的主要優點之一是源代碼在代碼行方面要少得多。

下表總結了std包的內容,並允許使用從相應規范中提取的嵌入式文檔來瀏覽源代碼。

 

Module Description Lines
rfc2198 實現 RTP payload type for 冗余音頻數據. 45
rfc2396 實現各種形式的地址 such as URI or SIP 地址 177
rfc2617 實現在 SIP 中可重用的 HTTP 基本和摘要式的身份驗證 131
rfc2833 實現在 RTP 數據包中的 DTMF 按鍵音有效負載 40
rfc3261 實現會話啟動協議(SIP)的用戶代理部分 1558
rfc3263 會用 DNS NAPTR ,  SRV 和 A  實現 SIP 服務器發現 108
rfc3264 實現 SIP 中使用的單播會話的 SDP 提供答案模型 120
rfc3489bis 實現基本的 NAT 遍歷技術 such as STUN, NAT discovery using STUN,  TURN的變體 693
rfc3550 實現實時傳輸協議(RTP)及其配套控制協議RTCP。 687
rfc3551 定義RTP的靜態有效內容類型。 48
rfc3920 實現客戶端 XMPP 核心 435
rfc3921 實現IM和XMPP客戶端的存在(不完整)。 373
rfc4566 實現會話描述協議(SDP)。 162

高級應用程序模塊使用其中一些模塊並構建其他應用程序或庫,如下所述:

Module Description Lines
voip 實現 SIP 用戶代理庫,用於注冊、呼叫、即時消息和會議 1261
dht 實現 Bamboo/Pastry 分布式哈希表算法的變體 1983
opendht 實現客戶端庫,用來連接到現有的OpenDHT服務 71
p2p 使用 DHT 實現 peer-to-peer 的管道抽象(未完成) 642
p2psip 使用p2p和voip模塊實現各種P2P-SIP應用場景(未完成) 285
crypto 實現在dht或p2p中使用的加密算法的抽象(未完成) 261
dhtgui 實現一個用來啟動p2p / dht 模塊的測試工具,並以圓形來顯示節點 427
sipd 使用rfc3261模塊實現一個非常簡單的SIP注冊和代理服務器。(不完全的)

 

起支持作用的模塊

Module Description Lines
simplexml 會用方便的方法和運算符實現簡單的 XML  DOM,用來處理 XML 和 XMLList 420

 


在運行代碼之前,需要自行配置Python的環境,下面的栗子是執行voip.py,這個腳本使用iptel.org服務器執行編寫SIP注冊、呼叫和即時消息測試

# 在download文件夾下
tar -zxvf source-*.tgz
cd p2p-sip/src  
export PYTHONPATH=.:external:std:app 
python app/voip.py 

 

  每個模塊都有一個簡單的測試用例,作者之后還會上傳使用這些基本模塊構建的應用程序。

  • dhtgui.py用於啟動P2P模塊的測試用戶界面,它取決於wxPython的用戶界面功能。運行會啟動具有DHT圈的用戶界面,我們可以在與安全中心附近單擊添加新的節點
  • p2psip.py用於啟動P2P-SIP結點

注意:第一個節點啟動時需要加 -s ,以成為超級節點,后續啟動的節點不要加 -s 以加入此P2Peye.com網絡

第一個節點監聽SIP端口5062,用 -d 參數可以查看節點之間交換的P2P消息。如果想要跨多個IP網絡進行P2P網絡,需要重新配置引到節點,因為多播發現通常只能在同一IP下運行

python app/p2psip.py -s   # 第一個節點作為啟動服務器
python app/p2psip.py       # 其他終端/機器上的后續節點

 

X-lite v3配置
  如果想要使用X-lite測試P2P-SIP,請使用以下X-lite v3配置。 在“帳戶”(Account)選項卡下的首選項/選項(preferences/options)中,選擇“域代理”(Domain proxy)並將代理地址設置為端口5062上的引導服務器,或者具有正確端口的其他服務器之一,例如127.0.0.1:5062。 在“語音郵件”(Voicemail)選項卡中,取消選中所有內容以避免向P2P-SIP節點發送不必要的語音郵件相關消息。 在“拓撲”(Topology)選項卡的“防火牆遍歷”(Firewall traversal)下,“IP address”設置為“使用本地IP地址”(Use local IP address)。 “STUN服務器”設置為“使用指定的服務器”(Use specified server),地址留空。 取消選中所有其他框並將“Use Xtunnels”設置為永不(never)。 在“存在”(Presence)選項卡中,“Mode”是peer-to-peer的。 所有其他值都保留為默認值。 在“高級”(Advanced)選項卡中,確保取消選中“發送SIP保持活動消息”(send SIP keep alive messages)。 事實上,唯一的復選框是“Use rport”。 所有其他值都保留為默認值。

 

 

                   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM