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

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

因爲GitHub原著爲英文,且至關的囉嗦,本文爲翻譯內容並去除其囉嗦的部分python

重點:代碼只支持Pythongit

 

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

  關鍵詞:SIPP2PPythonp2psipDHTimplementationgithub

  相關連接: Blog39 peersImplementing SIP telephony in PythonStudent ProjectsSupportweb

  解釋:網絡電話能夠是對等體系的應用,參與者不須要依賴昂貴或管理的服務提供者的狀況下彼此定位和通信。算法

本項目目標是使用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包的內容,並容許使用從相應規範中提取的嵌入式文檔來瀏覽源代碼。app

 

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」。 全部其餘值都保留爲默認值。
相關文章
相關標籤/搜索