本博客为本人学习笔记,代码出自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. MySQL/MariaDB数据库的复制加密

      MySQL/MariaDB数据库的复制加密 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的安全问题 1>.基于SSL复制 在默认的主从复制过程或远程连接 ...

  2. mysql考生号后三位对出密号

    select mihao,substring(t1.kaohao, -3)  from t_zhaosheng_zhiyuan as t1 where substring(t1.kaohao, -3) ...

  3. 快捷定位目录 z武器

    z的源码在这里:https://github.com/rupa/z/blob/master/z.sh 1.把源码复制到你的用户目录下的z.sh文件, 2.然后用vim打开.bashrc这个目录,在最后 ...

  4. E. Little Pony and Expected Maximum(组合期望)

    题目描述: Little Pony and Expected Maximum time limit per test 1 second memory limit per test 256 megaby ...

  5. 运维笔试Python编程题

    一.用Python语言把列表[1,3,5,7,9]倒序并将元素变为字符类型,请写出多种方法: 第一种方法: list = [1, 3, 5, 7, 9] list.reverse() list2 = ...

  6. luoguP1120小木棍(POJ - 1011 )

     题意: 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50,个数不超过65. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段 ...

  7. shell脚本自动化安装pgsql10.5版本

    看到有个大佬写了个很实用的脚本,于是这里做了转载 #!/bin/bash #进入软件的制定安装目录 echo "进入目录/usr/local,下载pgsql文件" cd /usr/ ...

  8. for循环:从键盘输入一个正整数n,

    #include<stdio.h>void main(){ int i,n,sum=0; //声明三个整型变量,并为变量sum初始化赋值为0// printf("Please e ...

  9. go 学习 (四):接口 & 方法

     接口声明 // 接口声明 语法:接口是一个 函数签名 的集合,函数签名(函数的声明,不包括实现) type interfaceName interface { method1(param param ...

  10. LeetCode 1140. Stone Game II

    原题链接在这里:https://leetcode.com/problems/stone-game-ii/ 题目: Alex and Lee continue their games with pile ...