用Python实现的Internet电话软件(P2P-SIP)开源
本博客为本人学习笔记,代码出自GitHub:https://github.com/theintencity/p2p-sip
由于GitHub原著为英文,且相当的啰嗦,本文为翻译内容并去除其啰嗦的部分
重点:代码只支持Python
Python版本开源互联网点对点软件
关键词:SIP, P2P, Python, p2psip, DHT, implementation
相关链接: Blog, 39 peers, Implementing SIP telephony in Python, Student Projects, Support
解释:网络电话可以是对等体系的应用,参与者不需要依赖昂贵或管理的服务提供者的情况下彼此定位和通讯。
本项目目标是使用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 # 其他终端/机器上的后续节点
转载于:https://www.cnblogs.com/zhuminghui/p/10966462.html
用Python实现的Internet电话软件(P2P-SIP)开源相关推荐
- Python自动覆盖录屏软件——NIRE工作室开源软件(参数自动校正)(欢迎白嫖)
复调录屏软件 版本号:0.1.1 Alpha 发行时间:2021年02月11日 发布方:NIRE工作室 开发者:Nire_Yeyu 一.软件描述 目标群体:软件开发工程师.测试工程师.工程实施人员.软 ...
- python通信自动化测试_基于Python的无线通信设备自动化测试软件的研制
基于Python的无线通信设备自动化测试软件的研制 中国电子科技集团公司第十研究所 冯启俊 [期刊名称]<电子世界> [年(卷),期]2019(000)015 [总页数]2 无线通信设备的 ...
- 基于智能移动设备的IP电话软件的设计与实现
摘 要 介绍了以Pocket PC2003为操作系统,带WiFi功能的智能移动设备平台下IP电话软件的设计方案与实现方法.实践证明,本软件具有实时性好.移植性强等优点. 关键字 智能移动设 ...
- python制作电脑软件_利用PYTHON制作桌面版爬虫软件(一)
抱歉,对长沙房地产数据的挖掘与分析[三],想了蛮久,觉得对自己的分析结果不是很理想.等我完善好了,我再发出来吧.今天继续开启新的一专题.主要讲解如何用PYTHON实现简单的桌面软件的制作. 题外话,我 ...
- 学python需要安装什么软件-学武汉Python培训课程需要安装什么软件?分享这10款...
工欲善其事必先利其器.初学者在学Python的时候,往往会因为没有好用的软件工具,走了很多弯路.因此一些好用的软件工具,可以极大地提高开发效率,那么学武汉Python培训课程需要安装什么软件呢?本文千 ...
- python软件界面-用Python写一个语音播放软件
原标题:用Python写一个语音播放软件 单位经常使用广播进行临时事项的通知(将文字转换为语音然后通过功放广播),但是市面上多数语音播放软件都是收费的,要么发音失真,要么不够稳定--经常出现莫名其妙的 ...
- python编写一个软件-python写一个随机点名软件的实例
最近有个随机点名软件的需求,故写了一个,上代码:github地址 # -*- coding: utf-8 -*- # @Time : 18-12-31 下午4:21 # @Author : Felix ...
- python编程需要什么软件-《》 学习python编程需要安装哪些软件?
python安装教程有没有?最好是视频的 廖雪峰的python教程这里有教程,还是不错的. 学Python要安装哪些软件? 一. 安装python 1. 从python下载相应的python安装包,打 ...
- python电脑截图文字识别软件_Python实现文字识别,来看看大牛怎么实现截图/
python有截屏的包吗 有你可以试试pyscreenshot. 地址:https://github.com/ponty/pyscreenshot 使用:import pyscreenshot as ...
最新文章
- 清华博士接亲被要求现场写代码,新娘:提醒他吃饭的手艺不能忘!
- rdd数据存内存 数据量_「大数据」(七十七) Spark之IO机制
- 如何成为一名大厂的优秀员工?
- 【翻译】无需安装Python,就可以在.NET里调用Python库
- SpringMVC框架----SpringMVC的自定义类型转换器
- C# TabControl增加关闭按钮
- 前端- 不用React 而使用 Vue,这么做对吗?
- Varnish 安装部署
- delphi 鼠标获取窗口句柄_pygame--创建一个简单的窗口
- Unity3D lable控件
- 医院门诊管理系统php文献,医院门诊管理系统(源码+系统)
- PHP从基础到高级总结
- 文件下载触发的DDE注入
- c语言 srand,函数srand在C中
- Xorg Drivers
- 期货交易应该如何界定交易中的时间周期?
- 我的面试经历(2013.5)
- 综合实践计算机的入门知识教学设计,3-6年级综合实践活动3.我是电脑小画家_教案、教学设计_市级优课(0001)【信息技术】.doc...
- 关于SQL Server中将数值类型转换为字符串的问题
- MRF,HMM,HMRF图像分割
热门文章
- 百度烽火算法升级:打击网站回退按钮恶意劫持问题
- SSM毕设项目计算机设计大赛优秀作品展示网站8c96d(java+VUE+Mybatis+Maven+Mysql)
- 如何理解statsmodels.ols的输出结果?ols计算的线性回归结果以及手动计算的结果的对比
- 【ArcGIS】连接到数据库失败,临时文件I/O错误--可能$SDEHOME/temp已满
- 学习做视频剪辑,几分钟教会你剪辑技巧
- Android震动器
- C++ vector去重 交集 并集
- 数据挖掘:探索性数据分析(EDA)
- oc总结第四讲:属性
- 【Sofice小司笔记】1 Java,包含java基础知识,集合,面向对象,反射,泛型等