使用OpenSER构建电话通信系统——第七章(3)

使用OpenSER构建电话通信系统 OpenSer官方退出的开发指南。相当权威。是中文版。 OpenSips也是继承于OpenSer,所以使用OpenSips开发的朋友也可以使用。 立即下载

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!

实验——使用LCR特性(Lab——using the LCR Feature)

让我们使用LCR来执行一个简单的实验。对于这个实验,我们需要一个OpenSER服务器,两个网关和一个IP电话。你可以使用asterisk作为网关和虚拟机很容易的模拟这个实验环境。

步骤1:使用网关构建LAB。配置一台名为usa1的网关来接收以+1作为前缀的通话,另配置一台名为br1的网关来接收以+55作为前缀的通话。在网关中,你可以在将通话发送到PSTN之前添加前缀或删除一个数字。可以使用strip()和prefix()核心函数来加前缀和删除数字。要了解更多的细节,请登录www.openser.org。

步骤2:从http://www.sermyadmin.org/openser/openser.lcr下载配置文件并复制到openser.cfg。

cd /etc/openser

wget http://www.sermyadmin.org/openser/openser.lcr

cp openser.lcr openser.cfg

The script can be seen below with the modifications highlighted.

# ------------------ module loading ----------------------------------

#set module path

mpath="//lib/openser/modules/"

loadmodule "mysql.so"

loadmodule "sl.so"

loadmodule "tm.so"

loadmodule "rr.so"

loadmodule "maxfwd.so"

loadmodule "usrloc.so"

loadmodule "registrar.so"

loadmodule "textops.so"

loadmodule "uri.so"

loadmodule "uri_db.so"

loadmodule "domain.so"

loadmodule "permissions.so"

loadmodule "group.so"

loadmodule "mi_fifo.so"

loadmodule "lcr.so"

# Uncomment this if you want digest authentication

# mysql.so must be loaded !

loadmodule "auth.so"

loadmodule "auth_db.so"

# ----------------- setting module-specific parameters ---------------

modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")

modparam("usrloc", "db_mode", 2)

modparam("auth_db", "calculate_ha1", yes)

modparam("auth_db", "password_column", "password")

modparam("rr", "enable_full_lr", 1)

modparam("auth_db|permissions|uri_db|usrloc","db_url","mysql://openser:openserrw@localhost/openser")

modparam("permissions", "db_mode", 1)

modparam("permissions", "trusted_table", "trusted")

# ------------------------- request routing logic -------------------

# main routing logic

route{

#

# -- 1 -- Request Validation

#

if (!mf_process_maxfwd_header("10")) {

sl_send_reply("483","Too Many Hops");

exit;

};

if (msg:len >= 2048 ) {

sl_send_reply("513", "Message too big");

exit;

};

#

# -- 2 -- Routing Preprocessing

#

## Record-route all except Register

if (!method=="REGISTER") record_route();

##Loose_route packets

if (loose_route()) {

# marca a logica de roteamento no pedido

append_hf("P-hint: roteado por loose_route\r\n");

route(1);

};

  #

# -- 3 -- Determine Request Target

#

if (method=="REGISTER") {

route(2);

} else {

route(3);

};

}

  route[1] {

#

# -- 4 -- Forward request to target

#

## Forward statefully

t_on_failure("1");

if (!t_relay()) {

sl_reply_error();

};

exit;

}

route[2] {

## Register request handler

if (is_uri_host_local()) {

if (!www_authorize("", "subscriber")) {

www_challenge("", "1");

exit;

};

if (!check_to()) {

sl_send_reply("403", "Forbidden");

exit;

};

  save("location");

exit;

} else if {

sl_send_reply("403", "Forbidden");

};

}

  route[3] {

## INVITE request handler

if (is_from_local()){

# From an internal domain -> check the credentials and the FROM

if(!allow_trusted()){

if (!proxy_authorize("","subscriber")) {

proxy_challenge("","1");

exit;

} else if (!check_from()) {

sl_send_reply("403", "Forbidden, use From=ID");

exit;

};

} else {

log("Request bypassed the auth.using allow_trusted");

};

consume_credentials();

#Verify aliases, if found replace R-URI.

lookup("aliases");

if (is_uri_host_local()) {

# -- Inbound to Inbound

route(10);

} else {

# -- Inbound to outbound

route(11);

};

} else {

#From an external domain ->do not check credentials

#Verify aliases, if found replace R-URI.

lookup("aliases");

  if (is_uri_host_local()) {

#-- Outbound to inbound

route(12);

} else {

# -- Outbound to outbound

route(13);

};

};

}

  route[4] {

# routing to the public network

if (!load_gws()) {

sl_send_reply("503", "Unable to load gateways");

exit;

}

  if(!next_gw()){

sl_send_reply("503", "Unable to find a gateway");

exit;

}

route(1);

exit;

}

  route[10] {

#from an internal domain -> inbound

#Native SIP destinations are handled using the location table

#Gateway destinations are handled by regular expressions

#In our example we will normalize the number to e164 +1305XXXXXX

#to facilitate the posterior billing.

append_hf("P-hint: inbound->inbound \r\n");

if (uri=~"^sip:[2-9][0-9]{6}@") {

if (is_user_in("credentials","local")) {

# Assuming your country is USA (+1) and area code (305)

prefix("+1305");

route(4);

exit;

} else {

sl_send_reply("403", "No permissions for local calls");

exit;

};

};

if (uri=~"^sip:1[2-9][0-9]{9}@") {

if (is_user_in("credentials","ld")) {

prefix("+");

route(4);

exit;

} else {

sl_send_reply("403", "No permissions for long distance");

exit;

};

};

if (uri=~"^sip:011[0-9]*@") {

if (is_user_in("credentials","int")) {

strip(2);

prefix("+");

route(4);

exit;

} else {

sl_send_reply("403", "No permissions for international calls");

};

};

  if (!lookup("location")) {

sl_send_reply("404", "Not Found");

exit;

};

route(1);

}

  route[11] {

# from an internal domain -> outbound

# Simply route the call outbound using DNS search

append_hf("P-hint: inbound->outbound \r\n");

route(1);

}

route[12] {

# From an external domain -> inbound

# Verify aliases, if found replace R-URI.

lookup("aliases");

if (!lookup("location")) {

sl_send_reply("404", "Not Found");

exit;

};

route(1);

}

route[13] {

#From an external domain outbound

#we are not accepting these calls

append_hf("P-hint: outbound->inbound \r\n");

sl_send_reply("403", "Forbidden");

exit;

}

failure_route[1] {

if(!next_gw()) {

t_reply("503", "Service not available, no more gateways");

exit;

}

t_on_failure("1");

t_relay();

步骤3:使用ngrep抓包并确保包都能够到达正确的目的地。

步骤4:按照下面的表,使用openserctl lcr命令添加路由和网关

lcr 网关组(lcr Gateway Groups)

你可以使用SerMyAdmin来插入网关组。

Lcr 网关(lcr Gateways)
Lcr 路由(lcr Routes)

步骤5:对任何以+1或+55开头的号码进行测试

步骤6:关闭网关br1,并在此测试+55的通话。通话此时应该走另一个可供选择的网关,因为现在的br1已经关闭了。

保证re-INVITES的安全(Securing re-INVITES)

既然我们连上了PSTN,那么对于安全性的考虑就很重要了。Re-INVITES在松散路由区段中被处理。这些re-INVITES不会被要求他们的凭据。为了增强安全性,需要添加下面脚本的内容到你的loose_route区段中。如果是接续请求(has_totag()),需要其拥有ROUTE头。如果它没有该头(由函数loose_route()检查得到),我们将丢弃请求并给出错误“404,not here”。如果你有疑问,请查看文件openser.章节7-3。

if (has_totag()) {

# sequential request withing a dialog should

# take the path determined by record-routing

if (loose_route()) {

#Check authentication of re-invites

if(method=="INVITE" && (!allow_trusted())) {

if (!proxy_authorize("","subscriber")) {

proxy_challenge("","1");

exit;

} else if (!check_from()) {

sl_send_reply("403", "Forbidden, use From=ID");

exit;

};

};

route(1);

} else {

sl_send_reply("404","Not here");

}

exit;

}

黑名单和“473/Filtered Destination”消息(Blacklists and “473/Filtered Destination messages”)

DNS黑名单是用来进行DNS故障转移的特性。如果你发送一通通话给一个网关,并且这个网关不能被访问或是返回5××或6××错误码,OpenSER使用了一个叫做“dns blacklist”的资源,并将你的网关插入黑名单。在能够继续发送前,你的网关在此黑名单将持续4分钟(这个数字可以在编译时在blacklists.h中被修改)。当网关在黑名单中时,如果你试图继续向该网关发送通话,那么你将收到“473/Filtered Destination”消息。要关闭该特性(默认是打开的),可以使用下面的语句:

disable_dns_blacklist=yes

你也可以创建你自己的永久的网关黑名单或暂时的服务之外的名单。

概要(Summary)

在本章中,你已经学会如何配置OpenSER来将通话前转到网关。注意安全性是很重要的。使用permissions模块你能够允许网关避开摘要认证(digest authentication)并允许他们只验证IP地址。组模块对于控制由UAC到来的访问尤其重要。确认re-INVITES的凭据也是很有趣的工作。从你连上PSTN的那一刻起,就要特别注意通行欺骗(toll fraud)。我建议你找一个安全专家定期检查你的环境。还要经常的对你的通话记录进行分析以检查出不正常的通话活动。

<script>window._bd_share_config={"common":{"bdsnskey":{},"bdtext":"","bdmini":"2","bdminilist":false,"bdpic":"","bdstyle":"0","bdsize":"16"},"share":{}};with(document)0[(getelementsbytagname('head')[0]||body).appendchild(createelement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new date()/36e5)];</script>
阅读(1031) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
使用OpenSips构建电话通信系统 使用OpenSips构建电话通信系统,详细介绍如何使用opensips开发、构建一个通信系统。 立即下载

相关推荐

从音频录制到智能手表:Sigma-Delta ADC是如何在低功耗场景下‘欺骗’噪声的?

本文深入解析Sigma-Delta ADC在智能穿戴设备中的低功耗高精度实现原理,重点介绍其通过过采样和噪声整形技术‘欺骗’噪声的独特方法。以TWS耳机和医疗级健康监测为例,展示该技术如何在有限功耗预算下实现专业级信号采集,为消费电子设计提供关键解决方案。

weixin_30825581的博客 389

使用OpenSER构建VoIP通话 (转载)

使用OpenSER构建VoIP通话   使用OpenSER构建电话通信系统——第一章(1)       前言:openser已经成为opensips项目,但是本书的内容绝大部分是适合于学习相关知识的。所以还是针对原书原封不动的做的翻译。   使用OpenSER

Android 开发 6669

《数据结构》知识点汇总+算法代码总结【全】

写在前面:本文写于吴签时期,在家备考时刷完数据结构王道书之后想着把书中重点梳理汇总一下。本文内容包括但不局限于王道数据结构每章的知识点及其课后习题所涵盖的知识点。本人曾在大三期间打过一些程序设计类比赛,所以本文所涉及到的代码不一定局限于王道书,但思想都一样。 期末复习和备考408均可使用第一章:绪论(不在考研大纲但很重要)第二章:线性表第三章:栈和队列第四章:串第五章:树与二叉树第六章:图第七章:查找 第一章:绪论(不在考研大纲但很重要) 数据结构三要素:逻辑结构、存储结构、数据的运算;其中逻辑结构包括线

qq_44622401的博客 17万+

SIP介绍

前言:openser已经成为opensips项目,但是本书的内容绝大部分是适合于学习相关知识的。所以还是针对原书原封不动的做的翻译。使用OpenSER构建电话通信系统Building Telephony Systems with OpenSER第一章:SIP介绍(Introduction to SIP)会话初始化协议是互联网工程任务组(IETF)制定的协议标准,在多个RFC(Request for Comments)文档中被进行了描述说明。RFC3261是最近的一个RFC,一般称它为SIP版本2。SIP是一

gdjylks的专栏 1002

Markdown编辑器介绍

这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。

soso1968的博客 1181

哨兵1号(Sentinel-1)雷达SAR数据预处理全流程:从下载到精确配准

本文详细介绍了哨兵1号(Sentinel-1)雷达SAR数据从下载到精确配准的全流程预处理方法。内容涵盖SLC与GRD数据选择、ASF平台下载技巧,并重点解析了使用SNAP软件进行几何校正、辐射定标及高精度配准的核心步骤,为InSAR形变监测等应用提供可靠的数据基础。

weixin_29208327的博客 479

使用OpenSER构建电话通信系统——第六章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!<h1 style="mso-line-height-alt:5.0pt;page-break-before:always;mso-list:none; tab-stops:21.0pt"><span lang="AR-SA" style="font-size:14.0pt;font-family:宋体; mso-ascii-font-fa

老黑 866

STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

软件开发第四讲 - 按键检测(状态机) 一、工具链接 1、Keil c51 UV4 https://yunpan.360.cn/surl_yrIfYYmeRFk 2、STC-ISP下载软件 https://yunpan.360.cn/surl_yxH4CuUUvI3 二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用群主设计的PCB,自行打板焊接; 方法3:向群主购买,淘宝链接...

硬件家园 3047

提供《使用OpenSER构建电话通信系统》中文翻译版本下载

提供《使用OpenSER构建电话通信系统》中文翻译版本下载    感谢网友将这本《使用OpenSER构建电话通信系统》整理城doc文档,方便了大家,在此非常之感谢,感谢这个开源的世界,感谢互联网。《使用OpenSER构建电话通信系统》 管理员在2009年8月13日编辑了该文章文章。 -->

老黑 865

【100%通过率】华为od统一考试B卷【查找接口成功率最优时间段】Python 实现

服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数, 给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost,找出数组中最长时间段,如果未找到则直接返回NULL。

MISAYAONE的博客 5871

FPGA开发中的操作系统

在FPGA开发中,操作系统起着关键的作用,它负责任务管理、资源管理、中断处理和设备驱动程序等功能。在实际的FPGA开发中,可以选择使用现有的操作系统,如MicroC/OS-II、FreeRTOS等,或者根据具体需求自行设计和开发操作系统。在FPGA(可编程逻辑门阵列)开发中,操作系统扮演着关键的角色,为硬件设计师提供了一种有效的方式来管理资源、调度任务并实现系统级功能。本文将介绍FPGA开发中的操作系统概念,并提供一个简单的示例代码来说明如何在FPGA平台上实现一个基本的操作系统。

CqpFsharp的博客 1158

使用OpenSER构建电话通信系统——第三章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!这一章前半部分的内容是介绍系统安装和openser安装的,图片较多,而本blog文章中嵌入图片太过费时,所以直接将pdf文档链接公布如下,请直接下载。使用OpenSER构建电话通信系统——第三章(1) 管理员在2009年8月13日编辑了该文章文章。 -->

老黑 436

量化交易 米筐 案例:市值因子选股策略

案例:市值因子的选股策略 1.结果 获得超额收益 年化 49% 2. 从股票中选择市值小的股票 选定财务数据筛选 进行每日调仓(多因子选股调仓 周期频率会小一些) 3. 代码 估值有关指标 # 在沪深300股票中,选出市值比较小的10只股票 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。 def init(context): # 沪深300组合 stocks = index_components('000300.XSHG') # 沪深3

廷益_飞鸟的博客 2313

使用OpenSER构建电话通信系统——第五章(3)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢! Openserctl shell脚本 Openserctl工具是安装在/usr/sbin上的shell脚本。被用来使用命令行的方式来对OpenSER进行管理。可以用来进行: l         启动,终止,重启Open

Android 开发 1660

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用OpenSER构建电话通信系统——第八章(3)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!     检查配置文件(Ispecting the Configureation File) 我们的脚本正变得难以debug。现在,让我们介绍XLOG模块。它实现了XLOG函数。这个函数与LOG()函数很相似,但是它允许你在消息中使用诸如请求URI($ru)的伪变量。下面有一个使用XLOG的例子。 loadmodule "xlog

老黑 725

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用OpenSER构建电话通信系统——第四章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!<h1 style="margin-left:0cm;text-indent:0cm;mso-line-height-alt:5.0pt; page-break-before:always;tab-stops:0cm"><span lang="AR-SA" style="font-size:14.0pt; font-family:宋体;ms

老黑 1045

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用OpenSER构建电话通信系统——第二章

<h1 style="margin-left:0cm;text-indent:0cm;mso-line-height-alt:5.0pt; page-break-before:always;tab-stops:0cm">注:以下文章如需转载,请注明所属作者,转载地址,谢谢!<h1 style="margin-left:0cm;text-indent:0cm;mso-line-height-alt

老黑 776

使用OpenSER构建电话通信系统——第七章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!<h1 style="mso-line-height-alt:5.0pt;page-break-before:always;mso-list:none; tab-stops:21.0pt"><span lang="AR-SA" style="font-size:14.0pt;font-family:宋体; mso-ascii-font-fa

老黑 603

使用OpenSER构建电话通信系统——第五章(2)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!安装 MySQL支持 <p class="MsoNormal" style="text-indent:21.0pt;line-height:22.0pt;mso-line-height-rule: exactly"><span lang="AR-SA" style="mso-bidi-font-size:10.5pt;font-fami

老黑 596

使用OpenSER构建电话通信系统——第三章(2)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!OpenSER v1.2 目录结构 <p class="MsoNormal" style="text-indent:21.0pt;line-height:22.0pt;mso-line-height-rule: exactly"><span lang="AR-SA" style="mso-bidi-font-size:10.5pt;f

老黑 501

使用OpenSER构建电话通信系统——第一章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!前言:openser已经成为opensips项目,但是本书的内容绝大部分是适合于学习相关知识的。所以还是针对原书原封不动的做的翻译。使用OpenSER构建电话通信系统 Building Telephony Systems with OpenSER第一章:SIP介绍(Introduction to SIP) 会话初始化协议是互联网工程

老黑 763

使用OpenSER构建电话通信系统——第五章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!第五章:用MySQL添加认证(Adding Authentication with MySQL)在这一章中我们将学到如何使用几种数据库后端来对SIP请求进行鉴定并提供诸如位置和别名表等数据的持续性。最主要的是,我们将使用MySQL来做每一件事。这一章分为两个部分。第一个部分,我们将学到如何实现认证,第二部分我们将学到如何处理不同方向的通话。这一

老黑 1086
上一篇: 使用OpenSER构建电话通信系统——第七章(2)
下一篇: 使用OpenSER构建电话通信系统——第八章(1)
老黑徒
博客等级 码龄23年 9粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值