操作系统 :CentOS 7.6_x64
FreeSWITCH版本 :1.10.9
NAT环境的主动外呼场景下,会遇到线路侧回铃音数据无法接收的问题,需要FreeSWITCH主动发送RTP数据,发送DTMF是个选择。本文记录下如何使用FreeSWITCH在answer前发送DTMF,我将从以下几个方面进行展开:
  • FreeSWITCH如何发送DTMF

  • sipp如何模拟180和183

  • FreeSWITCH如何在180和183时发送DTMF

  • 相关脚本及资源下载

一、FreeSWITCH发送DTMF

可使用 uuid_send_dtmf 来发送dtmf,命令格式如下:
uuid_send_dtmf  <uuid> <dtmf_data>
示例如下:
uuid_send_dtmf 4d5b6296-155f-4d9a-9fea-ae3284fc48a6 1
效果如下:

二、sipp模拟180和183

使用sipp模拟180和183的场景,以便测试。
sipp版本: 3.6.1
sipp如何安装及基础使用,可参考如下文章:

1、sipp模拟180

实现思路如下:
1)sipp以UAS模式启动;
2)只发送180信令;
3)在200中设置编码数据;
4)通过播放pcap文件模拟rtp数据;
示例xml如下(sipp_uas_180_g711a.xml):

完整代码可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20231205 获取。
启动脚本如下:
#! /bin/bash

./sipp -i 192.168.137.31 -p 55080 -sf sipp_uas_180_g711a.xml
启动效果如下:

2、sipp模拟183

实现思路如下:
1)sipp以UAS模式启动;
2)只发送183信令;
3)在183中设置编码数据,通过播放pcap文件模拟回铃音rtp数据;
4)发送200信令,通过播放pcap文件模拟通话过程的rtp数据;
示例xml如下(sipp_uas_183_g711a.xml):

完整代码可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20231205 获取。

启动脚本如下:

#! /bin/bash

./sipp -i 192.168.137.31 -p 55080 -sf sipp_uas_183_g711a.xml
启动效果如下:

三、FreeSWITCH在180和183时发送DTMF

FS机器:   192.168.137.32
SIPP机器: 192.168.137.31

1、在180时发送dtmf

使用 api_on_ring 进行dtmf发送,会在180时触发该操作。
1.1 编写拨号方案
思路如下:
1)设置api_on_ring回调命令;
2)桥接sipp模拟的180场景;
示例如下:
    <extension name="test180">
<condition field="destination_number" expression="^321$">
<action application="set" data="hangup_after_bridge=true"/>
<action application="lua" data="dtmfTest180.lua"/>
</condition>
</extension>

lua脚本可从文末提供的渠道获取。

1.2 使用分机拨打测试
步骤如下:
1)启动sipp模拟的180场景;
2)注册分机1000;
3)使用分机1000拨打321号码;
测试日志如下:

wireshark抓包效果如下:

运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2023120501 获取。

2、在183时发送dtmf

使用 api_on_pre_answer 进行dtmf发送,会在183时触发该操作,但需要注意的时,此时rtp连接并未建立,需要通过lua脚本进行休眠操作,待rtp连接建立后再发送dtmf数据。
2.1 编写拨号方案
思路如下:
1)设置api_on_ring回调命令;
2)桥接sipp模拟的183场景;
示例如下:
    <extension name="test183">
<condition field="destination_number" expression="^322$">
<action application="set" data="hangup_after_bridge=true"/>
<action application="lua" data="dtmfTest183.lua"/>
</condition>
</extension>

lua脚本可从文末提供的渠道获取。

2.2 使用分机拨打测试
步骤如下:
1)启动sipp模拟的183场景;
2)注册分机1000;
3)使用分机1000拨打322号码;
测试日志如下:

wireshark抓包效果如下:

运行效果视频可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2023120502 获取。

四、资源下载

本文涉及资源,可以从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20231205 获取。

好,就这么多了,希望对你有帮助。

FreeSWITCH在answer前主动发dtmf的更多相关文章

  1. TCP状态机:当服务端主动发FIN进TIME_WAIT,客户端源端口复用会发生什么

    0X01 正常情况下TCP连接会通过4次挥手进行拆链(也有通过RST拆除连接的可能,见为什么服务器突然回复RST--小心网络中的安全设备),下图TCP状态机展示了TCP连接的状态变化过程: 我们重点看 ...

  2. freeswitch 挂断前执行脚本

    通道变量名 api_hangup_hook 介绍在挂断时执行指定API命令 示例 <action application="set" data="api_hangu ...

  3. 小白日记7:kali渗透测试之主动信息收集-发现(一)--二层发现:arping/shell脚本,Netdiscover,scapy

    主动信息收集 被动信息收集可能不准确,可以用主动信息收集验证   特点:直接与目标系统交互通信,无法避免留下访问痕迹 解决方法:1.使用受控的第三方电脑进行探测,使用代理 (做好被封杀的准备)   2 ...

  4. 前后端分离, 前端如何防止直接输入URL进入页面?

    转自:https://blog.csdn.net/weixin_41829196/article/details/80444870 前后端分离,如何防止用户直接在地址栏输入url进入页面,也就是判断用 ...

  5. sipp3.6对freeswitch进行压力测试

    一.安装sipp 1.下载地址: https://github-production-release-asset-2e65be.s3.amazonaws.com/13161657/99df6100-9 ...

  6. java微信开发(wechat4j)——发送客服消息

    微信支持主动发送客服消息.如果你要实现此功能,需要使用CustomerMsg类. 获得access_token access_token请求之后有一个过期时间,微信平台建议你使用一个中控服务器来定时刷 ...

  7. 认识拨号计划-dialplan

    拨号计划是 FreeSWITCH 中至关重要的一部分.它的主要作用就是对电话进行路由(从这一点上来说,相当于一个路由表).说的简明一点,就是当一个用户拨号时,对用户所拨的号码进行分析,进而决定下一步该 ...

  8. 有感于NC的强大

    第一次知道nc(netcat)是好几年前的事了,那个时候天比现在更蓝,草比现在更绿,卤煮也还是一个刚上大学不久的青葱骚年... 现在把这个01年的老古董拿出来说好像有点炒冷饭的意思,资料也铺天盖地了说 ...

  9. Jenkins与网站代码上线解决方案

    1.1 前言 Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle发生争执后,项目从Hudson项目独立. Jenkins提供了软件开发的持续集成服务.它运行在Servlet容器中 ...

  10. 我的WafBypass之道(Misc篇)

    先知技术社区独家发表本文,如需要转载,请先联系先知技术社区授权:未经授权请勿转载.先知技术社区投稿邮箱:Aliyun_xianzhi#service.alibaba.com: Author:Tr3je ...

随机推荐

  1. C# OpenCVSharp图像入门_给绿幕图片视频加背景

    OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研 ...

  2. 《Kali渗透基础》05. 主动信息收集(二)

    @ 目录 1:端口扫描 2:UDP 扫描 2.1:Scapy 2.2:nmap 3:半开放扫描 3.1:Scapy 3.2:nmap 3.3:hping3 4:全连接扫描 4.1:Scapy 4.2: ...

  3. 《小白WEB安全入门》03. 漏洞篇

    @ 目录 SQL注入和简单绕过原理 什么是SQL 什么是SQL注入 XSS漏洞原理 什么是XSS XSS分类 NOSQL注入 什么是NOSQL CSRF原理 什么是CSRF 网络摄像头入侵原理 什么是 ...

  4. 手机用户的开源福音「GitHub 热点速览」

    不知道多少用安卓机的小伙伴,被开屏广告烦过.相比有些克制的 iOS 机,安卓机是个应用基本上都有开屏广告,少则 3s 多则 10s,本周获得 1k+ star 的 Android-Touch-Help ...

  5. Go类型全解:常量与变量大全!

    本篇文章深入探讨了 Go 语言中类型确定值.类型不确定值以及对应类型转换的知识点,后续充分解析了常量与变量及其高级用法,并举出丰富的案例. 关注公众号[TechLeadCloud],分享互联网架构.云 ...

  6. Go协程揭秘:轻量、并发与性能的完美结合

    Go协程为并发编程提供了强大的工具,结合轻量级.高效的特点,为开发者带来了独特的编程体验.本文深入探讨了Go协程的基本原理.同步机制.高级用法及其性能与最佳实践,旨在为读者提供全面.深入的理解和应用指 ...

  7. centos7离线安装docker和docker-compose

    1.找一台可联网的centos7主机 在这台可以联网的机器上把离线包都下载好. 2.下载docker rpm安装包和相关依赖 ## 安装yum-utils包,添加docker yum源 sudo yu ...

  8. .NET周刊【9月第3期 2023-09-17】

    国内文章 在.NET 8 RC1 版本中 MAUI.ASP.NET Core 和 EF8 的新特性 https://www.cnblogs.com/shanyou/p/17698428.html 从年 ...

  9. orale命令6 rman备份

    RMAN:使用ramn进行备份和恢复,rman不依赖系统操作命令,在数据块级别做备份.块级别备份,能只备份变化后的块,实现增量备份.而且不会备份空的块.好处:1.能实现增量备份2.只备份有数据的块,不 ...

  10. Android Studio3.2.1升级刨坑记录

    Android Studio出了3.2.1,我用的是2.3,所有决定升级一下,看看如何 为了保险一点,下载了官方的解压版本,也就是说不含sdk,下载android-studio-ide-181.501 ...