本博客为本人学习笔记,代码出自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”。 所有其他值都保留为默认值。

用Python实现的Internet电话软件(P2P-SIP)<开源>的更多相关文章

  1. Python 列出 windows 安装的软件

    Python 列出 windows 安装的软件 参考链接:https://stackoverflow.com/questions/802499/how-can-i-enumerate-list-all ...

  2. STUN/TURN/ICE协议在P2P SIP中的应用(一)

    1           说明 本文详细描述了基于STUN系列协议实现的P2P SIP电话过程,其中涉及到了SIP信令的交互,P2P的原理,以及STUN.TURN.ICE的协议交互 本文所提到的各个服务 ...

  3. blender 3d模型软件介绍(开源,免费,易用,强大)

    关于BLENDER Blender是一个开源的多平台轻量级全能三维动画制作软件 具有建模,雕刻,绑定,粒子,动力学,动画,交互,材质,渲染,音频处理,视频剪辑以及运动跟踪,后期合成等等的一系列动画短片 ...

  4. 6个P2P流媒体开源项目介绍

    P2P流媒体开源项目介绍  1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据 ...

  5. P2P流媒体开源项目介绍

    P2P流媒体开源项目介绍1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据.节 ...

  6. STUN/TURN/ICE协议在P2P SIP中的应用(二)

    1       说明 2       打洞和穿越的概念... 1 3       P2P中的打洞和穿越... 2 4       使用STUN系列 协议穿越的特点... 2 5       STUN/ ...

  7. python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)

    1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq.微信.百度网盘.腾讯视频这一类是属于需要安装的桌面应用. 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就 ...

  8. Python练习3-XML-RPC实现简单的P2P文件共享

    XML-RPC实现简单的P2P文件共享 先来个百度百科: XML-RPC的全称是XML Remote Procedure Call,即XML(标准通用标记语言下的一个子集)远程过程调用.它是一套允许运 ...

  9. python环境搭建-设置PyCharm软件的配色方案和Python解释器

    设置PyCharm软件的配色方案 设置Python解释器(用于Python2 or 3 的切换)

随机推荐

  1. 【HICP Gauss】数据库 数据库管理(文件 用户管理 系统权限 对象权限 profile)-7

    数据库运行 依赖不同类型的文件 ,数据文件 参数文件 控制文件 redo日志文件 运行日志文件 审计日志文件等 数据文件 就是表空间文件 存储数据库的数据文件 参数文件 用户修改的配置信息 控制文件 ...

  2. 使用Visual studio查看exe或DLL文件的依赖项

    事先准备:只要 Visual Studio 任何版本即可. 点击开始 -> 程序 -> Visual Studio对应的版本,打开Visual Studio Tools -> 选择 ...

  3. 记一次用pip安装docker-compose报错及解决方法

    Docker-Compose 的安装 方法一 # 下载1.25.0 docker compose sudo curl -L "https://github.com/docker/compos ...

  4. Beta之前-凡事预则立(校园帮-追光的人)

    所属课程 软件工程1916 作业要求 Beta之前-凡事预则立 团队名称 追光的人 作业目标 在Beta冲刺之前,提前做好准备和规划 议题 1.讨论组长是否重选的议题和结论. 2.下一阶段需要改进完善 ...

  5. 最详细的keepalived+lvs-dr配置文档

    四台台机器: 分发器主:192.168.0.154 分发器备:192.168.0.171 rs_1:192.168.0.131 rs_2:192.168.0.132 keepalived安装: yum ...

  6. EasyUI之dataGrid的行内编辑

    $(function () { var datagrid; //定义全局变量datagrid var editRow = undefined; //定义全局变量:当前编辑的行 datagrid = T ...

  7. Java中String、LocalDateTime、LocalDate、Date互转

    String 转LocalDate和LocalDateTime LocalDate startDate = LocalDate.parse("2019-12-05", DateTi ...

  8. BM递推杜教版

    #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (long long i=a;i<n;i++ ...

  9. 【转】.NET Core 事件总线,分布式事务解决方案:CAP

    [转].NET Core 事件总线,分布式事务解决方案:CAP 背景 相信前面几篇关于微服务的文章也介绍了那么多了,在构建微服务的过程中确实需要这么一个东西,即便不是在构建微服务,那么在构建分布式应用 ...

  10. ArrayList存储随机数字

    package com.fgy.demo; import java.util.ArrayList; import java.util.Random; /** * ArrayList实现存储随机数字 * ...