介绍几种OPTIONS检测的方法

news2024/10/7 20:27:58

 

概述

日常的VOIP开发中,OPTIONS检测是常用的网络状态检测工具。

OPTIONS原本是作为获取对方能力的消息,也可以检测当前服务状态。正常情况下,UAS收到OPTIONS心跳,直接回复200即可。

与ping不同的是,OPTIONS检测不仅仅针对网络状态,也针对sip server的端口状态进行检测,在VOIP问题定位中更精准。

环境

CentOS  release 7.0 (Final)或以上版本

freeswitch v1.10.7

new bing

sipp.3.6.2

sipexer-v1.1.0-linux-amd64

可选方案

freeswitch自带的OPTIONS检测

python脚本

sipp工具

sipexer工具

freeswitch自带的OPTIONS检测

freeswitch自带的OPTIONS检测可以通过配置gateway网关来启动,也可以针对注册的在线用户设置OPTIONS心跳检测,配置方法简单介绍如下。

gateway网关设置。修改conf/sip_profile/external/gw-137.xml

<include>

    <gateway name="gw-137">

        <param name="realm" value="10.55.55.137:5080"/>

        <param name="caller-id-in-from" value="true"/>

        <param name="register" value="false"/>

        <!--send an options ping every x seconds, failure will unregister and/or mark it down-->

        <param name="ping" value="20"/>

        <param name="ping-min" value="2"/>

        <param name="ping-max" value="3"/>

    </gateway>

</include>

针对注册的在线用户设置OPTIONS心跳检测,修改conf/sip_profile/internal.xml

    <param name="unregister-on-options-fail" value="true"/>

    <!-- Send an OPTIONS packet to all registered endpoints -->

    <param name="all-reg-options-ping" value="true"/>

    <!-- Send an OPTIONS packet to NATed registered endpoints. Can be 'true' or 'udp-only'. -->

    <param name="nat-options-ping" value="true"/>

    <param name="registration-thread-frequency" value="30"/>

    <param name="ping-mean-interval" value="30"/>

    <param name="ping-thread-frequency" value="1"/>

python脚本

github上很多,缺点是需要自己调试,适配符合的场景模式。

下面的脚本是使用new bing自动生成的脚本,未测试仅供参考。

好的,您可以使用Python内置的SIP库`sip`来发送OPTIONS请求。这个库可以在Python 3.7及以上版本中使用。您可以使用以下代码来实现您的需求:

```python

import sip

import sys

def send_options(remoteip, remoteport):

    sip.setapi('sip', 2)

    from sip import SIPRequest, SIPResponse

    from socket import socket, AF_INET, SOCK_DGRAM

    import time

    # Check if the IP address is valid

    try:

        socket(AF_INET, SOCK_DGRAM).connect((remoteip, remoteport))

    except OSError:

        print("Invalid IP address")

        return

    # Send OPTIONS request

    s = socket(AF_INET, SOCK_DGRAM)

    s.settimeout(5)

    sip_request = SIPRequest('OPTIONS', 'sip:{}:{};transport=udp'.format(remoteip, remoteport), 'SIP/2.0')

    sip_request.add_header('Via', 'SIP/2.0/UDP {}:{};branch=z9hG4bK-{}'.format(s.getsockname()[0], s.getsockname()[1], int(time.time())))

    sip_request.add_header('From', '<sip:test@{}:{}>;tag=1234'.format(s.getsockname()[0], s.getsockname()[1]))

    sip_request.add_header('To', '<sip:test@{}:{}>'.format(remoteip, remoteport))

    sip_request.add_header('Call-ID', '{}@{}'.format(int(time.time()), s.getsockname()[0]))

    sip_request.add_header('CSeq', '1 OPTIONS')

    sip_request.add_header('Contact', '<sip:test@{}:{}>'.format(s.getsockname()[0], s.getsockname()[1]))

    sip_request.add_header('Max-Forwards', '70')

    s.sendto(bytes(sip_request), (remoteip, remoteport))

    # Receive response

    try:

        data = s.recv(1024)

        response = SIPResponse(data.decode())

        print("Response received: {}".format(response.status_code))

        print(response.headers)

        print(response.body)

    except Exception as e:

        print("Error receiving response: {}".format(e))

```

其中,`send_options()`函数接受两个参数:`remoteip`和`remoteport`。这个函数会发送一个SIP OPTIONS请求到指定的IP地址和端口,并打印响应消息。如果请求失败,则会打印错误消息。

请注意,在使用此代码之前,请确保您已经安装了Python 3.7或更高版本,并且已经安装了`sip`库。

以上内容为new bing自动生成,未经测试。

sipp脚本

配置sipp号码文件call-test.csv,内容如下。

SEQUENTIAL

123456;13712345678;

增加sipp脚本文件uac-options.xml,内容如下。

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE scenario SYSTEM "sipp.dtd">

<scenario name="Basic options UAC">

  <send retrans="500">

    <![CDATA[

      OPTIONS sip:[remote_ip]:[remote_port] SIP/2.0

      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]

      From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]

      To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>

      Call-ID: [call_id]

      CSeq: 10 OPTIONS

      Max-Forwards: 10

      Content-Length: 0

    ]]>

  </send>

  <recv response="200" crlf="true">

  </recv>

  <ResponseTimeRepartition value="10, 20, 30"/>

  <CallLengthRepartition value="10, 50, 100"/>

</scenario>

使用sipp命令发起OPTIONS检测

sipp -i 10.55.55.138 -p 6666 -inf call-test.csv -sf uac-options.xml 10.55.55.137:5080 -rp 1000 -r 100 -l 8192 -m 1

可以查看sipp结果是成功或失败。

sipexer

sipexer工具内置OPTIONS功能,只需要简单的参数即可测试。

下载sipexer的发布包,并解压,即可得到sipexer的可执行程序。

wget https://github.com/miconda/sipexer/releases/download/v1.1.0/sipexer-v1.1.0-linux-amd64.tar.gz

tar -zxvf sipexer-v1.1.0-linux-amd64.tar.gz

ll

-rwxr-xr-x.  1 admin admin 8637840 6月  30 16:57 sipexer

测试,从本地发送OPTIONS检测到10.55.55.137:5080。

./sipexer sip:10.55.55.137:5080

[info] [sipexer.go:1578] main.SIPExerDialogLoop(): local socket address: 10.55.55.138:45585 (udp)

[info] [sipexer.go:1579] main.SIPExerDialogLoop(): local via address: 10.55.55.138:45585

[info] [sipexer.go:1580] main.SIPExerDialogLoop(): sending to udp 10.55.55.137:5080: [[---

OPTIONS sip:10.55.55.137:5080 SIP/2.0

Via: SIP/2.0/UDP 10.55.55.138:45585;rport;branch=z9hG4bKSG.29529ee2-2cad-47b6-b68e-d26cdccbc940

From: <sip:alice@localhost>;tag=d2c84867-447e-4d94-9216-bfb4c81d7441

To: <sip:bob@localhost>

Call-ID: 8b74f427-6458-407c-ad80-d52157041eee

CSeq: 596582 OPTIONS

Date: Mon, 03 Jul 2023 13:56:33 CST

User-Agent: SIPExer v1.1.0

Max-Forwards: 10

Content-Length: 0

[info] [sipexer.go:1582] main.SIPExerDialogLoop(): ---]]

[info] [sipexer.go:1633] main.SIPExerDialogLoop(): response-received: from=10.55.55.137:5080 bytes=597 data=[[---

SIP/2.0 200 OK

Via: SIP/2.0/UDP 10.55.55.138:45585;rport=45585;branch=z9hG4bKSG.29529ee2-2cad-47b6-b68e-d26cdccbc940

From: <sip:alice@localhost>;tag=d2c84867-447e-4d94-9216-bfb4c81d7441

To: <sip:bob@localhost>;tag=5Dta8ca41BQBF

Call-ID: 8b74f427-6458-407c-ad80-d52157041eee

CSeq: 596582 OPTIONS

Contact: <sip:10.55.55.137:5080>

User-Agent: FreeSWITCH-mod_sofia/1.6.19~64bit

Accept: application/sdp

Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY

Supported: timer, path, replaces

Allow-Events: talk, hold, conference, refer

Content-Length: 0

[info] [sipexer.go:1635] main.SIPExerDialogLoop(): ---]]

测试成功,OPTIONS正常收到200 OK响应。

总结

OPTIONS心跳检测在voip的应用过程中还是挺重要的,对于线路和sip应用的正常检测必不可少,配合zabbix等监控平台可以及时有效的发现问题。

不同的工具使用方式各有不同,需要根据实际场景确定。

空空如常

求真得真

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前后端分离开发

目录 前后合开发&#xff08;不推荐&#xff09; 前后端分离开发&#xff08;主流&#xff09; 项目开发的基本步骤 接口文档的管理平台--YApi 前后合开发&#xff08;不推荐&#xff09; 沟通成本高分工不明确不便于管理不便于扩展 前后端分离开发&#xff08;主流&…

让浮动元素在一行显示

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;HTMLCSS &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; <div class"wrap"><div class"item">1</div><di…

ubuntu实现自动挂载u盘

ubuntu实现自动挂载u盘 但是&#xff0c;有些设施可以在没有图形工具的情况下进行复制&#xff0c;并且在系统上占用的空间非常小。 例如&#xff0c;在我的设置中&#xff0c;我已经实现了USB自动挂载服务&#xff0c;而无需使用任何外部工具/服务&#xff0c;只有udev和syst…

Junit5相关技术

Selenium自动化测试框架 Junit针对Java的单元测试框架 拿一个技术写自动化测试用例&#xff08;Selenium3&#xff09; 拿一个技术管理已经编写好的测试用例(Junit5) 写代码前需要添加依赖&#xff1a;Junit5 一、注解 1.1 Test 表示当前这个方法是一个测试用例 1.2 Di…

DCN v2阅读笔记

Deformable ConvNets v2: More Deformable, Better Results 是 Deformable Convolutional Networks 研究的续作&#xff0c;发表在 CVPR 2019上。 作者对 DCNv1 的自适应行为进行研究&#xff0c;观察到虽然其神经特征的空间支持比常规的卷积神经网络更符合物体结构&#xff0…

2023年的无线蓝牙耳机哪些牌子好,真无线蓝牙耳机品牌排名

本文将为您详细介绍每款蓝牙耳机的设计特点、音质表现、续航能力和智能功能等关键信息。我们将提供客观、全面的分析&#xff0c;帮助您更好地了解每款产品的优势和适用场景&#xff1b;无论您是追求高保真音质的音乐发烧友&#xff0c;还是需要轻便舒适的耳机进行运动&#xf…

Kafka入门, 消费者工作流程(十八)

kafka消费方式 pull(拉)模式&#xff1a; consumer采用从broker中主动拉取数据。 Kafka采用这种方式。 push(推)模式&#xff1a; Kafka没有采用这种方式&#xff0c;因为由broker决定消息发送速率&#xff0c;很难适应所有消费者的速率。例如推送速度是50m/s&#xff0c;consu…

rocketmq客户端日志过大造成磁盘使用率占用过高

目录 问题现象 排查占用 自定义客户端日志配置未生效 总结 问题现象 收到项目报警&#xff1a;磁盘占用率超标通知 排查占用 从上述可以看出&#xff0c;实质是跟正常业务日志无关的&#xff0c;/home/work/log挂出来了&#xff0c;与/根目录下无关 查看根目录下日志占用…

frp实现远程开机

前一篇刷完小米路由器后&#xff0c;自带了frp&#xff0c;所以继续走着 前提&#xff1a;(我有阿里云公网服务器、域名&#xff09; 第一步&#xff0c;配置路由器&#xff08;客户端&#xff09;frp [common] server_addr frp.xxx.cn #需要在阿里云服务器添加解析 serve…

【macOS 系列】如何取消程序坞下方app的未读消息的小红点

如何取消程序坞下方app的未读消息的小红点 需要针对单独的软件一次设置&#xff0c;不能批量设置。将标记为APP图标取消勾选即可。

【UnityDOTS 七】IAspect的使用

IAspect的使用 前言 IAspect是Unity DOTS中用来更方便组织数据集合的接口。可以将我们需要的数据集合放到一个IAspect中&#xff0c;然后用这个自定义的IAspect去进行查询。 一、IAspect是什么&#xff1f; 如上面官方文档说的&#xff0c;是一个高级的Component组合体。 可以…

Gartner发布2023新兴技术雷达图,超级自动化安全、生成式AI是高影响力技术

在Gartner发布的“2023新兴技术影响力雷达图”中&#xff0c;围绕智能世界、生产力革命、透明度和隐私****以及关键使能技术四大主题&#xff0c;对24种最具颠覆和市场变革性的新兴趋势和技术进行了评估。 其中&#xff0c;边缘AI、边缘计算机视觉处于雷达图核心位置&#xff…

Redis-问题

1.redis的槽是什么&#xff1f; Redis Cluster中有一个16384长度的槽的概念,他们的编号为0、1、2、3……16382、16383。这个槽是一个虚拟的槽,并不是真正存在的。 2.redis的槽有什么用&#xff1f; 缓存 对于高访问量的网站,缓存是提高性能的重要手段。使用Redis槽技术可以将…

机器学习23:《数据准备和特征工程-I》概述

机器学习帮助我们找到数据中的模式&#xff0c;然后我们用这些模式来预测新的数据点。为了获得正确的预测&#xff0c;我们必须构建数据集并正确地转换数据。在《数据准备和特征工程》系列文章中&#xff0c;笔者将重点介绍这两个关键步骤。在【机器学习7&#xff1a;特征工程】…

项目预算Budgeting 中英对照(PLM230 Unit4)

1、an estimate of the required funds 预估所需资金 2、correspond to the approved funds 符合批准的资金 3、availability control 可用性控制 4、be warned before the budget is exhausted 耗尽之前警告 5、The budget differs from the project cost plan is binding.…

为您的服务台提供6个基于AI的使用案例

人工智能&#xff08;AI&#xff09;正在向IT服务管理&#xff08;ITSM&#xff09;迈进&#xff0c;有望重新定义事物的工作方式。但是&#xff0c;人工智能是否会实现其承诺&#xff0c;并能够真正使ITSM更容易、更有效呢&#xff1f;这就是我们即将在此系列中所探讨的"…

计网笔记--网络层

1--网络层概述 网络层主要问题&#xff1a; ① 网络层向运输层提供怎样的服务&#xff1f; &#xff08;可靠或不可靠&#xff09; ② 网络层寻址问题&#xff08;IP 地址&#xff09; ③ 路由选择问题 &#xff08;路径&#xff09; 重点在于&#xff1a;TCP/IP协议栈 2--网络…

使用Jetpack Compose实现PopupMenu

Jetpack Compose是Google推出的现代化UI工具包&#xff0c;使用声明式UI模式构建用户界面。它有许多内建的Composable函数&#xff0c;让开发者可以轻松实现各种界面元素&#xff0c;包括PopupMenu。在这篇博客中&#xff0c;我们将深入研究如何在Jetpack Compose中创建PopupMe…

Reaxys数据库免费使用方法

Reaxys 于 2009 年推出&#xff0c;作为 CrossFire与Beilstein 数据库的后继者。Reaxys继承了基本化合物、化学反应、化学性质、相关文献数据、合成计划信息的物质数据检索功能&#xff0c;以及来自选定期刊和专利的实验程序。Reaxys是一款商业化学信息检索工具&#xff0c;一般…

VS2019 Web应用如何添加Area区域:新搭建基架的项目

貌似跟以往不一样&#xff0c;VS2019 Web应用如何添加Area区域&#xff1a;新搭建基架的项目&#xff0c;如下图&#xff1a; 1、右键项目添加 2、弹出“添加已搭建基架的新项”对话框&#xff0c;选择“区域” 3、填写新基架项目名称-Area 4、自动创建成功 5、后续添加控制器…