公司售出的一套ippbx,下联iad,通过sip协议对接e1板卡,e1板通过dss1协议对接公网联通的程控交换机,反馈呼出电话接通后有一段时间被叫听不到声音,但过一段时间能恢复。还有问题是拨号后听到“您说拨打的用户现在不方便接听,请稍后再拨”。 C; J7 `: h5 }
4 r/ B4 a6 l. V. K) }2 G, G 远程登录上去抓包,没有抓到现象,用户反馈是偶发现象,为此登录ippbx启动远程抓包服务器,用wireshark对远程设备进行抓包,启动多文件抓包方法。如下图:
6 D2 D5 }; U M, U7 q+ m/ H5 B3 {$ n P, L% {3 C6 S
# ~% J6 Q/ r0 c- w
, v/ x& B5 X" v) P# H多文件抓包,每个包50M,进行预过滤,过滤udp port 5060 or udp portrange 10000-65500的sip消息和rtp流消息。0 ?9 z* |# p" m# R4 l M3 J
0 R( N7 U/ N" e; T w$ i用户反馈发生故障后,记录了用户的号码和主被叫号码和发生大概时间。找到对应时间的抓包,对抓包进行分析发现,5 `6 y; j Y+ R- G0 M4 T7 ^+ i0 G W
3 [+ b6 N) x) R) I4 u$ S% e6 M
& L( H B! W6 i5 n6 ~
( b8 R1 ]- w/ _3 I+ q是固定电话拨打手机,听一下是那方通话掉了?" t) s1 b* m: W; D7 ^5 D
. N4 x. H7 o, f) Q: X) E
( k2 c2 b0 e. I* n9 I3 q! D) B" E; B/ L3 @$ P
听到反馈的这次呼叫被叫说一段时间他听不到主机的声音,被叫的声音主叫听听着正常。被叫侧一段时间出现单通。9 m8 ?4 o. P; [3 F4 d+ K8 C
/ l9 e+ f+ G8 `5 E0 I
但单独听主叫发给被叫的声音,是连续的,没有中断,是e1板没有发出还是对方手机网络或者传输中间环节造成了单通?. |, L: Z: Z' }. c
3 G* V- L1 H( T+ N* k" H据此无法判断哪里故障,因为可能e1版有问题,或者手机网络有问题,或者中间经过节点出现了问题?( ]3 M* b) `* E' F6 K- P3 b
# E& L6 x3 C9 j- e. |4 T6 W+ x: I; m8 \6 }% ]9 {
! S ]9 y3 } e( d0 i% S8 K4 M. m; b. e因为用户仅反馈都是拨打手机出现的问题,无法确定是否是e1板发出的包有丢的还是对方手机网络的问题。
. s* D* c- R) Q5 C7 E- x
& j1 {' P, n6 q1 f觉得e1板硬件出问题,应该出去的所以呼叫都会有问题,现在反馈的仅仅是拨打手机出问题。8 u; W" d" z$ u& B1 G+ U; b# x
4 B0 Z4 o+ U3 W, t3 T, U/ D) i% [7 [
没有头绪,不知道怎么查找,因为e1发出的码流无法抓取监听,不能确定e1发出的有没问题?
; I3 Q2 h3 D; T! N0 j( k3 o7 Z1 S" D8 z/ L/ E; q# ?
再去查看拨出“听到无法接通“”提示音的问题,发现下面现象:
5 g g# o ]( J& X% g" R1 l E
{7 P$ Y8 B+ G6 Y |# a) c9 n W! ^( M" _. s4 t+ L& C
1 s$ a& C; l- y* m' M) ^' U2 B0 S; I( ?$ n" C1 P, o$ q
4 s2 M5 s& v3 B; J4 O发现是转给e1板的呼叫没有收到后向消息,等超时后,ippbx给iad放音,释放了呼叫。4 n# u$ B( }9 C A+ o! U
2 a1 e+ o! p4 d: w Q1 f) v转给e1板的消息没有应答,100trying没有收到,5秒超时,ippbx直接给下面的iad放音了,暂时无法接通。2 O, W0 a) a8 a7 n2 ^5 J
w' k: a6 d4 i" m奇怪为什么e1板回invite的响应呢?要么没收到,要么收到了没回?这两种情况。
# n, n' s0 G h. E* Q% ]! r& N6 f* [1 Z# U/ \" R5 a
看这几个invite有啥特殊的地方?2 y- P6 n/ j5 j8 S' a
5 M3 w5 P2 r1 r+ F& q1 G- J; {8 A- D( ?3 c* e3 F
3 M6 Z0 P1 Y5 W
显然不是我司的产品00-0e-5e打头的mac地址。+ e7 ~8 D. t) T3 l6 ~
0 X J( e: n* \& D
对比正常呼叫的mac地址! q# E6 o/ X5 f9 ~$ C
* ]/ L; e# Y! |7 ]9 K6 a
7 O1 Y0 T! E, A4 p( G0 `6 e
% n* T( f+ |" g2 A7 g% B6 `5 ]4 J3 e据此,判断环境中存在两个172.31.234.108的ip地址,造成ippbx把invite消息发给了错误的mac地址,导致e1板没有收到这个invite消息,所以没有响应。当时没有抓arp包,应该是这个设备发出的查询172.31.234.220的mac地址,或者ippbx发出查询172.31.234.108的mac地址,这个冲突的设备回了,导致ippbx的mac地址被更新,导致的故障。: y8 f2 b+ L3 }' o4 x. H, p. K
' t* |0 ~ r9 J/ k4 z8 g" Q; i5 t
检查下面的iad有一个172.31.234.108的设备:4 ]6 T6 p( `7 @- X( T% B
H0 f% C4 Q) F v# }. G$ j
t$ r5 ^: Q d/ Z, X
, e8 Y0 }7 K7 t3 H7 k让现场更改这个ip地址,防止和e1板冲突,后故障消除。
/ Q3 d& N) C$ r+ T
# I& a- q g; N改天抓的包里:
) W }1 D: U7 z2 F! m4 g) L+ Q9 ~8 ]( }* b3 P% D+ v( Q1 S4 p3 |5 o: K
2 Z( ~+ P/ M( Q2 T
3 r6 E, }( e3 C' H, q. [( V8 H% h1 J2 n改成了这个ip地址。8 {4 L4 g1 p6 `1 I
: F/ I, A' s) G5 F5 I* K9 K, V
回头再去看单通的问题,发现单通的时间段里,消息发给了错误的mac地址。
' e6 ^ m* ~. }$ f- v* p; ^: |+ E; D9 J A% E& m3 d
# p' m& D0 v/ u' G! Y9 c4 U& \) P8 P% L) Z0 o0 Q
! \: \. e6 H8 R+ [9 C& m5 f& m; W; S0 G; T$ o6 w
0 x) D# u! z$ C6 D1 p% u8 N' Y, ]! {6 E" n& w' w
- W1 @) w. V. c
) h9 d! n# G2 t' a. C$ P
. ^) k/ ]" _6 \' b0 H' h: F4 D) I9 f; g+ X6 s
- T% X9 f- S- r4 Q# f6 M7 @8 a1 l0 v
8 \$ N$ L+ z& s w) y结论:ip冲突导致单通和呼叫不通,arp单播消息导致mac地址被更改为错误的,导致ip层消息发给错误的地方,导致奇怪现象的发生。改天抓的包如下:- o9 Q. d: p' S- o. T L7 U
$ \0 @+ m9 F: g. q7 D
/ q6 @2 n9 z$ L! z! u; H8 F& x2 C, K0 F3 y4 |5 [ s7 r, Y( l3 x$ i
经验:不是下面那个拨叫不通听提示音的问题,还发现不了是ip冲突,以后遇到此类文件,还真得注意了,抓包要抓arp和sip协议和rtp协议和icmp协议(rtp发错地方会有icmp的提示),这样好排查故障。7 c# f& R8 T& p: _$ } l
1 _8 y1 v, x3 m' ^, R- |1 W8 g
wireshark里的ctrl+f可以快速找到字符串和16进制串,查找rtp的ssrc可以确定一个方向的语音流。sip contains 号码可以快速找到对应的通话流程包。9 ~2 A7 Y2 l: W
————————————————
' r: d% _/ [0 r版权声明:本文为CSDN博主「wj31932」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: @! w/ }' T- M# z& _% |8 A
原文链接:https://blog.csdn.net/wj31932/article/details/100057318
3 Y% j( u! x; ~) |+ i; z. o5 O* |8 A0 p# p v
|