用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”。 全部其余值都保留为默认值。
相关文章
相关标签/搜索