SIP终端注册后无法收到呼入请求的情况说明

2023-10-14 18:30

本文主要是介绍SIP终端注册后无法收到呼入请求的情况说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SIP呼叫终端时,主动呼叫方无需注册,即可发送INVITE信令进行呼叫。
若本终端需要接受其他SIP终端的呼叫,则本终端一定要注册,否则其他终端无法呼入。

今天碰到了一个终端注册成功后,无法接受其他终端呼入请求的情况。
首先,本人的SIP服务器为自搭建的freeswitch,里面自己建了两个号码,2022053107和2022053102,其中本端SIP号为2022053102。freeswitch部署在公网上。

SIP终端部署在内网,若终端采取软电话linphone,其中一个linphone注册2022053107,另一个linphone注册2022053102。则本端的2022053102所在linphone可以接收到来自2022053107的呼叫。

本人的SIP终端为janus服务器(一个开源的webrtc服务端),此janus服务器注册SIP号码2022053102,注册成功,但是无法接收到2022053107的呼叫。
对应的示例图情况如下:
在这里插入图片描述

但是,如果将janus放置于公网,则其可以接收到来自2022053107的呼叫,对应的情况如下:
在这里插入图片描述

后面经过抓包比对,发现问题出现在REGISTER信令时的Contact域上,如下所示,janus所在服务器的本地ip是10.0.0.67(内网),注册时,向freeswitch发送的Contact的地址是内网地址,这个有问题,这个地址应该为内网地址对应的公网地址,因为freeswitch必须通过公网地址中转才能将信令发送到janus的内网地址。
在这里插入图片描述

正确的Contact域如下,可以看到,本内网对应的公网IP是60.12.13.106。
在这里插入图片描述
找到此问题,就需要在给予解决,本人在代码编写上参考了sofsip-cli,这个demo也是sofiasip的官方demo,实际上本人查出此问题的速度要快于修改此问题的速度。
关于sofsip-cli的使用,读者可以参考我写的两篇博客:
sofsip-cli使用
vs2017中调试sofsip-cli

顺带说下,本人用janus官方的很新的1.0.2版本,部署在内网,也存在接收不到其他终端呼入的情况,说明janus本身就存在着此问题。

janus的官网地址是可以接收其他终端的呼通,官方测试地址如下:
https://janus.conf.meetecho.com/siptest.html

同时在freeswitch上也可以通过命令sofia status profile internal reg查询内部的注册用户:
如下所示,Contact对应的网已经为公网,说明下10.0.0.28是freeswitch的内网地址

Call-ID:    	a5e4efbf-8336-123b-c383-000c29915b26
User:       	2022053102@10.0.0.28
Contact:    	"2022053102" <sip:2022053102@60.12.13.106:24385;transport=udp>
Agent:      	sofia-sip/1.12.11devel
Status:     	Registered(UDP)(unknown) EXP(2022-07-21 10:25:09) EXPSECS(3652)
Ping-Status:	Reachable
Ping-Time:	0.00
Host:       	sip-jinxin.novalocal
IP:         	60.12.13.106
Port:       	24385
Auth-User:  	2022053102
Auth-Realm: 	111.161.xx.xx
MWI-Account:	2022053102@10.0.0.28

在出问题时,freeswitch终端上打印的2022053102的注册信息如下,Contact域为内网。
注意:10.0.0.28是freeswitch的内网地址,对应的公网地址是111.161.xx.xx(由于ip敏感,只写了前两个数字),跟janus的内网地址10.0.0.67(公网地址是60.12.13.106)不在同一个局域网里面,大家不要弄错了,它们对应的公网地址是不一样的。

Call-ID:    	c497dcdc-826f-123b-6b84-000c29915b26
User:       	2022053102@10.0.0.28
Contact:    	"2022053102" <sip:2022053102@10.0.0.67:59551>
Agent:      	SIP Plugin
Status:     	Registered(UDP)(unknown) EXP(2022-07-20 10:41:30) EXPSECS(2741)
Ping-Status:	Reachable
Ping-Time:	0.00
Host:       	sip-jinxin.novalocal
IP:         	60.12.13.106
Port:       	5079
Auth-User:  	2022053102
Auth-Realm: 	111.161.xx.xx
MWI-Account:	2022053102@10.0.0.28

这篇关于SIP终端注册后无法收到呼入请求的情况说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/212322

相关文章

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到