【opensips】客户端的注册

news2024/11/16 5:45:07

opensips的注册能力

opensips可以通过registrar模块实现注册的能力,
所有的账户信息默认是在opensips的subscibe表中,

subscribe表
默认的subscibe表结构如上图,

  • id是主键,
  • username是账户名
  • domain是opensips的域名
  • password是密码
  • email_address是邮件地址,一般不会使用该字段
  • ha1ha1b是用于鉴权,它们的生成方式如下:
    ha1 = md5(concat(username,":",domain,":",password))
    ha1b = md5(concat(username,"@",domain,":",domain,":",password))

客户端的注册流程

客户端通过REGISTER消息来注册,注册流程如下
在这里插入图片描述
第一个Register可能会不带任何鉴权信息,opensips会做鉴权。这些是需要写在opensips.cfg文件中
下面是一个示例片段,

if (is_method("REGISTER")) {
    if (!www_authorize("", "subscriber")) {
      www_challenge("", "0");
      exit;
    }
    # indicate that the client supports DTLS
	# so we know when he is called
    if (isflagset(SRC_WS)) {
			setbflag(DST_WS);
	}
    if (nat_uac_test("19")) {
                fix_nated_register();
    }
    if (!save("location","f")){
      sl_reply_error();
      exit;
    }
    exit;
  }

注:

  1. www_challenge是opensips发起鉴权请求
  2. 如果通过鉴权,客户端的信息会通过save函数保存到"location"表
  3. 如果客户端是走的ws或者wss协议过来的,通过设置DST_WS标值,可以在location表中记录
    判断客户端的协议,可以通过如下逻辑
if ($proto == "ws" || $proto == "wss") {
    setflag(SRC_WS);        
  }
  1. fix_nated_register会将客户端的出口IP(对于NAT有用)保存到location的received字段。

opensips中保存的注册信息

location表中的注册数据样例,
在这里插入图片描述

默认的字段比较多,不逐一介绍了。这里主要看几个重要的字段含义

  • Username:就是subscribe表中的username字段
  • contact:客户端注册消息中的contact header,它表明了客户端的地址
  • Recieved:上一节中介绍的,主要是客户端出口的公网信息;一般在NAT穿越过程中需要使用。如截图中的contact地址,明显就是一个无效的地址。信令返回时,会使用到Recieved中的地址做路由。
  • Expires:注册的超时时间
  • Cflags: 这里保存的是opensips中的bflag。这里看到的DST_WS,就是在上一节中setbflag(DST_WS);保存的。

注册到opensips的地址成为AOR (Address-of-Record)存于opensips的内存中,这里应该是共享内存中。

如何查看AOR呢? (2.x版本)

opensipsctl ul show可以看所有的AOR

opensipsctl ul show <username>
可以查看某一个具体的username的AOR
在这里插入图片描述

opensipsctl ul show --brief
查看所有AOR (简约信息)
在这里插入图片描述


如何去注册

在SIP中注册消息是REGISTER,但是却没有UNREGISTER消息。 那么,除了等注册超时外,怎么显示地去注册呢?

方法如下:

还是发送REGISTER消息,不过REGISTER消息中需要特殊处理一下,下面两种方式,

a) Expires Header值为0

样例如下:(注意Expires

REGISTER sip:XXX.XXX.XXX:5060 SIP/2.0
Via: SIP/2.0/UDP YYY.YYY.YYY.YYY:5060;branch=z9hG4bK3AF1E87
From: <sip:sip_user@XXX.XXX.XXX>;tag=48206668-C6C
To: <sip:sip_user@XXX.XXX.XXX>
Date: Tue, 21 May 2019 11:01:00 GMT
Call-ID: 8CFC113F-7AEE11E9-8525B193-993D21B5
User-Agent: Cisco-SIPGateway/IOS-12.x
Max-Forwards: 70
Timestamp: 1558436460
CSeq: 4 REGISTER
Contact: <sip:sip_user@YYY.YYY.YYY.YYY:5060>
Expires:  0
Supported: path
Content-Length: 0

该例子是从cisco网站上看到的,没有测试过。

b) 没有Expires Header;但是contact header中携带expires=0参数;

样例如下:(注意Contact

REGISTER sip:xxxxx.xxxxx.xxx:32060 SIP/2.0
Via: SIP/2.0/UDP 10.11.0.65:53310;branch=z9hG4bK-d87543-bb51c7089769c71a-1--d87543-;rport
Max-Forwards: 70
Contact: <sip:gw_61225552@xxx.xx.xx.xx:12887;rinstance=aec7db3ce165eaf1>;expires=0
To: "gw_61225552"<sip:gw_61225552@xxxxx.xxxxx.xxx:32060>
From: "gw_61225552"<sip:gw_61225552@xxxxx.xxxxx.xxx:32060>;tag=d71dd162
Call-ID: Y2JiMTIxODMzODZiNWMzN2E5MjIxZWQ5ZDkwM2ExMmY.
CSeq: 12 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: eyeBeam release 1011d stamp 40820

该例子是从eyeBeam客户端去注册或者关闭软件时抓包截取的。实测是有效的。

是否可以直接删除location中的数据字段来去注册?

答案是不可以的。 从上面的介绍可以看到,opensips中的注册信息其实分为两部分,location数据和内存中的AOR,如果仅仅是删除location表中的数据,opensips中还是存在AOR信息的。

所以删除location数据后,还需要执行opensipsctl ul rm <username>来删除AOR。
注意,该命令可能不会立刻生效,执行后要观察一下。

总之,不建议通过手动删除的方式去注册。还是通过上面一节介绍的方式,通过register来去注册。

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

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

相关文章

ChatGPT 全网最新开通账号教程

&#x1f986;博主介绍&#xff1a;小黄鸭技术 &#x1f308;擅长领域&#xff1a;Java、实用工具、运维 &#x1f440; 系列专栏&#xff1a;&#x1f4e2;开发工具 Java之路 八股文之路 &#x1f4e7;如果文章写作时有错误的地方&#xff0c;请各位大佬指正&#xff0c;一起进…

掌握Redis的Sentinel哨兵原理,助你拿到25k的offer

— — | M1 |---------| R1 | | S1 | | S2 | — — Configuration: quorum 1 master宕机&#xff0c;s1和s2中只要有1个哨兵认为master宕机就可以进行切换&#xff0c;同时会在s1和s2中选举出一个执行故障转移. 但此时&#xff0c;需要majority&#xff0c;也就是大多数…

微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)

文章目录一、前言二、前端代码wxml三、前端代码js四、后端java五、程序流程六、参考一、前言 大部分微信小程序开发者都会有这样的需求&#xff1a;获取小程序用户的手机号码。但是&#xff0c;因为小程序用户的手机号码属于重要信息&#xff0c;为了安全&#xff0c;所以需要如…

细粒度图像分类论文研读-2022

文章目录TransFG: A Transformer Architecture for Fine-grained RecognitionAbstractintroductionMethodVision transformer as feature extractorImage SequentializationPatch EmbeddingTransFG ArchitecturePart Selection ModuleConstrastive feature learningViT-FOD&…

从理论走向实战,阿里高工熬夜整理出的 Spring 源码速成笔记太香了

不知道大家面试的时候有没有被问到过 Spring 相关问题&#xff08;循环依赖、事务、生命周期、传播特性、IOC、AOP、设计模式、源码&#xff09;&#xff1f;反正我这个小学弟前段时间就来私信我说自己面试挂在了 Spring 这一块。&#xff08;原谅我不厚道地笑了&#xff0c;如…

毕设选题推荐基于python的django框架的自媒体社推广平台系统

&#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设老哥&#x1f525; &#x1f496; 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; Java实战项目专栏 Python实…

安卓APP源码和设计报告——运动健身教学

实 验 报 告 课程名称 实验名称 指导教师 专业 班级 学号 姓名 目 录 一、设计背景31. 需求分析32. 课题研究的目的和意义3二、系统需求分析与开发环境31. 系统功能需求32.系统界面需求43.开发环境4三、系统设计4四、系统测试51.脑模拟器测试6五、总结与展望6六、重要…

YoloV7目标检测(Pytorch版)【详解】

文章目录一、网络结构1、总体网络结构&#xff08;backbone&#xff09;2、主干网络介绍&#xff08;backbone&#xff09;2.1 多分支模块堆叠2.2 下采样网络结构2.3 整个backbone代码3、FPN特征金字塔二、预测结果的解码一、网络结构 1、总体网络结构&#xff08;backbone&am…

【组件开发实践】云巧流程组件对接实践

1. 用户需求 假设A系统有如下员工请假审批流场景&#xff1a; 员工请假小于等于3天&#xff0c;只需主管直接审批&#xff1b;大于3天需要主管先审批&#xff0c;审批通过后再由二级主管进行审批。当员工请假审批流节后后&#xff0c;需要通知A系统进行业务处理&#xff08;例…

Tomcat的IO模型

Tomcat支持一下几种IO模型&#xff1a; 支持的IO模型 特点 BIO 同步阻塞式IO&#xff0c;每一个请求都会创建一个线程&#xff0c;对性能开销大&#xff0c;不适合高并发场景。 NIO 同步非阻塞式IO&#xff0c;基于多路复用Selector监测连接状态通知线程处理&#xff0c;…

<C++>多态

文章目录1. 概念2. 多态的定义和实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写2.4 虚函数重写的两个例外&#xff1a;2.5 C11 override和final2.6 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类3.1 概念3.2 接口继承和实现继承3. 多态的原理3.1 虚函数表3.2 多态的原理3…

S2SH小区物业管理系统计算机专业毕业论文java毕业设计网站

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《S2SH小区物业管理系统》该项目采用技术&#xff1a;jsp struts2springhibernatecssjs等相关技术&#xff0c;项目含有源码、文档、配套开发软件…

java EE初阶 — wait 和 notify

文章目录1.wait 和 notify1.1 wait()方法1.2 notify()方法1.3 notifyAll()方法1.wait 和 notify 线程最大的问题是抢占式指向&#xff0c;随机调度。而写代码的时候&#xff0c;确定的东西会比较好。 于是就有程序猿发明了一些办法&#xff0c;来控制线程之间的执行顺序。 虽…

火山引擎 RTC 助力抖音百万并发“云侃球”

动手点关注干货不迷路1. 背景及技术挑战从电视看直播到手机电脑看直播&#xff0c;直播技术的发展让观众可以随时、随地观看自己喜欢的比赛&#xff0c;并且在看比赛时通过发送表情、发文字进行互动。但表情、文字承载的信息量较小、沟通效率低&#xff0c;我们无法像线下一起看…

一大波节日来袭,App Store节日营销请注意!

11 月已经过去&#xff0c;在过去的 11 月里&#xff0c;我们经历了万圣节、双 11、世界杯、感恩节、黑色星期五等非常重要的营销节点。 在新的 12 月&#xff0c;我们将迎来世界杯闭幕、双12、平安夜、圣诞节等重要营销机遇。在未来&#xff0c;我们还会迎来新春营销的重要机…

图形API学习工程(29):解决在shader文件中使用include的问题

工程GIT地址&#xff1a;https://gitee.com/yaksue/yaksue-graphics 无用的前言 看了下提交记录&#xff0c;这个工程上次更新已经是一年以前了。最近想想&#xff0c;还是应该回来再继续学学&#xff0c;暂且不论是否对工作有帮助&#xff0c;我在这个工程上获得的愉悦感相比…

Excel 是您最容易被忽视的设计工具 设计师对世界排名第一的电子表格工具的看法——如何构建信息图表、仪表板、演示文稿等

人们对 Excel 有很多误解。许多人认为它不过是处理临时预算的电子表格工具。或者它非常适合处理数据,但您需要像 PowerPoint 这样的单独工具才能很好地显示它。 这些误解限制了我们使用 Excel 的方式。 但 Excel 的功能远不止于此,它所需要的只是了解一些鲜为人知的功能。我…

JAVA SCRIPT设计模式--创建型设计模式之工厂方法(3)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

机器学习笔记之配分函数(三)对比散度

机器学习笔记之配分函数——对比散度引言回顾&#xff1a;随机最大似然求解模型参数的过程随机最大似然的缺陷吉布斯采样的缺陷与对比散度思想对比散度名称的由来从KL\mathcal K\mathcal LKL散度的角度描述极大似然估计对比散度的本质引言 上一节介绍了随机最大似然(Stochasti…

第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器

第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器 目录 第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器 ASCII码表 Scanner扫描器 1、Scanner含义 2、使用方法&#xff1a; next和nextLine的区别 next&#xff1a; nextLine&#…