关键词不能为空

当前您在: 主页 > 英语 >

飞信协议分析

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2020-10-31 17:46
tags:5368

日语学习方法-壁虱

2020年10月31日发(作者:荆青)


一、使用的协议
飞信是用混合协议的:
1、基于HTTP(应该是XML Web Services)进行获取系统配置、更新程序、注册用户
2、基于HTTPS进行登录时密码验证
3、应用层协议是SIP协议,但不是标准的,应 该是自创的,所有交互过程如发消息、
短信通过SIP协议进行。
飞信的SIP协议栈实现的是TCP、HTTP承载
承载方式:连接服务器的8080端口 ,这时在客户端的“网络设置”中显示的是
“TCP直接连接”,SIP信令直接就放在TCP的包中。
承载方式:连接服务器的80端口,采用POST方式,将信令包在POST请示中,
这时在客 户端的“网络设置”中显示的是“HTTP直接连接”
因为是TCP和HTTP承载,所以其包格式 是非常清楚的,那么注意力就可以直接放到
SIP协议或SIP信令上。
总的来说,飞信协 议是比较规范和清晰,但协议本身是复杂的,另外,飞信的协议是明
文,这一点如同MSN,是不如QQ ,因此,通过飞信的交谈过程是可轻易截获的。 而且其
协议效率比较低。
二、三种服务器
与MSN类似,飞信也有三类服务器,每种服务器各司其职:
登陆验证服务器:飞信每次客户登陆时,首先连接 即
登陆验证服务器,如果是首次登陆飞信 ,这个服务器会返回一个配置文件并保存在本地,这
个文件中包含了中心服务器的IP 地址。
中心服务器:在登录验证服务器成功验证用户身份后,用户即可登录中心服务器,这个
TCP 连接将一直保持连通直到用户退出飞信。这个与中心服务器的连接在整个飞信的系统
架构中起到控制的作 用。它能够维持本用户的联系人的所有出席信息,如上线、下线及是否
繁忙等状态。不仅如此,当用户发 起一个新的聊天会话时,中心服务器会指定一个转发服务
器负责此次会话。
转发服务器:被用 来负责管理用户与其他用户之间的交互,当用户关闭与其他用户聊天
的窗口时,与转发服务器的连接就将 结束。除此之外,转发服务器还负责文件传输、音视频
聊天的邀请。
飞信系统还不具备将客户 在服务器之间的转移的功能,中心服务器只能强制关闭与客户
的连接,强迫其重新登录。
三、数据包格式
同MSN一样,飞信也采用基于文本的传输格式,其中,请求头是客户向服务 器发送的包
头,而响应头是由服务器向客户端发送的包头。请求头的格式为方法+资源路径+SIP协议 版
本号+rn ,而方法为一个不定长的ASCII 字符串。响应头的格式为SIP-C 协议版本号 +状
态码+状态码对应的附加信息+rn。状态码为一个3位的数字,其不同数位数字表示不同的响应状态,类似于HTTP 协议的响应头的状态码。
每一个消息头的格式为:消息头字段+“:” +消息头取值。消息头字段表示一些通信中
必要的信息,如f 表示from,即发送此消息的用户的ID;t 表示to,即发送的目标用户的ID;
l 表示length,即实体内容的长度。



? 飞信的SIP-C2.0协议中用到的Header Field有:



< br>






From
MessageID
ReferredBy
ReferTo
Require
RosterManager
Source
Supported
To
Unsupported
WWWAuthenticate










Authorization
CallID
Contact
ContentEncoding
ContentLength
ContentType
CSeq
Date
EndPoints
Event
Expires

? 飞信所支持的SIP方法(SIP Method)有以下几种:
1. Ack方法。在 Fetion的SIP-C2.0中,缩写为,以下是一个Ack消息,会话
(Session)发起方 用以向SIP Proxy确认会话的开始:
A SIP-C2.0
I: 16
Q: 1 A
T: sip:987654321@;p=1234
F: 123456789
其中:123456789是发起方的SIP地址,这个显然没按SIP标准来表 达,只是用了一个飞
信号码。sip:987654321@,这个是按标准表达的对方地址。
fy方法(Fetion缩写为,这不是个标准的SIP方法,微软扩展出这个
方法是为了支持大量用 户。以下是飞信的一个BENotify消息,表示用户987654321的在线
状态的变化:
BN 123456789 SIP-C2.0
Q: 13 BN
N: presence
X: xxxx
I: 9
L: xxx
< events>;p=xxxx


pe=
ent >
方法(Fetion缩写为),以下是一个BYE的请求消息,用以结束会话:
B SIP-C2.0
F: 123456789
I: 11
Q: 2 B
T: sip:987654321@;p=1234
方法(C),用以取消正在进行中的INVITE请求。
方法(IN),用以在SIP协议中 支持应用相关的控制信息,飞信传文件时,用到
了这个方法。这是RFC中的一个扩展。以下是一个IN FO方法的消息:
IN SIP-C2.0
F: 123456789
I: 22
Q: 3 IN
T: sip:987654321@;p=1234
L: 266
session- id=

?FileUri=xxxxxxxxxxxxx
方法(I),这是用建立会 话过程的SIP方法。以下是飞信的INVITE方法的一
个协议消息,表示用户123456789要 求和987654321建立会话,准备进行文本消息的通
信:
I SIP-C2.0
F: 123456789
I: 16
Q: 1 I
T: sip:987654321@;p=1234
K: texthtml-fragment
K: multiparty
L: 137
v=0
o=-0 0 IN :xxxx
s=session
c=IN IP4 :xxxx
t=0 0
m=message 1769 sip sip:123456789@;p=xxxx
e方法(M),这也是一个标准的SIP扩展,用以支持即时消息。以下是飞信
的一个Message消 息,用户123456789向用户987654321发消息说“Hello!你好” :
M SIP-C2.0
F: 123456789
I: 16
Q: 2 M


T: sip:987654321@;p=1972
C: texthtml-fragment
K: SaveHistory
L: 121
hello! Face='SimSun' Color='-16777216' Size='12'>你好
ate方法(NE G),这是一个IETF定义的SIP的方法,用以在会话建立
(INVITE)前的协商会话相关的参 数。
方法(N),这是IETF定义的一个SIP扩展方法,消息见前面的BENotify,这个< br>消息是需要进行回复的。
s方法(O),标准的SIP方法,用来查询对端或服务器的能力。比 如了解对
方支持什么编码类型。在飞信传文件时使用了以下消息:
O SIP-C2.0
F: 123456789
I: 22
Q: 2 O
K: ShareContent
T: sip:987654321@;p=xxxx
方法(R EF),这是已纳入RFC的一个SIP扩展方法,其功能是要求接受方通
过使用在请求中提供的联系地 址信息联系第三方。
er方法(R),这是SIP的标准方法,用来向服务器登记。如以下飞信在注< br>册时发出的消息:
R SIP-C2.0
F: 123456789
I: 1
Q: 2 R
A:
Digestresponse=
xxxxxxxxxxxxxxxxxx
L: 147
value=imple-im;im-session;temp- group
on;system-message
e方法(S),这是IETF定义的一个S IP扩展方法,用来向SIP服务器请求额外
的服务。如以下飞信发出的消息:
S SIP-C2.0
F: 123456789
I: 2
Q: 1 S
N: GetPersonalInfo
L: 172
attributes=>attributes=


以上是飞信客户端要求服务器返回用户信息。又如:
S SIP-C2.0
F: 123456789
I: 12
Q: 1 S
N: StartVoiceChat
L: 103
>这是通过服务器开始飞信语聊。
00:00:00.1234
ibe方法(SUB) ,这是IETF定义的一个SIP扩展方法,并被RFC接纳,见
RFC3265。这个方法被用来向服 务器订阅事件异步通知。服务器就会用NOTIFY或
BENOTIFY(微软扩展的)方法,将事件通 知给飞信客户端。如飞信订阅用户的presence
事件,比如上线啊,下线啊什么的:
SUB SIP-C2.0
F: 123456789
I: 1
Q: 1 SUB
N: presence
L: xxx
uri=>attributes=>types=
>
四、登陆
由于飞信的新版本登陆协议比以前的版本有了显著的变化,最明显的变化在于它对登 录
信息的加密处理上,旧版本的飞信登录信息的加密较为简单,几个字段这样加起来做散列,
然 后再那样加起来做散列,得出一个response传回服务器验证。而2010的登录信息处理采用
了 非对称加密RSA算法。以下主要介绍飞信2010的登录过程。
1. SSI登录
SSI 登录仍然采用了https登录,登录服务器是。登录参数变了,加上必
须的参数uri如下:
https:?mobileno=13xxxxxxxx&&do
mains=%%&&v4dige st-type=2&v4digest=pass
word
这里的密码也不再是v3里面的 明文密码了。其中demains里面有三个域名,第一个应该
是必须的,后两个域名未知,v4dig est-type是密码类型,有三种值:V3,V4Temp,V4。
v4digest就是密码了。
注册
R SIP-C4.0
F: 916098834
I: 1
Q: 1 R


CN: 1CF1A05B2DDADC70F82B16
CL: type=”pc” ,version=”3.6.1900″
这是sipC注册信息,CN就是旧版本里的cnouce , CL就是客户端信息了。服务器收到后回复
信令:
SIP-C4.0 401 Unauthoried
F: 916098834
I: 1
Q: 1 R < br>W:Digestalgorithm=”SHA1-sess-v4″,nonce=”389CE97 D594B290366DCD4CC2DA5368D”,k
ey=”D84CA40D849FEF 3B45F02BBA6900D2A1B3010001″,signature=”62F5BA9D914 6D477CDE
CAE1FD47098D0CABBFD31D683B5223B5D52″ < br>在这,key和signature的内容都删了一部分,key就是共享密钥,这个用来对验证信息做非对称加密用的,signature是签名,用来对密钥信息做验证的。
验证
R SIP-C4.0
F: 916098834
I: 1
Q: 2 R
A:Digest
response=”5041619340F10D101149E45 A8E2343294E8D5F4F5086C24703EE00CAA4DF8F9D
2951E 9F285C458F5567454F5C35084A8CB7C5E3AA8D31D1FC3B9DD7 CF395631E5EDE73E2E683D54
C9E521443D31792E18B81C A26542BF579F662459CD5F6E4C0EC29767B6C5F775C10AF19B 544B695
7AC98FF6A420C7486BE68837A576036118″,alg orithm=”SHA1-sess-v4″
AK: ak-value
L: 426
最关键的部分是通信sipC注册返回的信息来计算这个response,计算response共需 要用
到4个参数,publickey,nouce,password,aeskey。public key刚才注册返回的key值;nouce 注
册返回的nouce值;password用户密码;aeskey 用户通过 Rijndael算法生成的AES串。
response的计算规则是:
= nouce + password + aeskey
2.对str进行RSA非对 称加密,RSA算法在计算的时候需要Exponent(e,公钥指数,Modulus
(n , 模),D (d , 私钥指数),不过飞信在传递RSA参数的时候只是指定了e和n,e是截取
了公 钥的前256的字符,n是截取了公钥的256个以后的字符。
3.通过2计算出来的参数对str进行加密,得到的就是response值。

将验证信令发送到服务器之后服务器会返回用户的详细信息,这与之前的版本之比也是
一大改进,省去 了再额外构造信令去GetPersonalInfo。
五、通信
以下就两个用户间的聊天,即互相发送文本消息来看看飞信通过SIP-C协议的工作过
程。
假定有这么一个聊天过程是:飞信用户A(飞信号为123456789,飞信用TCP方式工作
在111.111.111.111:1111)双击好友列表中的飞信用户B(飞信号为987654321 ,飞
信用TCP方式工作在222.222.222.222:2222),这时聊天窗口弹出,用户A 对B发出:
测试“,然后用户A关闭了聊天窗口,结束了这次即时消息对话过程。


第一步:111.111.111.111:1111 >>>>>>>> 221.130.45.203:8080
I SIP-C2.0
F: 123456789
I: 16
Q: 1 I
T: sip:987654321@;p=1972
K: texthtml-fragment
K: multiparty
L: 137

v=0
o=-0 0 IN 111.111.111.111:1111
s=session
c=IN IP4 111.111.111.111:1111
t=0 0
m=message 1111 sip sip:123456789@;p=xxxx
上面是发到服务器的第一条消息, 是一个SIP协议的INVITE请求,发到飞信的服务器,
服务器地址是221.130.45.20 3,端口8080,协议是TCP,上面的SIP消息就直接放在TCP
的包中,UTF-8编码。 < br>消息的第1是请求行,I=INVITE,是请求对象(没用标准的uri),
是当前的SIP- C协议版本。
第2行开始是消息头:即From,标识从用户A(123456789)发出的请求( 依然没用
标准uri,标准的是sip:123456789@);即CallID,按标准的SIP的
规定,这应该是一个随机产生的一个全局唯一的标识符,它应该在客户端和服务器整个交互
的过 程中保持不变,但在飞信的SIP-C协议中,这是一个序列号,第一次与8080端口建立连
接发出第 一个请求时,这个值为1,以后每次发出一个请求则加1;即CSeq,也就是
Command Seq uence,它由一个整数的序列号和一个SIP方法组成,SIP方法与这个消息
的SIP方法相同, 这个序列号在一个会话过程中每次加1,这样来标识SIP消息的顺序;
就是To,即Supporte d,表示客户端所支持扩展;即Content-Length,就是消息体
的长度。
从v=0开始的是消息体,用SDP(Session Description Protocol)描述的,根据RFC:
v= (protocol version),在目前飞信的INVITE中,固定的v=0
o= (ownercreator and session identifier). 在目前飞信的INVITE中,前面是固
定的,后面是发起人(用户A)的IP地址和端口
s= (session name). 在目前飞信的INVITE中,固定的为s=session
c=* (connection information - not required if included in all media).在目前
飞信的INVITE中,除后面的发起人(用 户A)的IP地址和端口外,前面是固定的。
t= (time the session is active) 。在目前飞信的INVITE中,固定的为
m= (media name and transport address)。在目前飞信的INVITE中,是
发起人的TCP端口,后面 的sip:xxxxxxxx,是发起人的uri。
第二步:111.111.111.111:1111 <<<<<<<< 221.130.45.203:8080
SIP-C2.0 100 Trying
Q: 1 I
T: sip:987654321@;p=xxxx


I: 16
这是服务器回过来的对第一步的INVITE消息的一个RESPONSE,所以,I=16,Q=1 I。
表示正在查找用户B。
第三步:111.111.111.111:1111 <<<<<<<< 221.130.45.203:8080
SIP-C2.0 200 OK
Q: 1 I
K: texthtml-fragment
K: multiparty
T: sip:123456789@;p=xxx
I: 16
L: 135

v=0
o=-0 0 IN 222.222.222.222:2222
s=session
c=IN IP4 222.222.222.222:2222
t=0 0
m=message 2222 sip sip:987654321@;p=xxx
这是服务器转过来的用户B对用户A的INVI TE的回复,是:OK,其中
222.222.222.222:2222是用户B的IP和端口。
第四步:111.111.111.111:1111 >>>>>>>> 221.130.45.203:8080
A SIP-C2.0
I: 16
Q: 1 A
T: sip:987654321@;p=xxx
F: 123456789
接着,用户A发出ACK消息。
第五步:111.111.111.111:1111 >>>>>>>> 221.130.45.203:8080
M SIP-C2.0
F: 123456789
I: 16
Q: 2 M
T: sip:987654321@;p=xxxx
C: texthtml-fragment
K: SaveHistory
L: 121
hello! Face='SimSun' Color='-16777216' Size='12'>测试
这就是用户A向对方发的即时消息,内容是“hello!测试。这里用的是SIP Message方
法,消息体是XML表示的即时消息,消息头跟INVITE相似。
第六步:111.111.111.111:1111 <<<<<<<< 221.130.45.203:8080
SIP-C2.0 200 OK
Q: 2 M
T: sip:123456798@;p=xxxx


I: 16
D: Mon, 01 Mar 2011 00:00:00 GMT
XI: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
这是用户B收到第五步 发出的即时消息后回过来的RESPONSE,结果是OK,其中XI这
个消息头域的MessageI D。
第七步:111.111.111.111:1111 >>>>>>>> 221.130.45.203:8080
B SIP-C2.0
F: 123456789
I: 16
Q: 3 B
T: sip:987654321@;p=xxxxx
这是用户A开始关闭聊天窗口准备结束聊天了,向用户B发出了一个BYE的SIP请求消
息。
第八步:111.111.111.111:1111 <<<<<<<< 221.130.45.203:8080
SIP-C2.0 200 OK
Q: 3 B
T: sip:123456789@;p=xxxx
I: 16
这是最后用户B对对用户A发出的BYE的回复。
在用户B那边,整个交互过程跟用户A这边 对应,用户A在发出INVITE,要求和B会话,
而用户B这边则是回应邀请。
那发短信是怎么样的呢?也基本差不多,如发一个内容为test的短信到用户B时的SIP
Message请求消息是这样的:
111.111.111.111:1111 >>>>>>>> 221.130.45.203:8080
M SIP-C2.0
F: 12345678
I: 16
Q: 1 M
T: sip:987654321@;p=xxxx
N: SendSMS
L: 4
Test
以上分析都是飞信通过TCP直连方式工作时的情况,飞信通过HTTP直连工作过 程跟上
面完全一样,不同的是,连接的是221.130.45.203:80,协议是HTTP,采用 的POST请
求是:POST ?t=s&i=2 HTTP1.1,POST的数据分就是上面一样的SIP消息
了。

biu什么意思-头交


暴殄天物是什么意思-活体雕塑


英语b级听力-生旦净丑的意思


高中物理必修二课后习题答案-荷枪实弹的读音是什么


混账-擢发难数


留学培训班-好开头的成语


嘹的拼音-泰开头的成语


sophisticated-记载怎么读



本文更新与2020-10-31 17:46,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/435533.html

飞信协议分析的相关文章