问题现象:
两终端(P1和P2)之间互相发送消息,P1给P2发送,P2无法收到P1发送的MESSAGE消息。
分析步骤:
1. 首先,在IPBX上进行抓包
2. 其次,分析P1发送给IPBX的SIP数据包,发现P1发送的MESSAGE消息正确
3. 再次,分析IPBX发送给P2的MESSAGE消息,发现IPBX发送的MESSAGE请求消息中REQUEST-URL的IP地址为0.0.0.0,TO头域中的IP地址为0.0.0.0。
4. 接下来,根据#3,分析得出的结论注册消息引起该问题,因此在IPBX上重新抓包,从P2终端注册开始进行抓包
5. 最后,从新分析新抓的数据包发现,P2进行注册时Contact头域中的IP地址为0.0.0.0。
6. 修改P2的REGISTER消息中Contact头域IP地址为后续接收消息的真实地址后,“MESSAGE消息发送失败”问题得以解决。
Contact头域中IP地址为0.0.0.0的REGISTER消息
REGISTER sip:172.16.250.127:5060 SIP/2.0
Via: SIP/2.0/UDP172.16.251.6:5060;rport;branch=z9hG4bK277864671
From:<sip:9990@172.16.250.127:5060>;tag=1612916590
To: <sip:9990@172.16.250.127:5060>
Call-ID: 1256797518
CSeq: 1 REGISTER
Contact: <sip:9990@0.0.0.0:5060>
Max-Forwards: 70
Expires: 120
Content-Length: 0
失败的MESSAGE消息:
MESSAGE sip:9990@0.0.0.0SIP/2.0
Via: SIP/2.0/UDP172.16.250.127:5060;branch=z9hG4bK7f83d44b
From: "8000"<sip:8000@172.16.250.127>;tag=2e951b11
To: <sip:9990@0.0.0.0>
Call-ID:1439365445285ae76a06611bc14cf06ab7@7ffa10ac
CSeq: 1590 MESSAGE
Max-Forwards: 70
Content-Type: text/plain
Content-Length: 5
test4