用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包的内容,并允许使用从相应规范中提取的嵌入式文档来浏览源代码。

ModuleDescriptionLines
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

高级应用程序模块使用其中一些模块并构建其他应用程序或库,如下所述:

ModuleDescriptionLines
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注册和代理服务器。(不完全的)

起支持作用的模块

ModuleDescriptionLines
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”。 所有其他值都保留为默认值。

                   

原文地址:https://www.cnblogs.com/zhuminghui/p/10966462.html