实际抓包案例:
案例一:注册和注销(鉴权和不鉴权)
(1)注册不鉴权
注册采用的是Register方法,下级向上级发生register请求,携带下级域编码。
上级处理请求后给下级返回结果,注册成功则返回200ok,注册失败则返回 4XX。
在会话注册协议中中可以看到从下级来的下级域编码,下级IP以及下级接口。使用的protocol为sip(会话发起或会话注册协议)
(2)注册鉴权
注册包含鉴权采用的Register方法,下级想上级发送不带鉴权信息的register请求,这时候上级返回下级401的错误。
下级想上级发送携带鉴权信息的Register请求,上级包下级返回处理结果。注册成功返回200,失败返回4XX.
其中鉴权信息在会话发起协议下的信息头部中的[truncated](截断)值中包含注册用户名密码,注册时expires(失效)值大于0
(3)注销不鉴权
注销的时候在会话发起协议中的信息头部下的Contact中的expires(失效)值等于0。(注册的时候expires值大于0)
上级处理请求后给下级返回结果,注销成功则返回200ok,注册失败则返回 4xx。
(4)注销鉴权
注销的时候在会话发起协议中的信息头部下的Contact中的expires(失效)值等于0。(注册的时候expires值大于0)
同理上级处理请求后给下级返回结果,注销成功则返回200ok,注销失败则返回 4xx。
案例二:心跳检测
(1)心跳
国标里面很多信令采用Message方法。区别不同的信令可以在sip消息的消息体里面的cmdType值来区分,心跳的cmdtype为KeepLive。
心跳采用Message方法。下级向上级发送message请求。上级向下级返回处理结果,成功返回200,失败为4XX。
案例三:目录的检索和请求
(1)目录检索、请求和推送
Ⅰ.目录检索的cmdtype为catalog。DeviceID值为下级域编码或者目录编号详细步骤为,首先上级向下级发送检索目录的message请求,消息体里面携带下级域编码或者下级目录编码。其次下级向上级返回处理结果,200成功或者4XX失败。该结果不携带目录信息。再次如果返回结果成功,下级向上级发送message请求,message消息体里面携带目录信息。
Ⅱ.目录检索响应,采用message方法。信息体中携带目录编号和父节点编号,采用的cmdtype为catalog(目录)。
Ⅲ.目录推送采用Notify方法。下级向上级发送notify方法,消息体携带目录信息。上级返回处理结果200成功或者4xx失败。(会话发起协议为notify)
案例四:预览请求和响应
(1)预览请求
在会话发起协议中可以看到使用的方法为Invite(邀请)
在session name中我们可以看到 play为预览 playback为回放,下载为Download。在connection information中可以看到上级收流IP地址。
在Media Description name and address中可以看到上级收流的端口。
上级向下级发送Invite消息,消息体携带SDP消息,包含能力集,上级收流IP地址和端口。
下级返回处理结果成功为200,失败为4xx。
上级向下级发送ACK信令,下级发流
关闭预览过程马上向下级发送BYE请求。
下级返回BYE处理结果。
(2)预览响应
下级回复(上级的Invite请求)成功,200成功协议中携带了下级发流的IP和端口。
在connection information中可以看到下级发流IP地址。
在Media Description name and address中可以看到下级发送的端口。
SDP:交换SDP的目的是为了让双方知道彼此有哪些能力,根据双方各自的能力进行协商,协商出双方认可的音视频编解码器、编解码器相关参数(如音频通道数、采样率等)和传输协议等信息。
什么是SDP点击查阅
(3)预览码流
使用的协议为UDP,会话发起协议被Data代替。数据长度发送变化。信息包含了发流端口和收流端口。