公司售出的一套ippbx,下联iad,通过sip协议对接e1板卡,e1板通过dss1协议对接公网联通的程控交换机,反馈呼出电话接通后有一段时间被叫听不到声音,但过一段时间能恢复。还有问题是拨号后听到“您说拨打的用户现在不方便接听,请稍后再拨”。$ W5 Z1 m# K z2 t2 C: `3 ^
" I4 p) t* Q% f w
远程登录上去抓包,没有抓到现象,用户反馈是偶发现象,为此登录ippbx启动远程抓包服务器,用wireshark对远程设备进行抓包,启动多文件抓包方法。如下图:$ V6 [; R) Q( T% t' d" S
4 n+ U- H# P1 J9 s G( h+ V
9 @) S0 G0 e! o! D
/ g- k* |) b1 C( `. T: B多文件抓包,每个包50M,进行预过滤,过滤udp port 5060 or udp portrange 10000-65500的sip消息和rtp流消息。
9 I3 t, a) h- _" e$ c8 i h* v+ \" S" u' G& b. f
用户反馈发生故障后,记录了用户的号码和主被叫号码和发生大概时间。找到对应时间的抓包,对抓包进行分析发现,2 Z2 W. o" H" P) B8 L
9 |; E, ~1 S/ q
1 z1 k9 c! ` l) R+ u
% d' I* ^; V4 M$ Y! p/ |7 i3 \
是固定电话拨打手机,听一下是那方通话掉了?, |+ g2 \; I" ~: U
3 v" e0 b: m4 Y( c# A! A1 f7 c
+ G( Z! p% D3 G) W, f& u" d2 K f, J Q
听到反馈的这次呼叫被叫说一段时间他听不到主机的声音,被叫的声音主叫听听着正常。被叫侧一段时间出现单通。7 x( Z; O9 `9 y! u- _
- ]! {( k* S; R. a" @1 r/ ~/ e/ H+ ?但单独听主叫发给被叫的声音,是连续的,没有中断,是e1板没有发出还是对方手机网络或者传输中间环节造成了单通?: d& S1 \! E6 O8 Q0 q7 Z
+ ?' ^7 S( j7 v9 J* C' m9 b据此无法判断哪里故障,因为可能e1版有问题,或者手机网络有问题,或者中间经过节点出现了问题?
$ y J5 E( K O% q" K) R' e6 X0 R, Z# C
( m5 g X1 F- x$ Q: J7 d
8 N' m8 @1 j8 Q* I% ~ d. ?因为用户仅反馈都是拨打手机出现的问题,无法确定是否是e1板发出的包有丢的还是对方手机网络的问题。
% A7 {6 L/ Z# _* V
/ i# T' {& J; [' Q: l% [: }+ i觉得e1板硬件出问题,应该出去的所以呼叫都会有问题,现在反馈的仅仅是拨打手机出问题。
4 m- p: D; S; z
% j9 c; {/ f; B s0 u8 D没有头绪,不知道怎么查找,因为e1发出的码流无法抓取监听,不能确定e1发出的有没问题?
$ C- j* G2 ~; }1 S5 Q' { G% h; R0 u# F0 F# ]3 v9 p, Z
再去查看拨出“听到无法接通“”提示音的问题,发现下面现象:
5 G) H$ `/ n" M. t l2 j
: u% B( f% w/ R+ T/ D( }
B) H4 j8 i9 I) R' ~/ R+ k. w
" D) u: T: G% ?) w7 T0 j! E7 D! a' ~! K
) ], M+ C- I0 e' |7 c
发现是转给e1板的呼叫没有收到后向消息,等超时后,ippbx给iad放音,释放了呼叫。
: w. ?2 G5 L) d# k4 i( \+ H! g! k6 v4 m5 c
转给e1板的消息没有应答,100trying没有收到,5秒超时,ippbx直接给下面的iad放音了,暂时无法接通。" k& t/ T2 V( x
, I. t8 @( h4 J4 {4 @* p
奇怪为什么e1板回invite的响应呢?要么没收到,要么收到了没回?这两种情况。
' G% y# e, o) a/ D1 p% j8 W) F& s/ T
& O* R; ~9 I) W* G; }! r$ ?看这几个invite有啥特殊的地方?
* N8 k0 z$ A: T% B- ~: Z& [4 M+ b } T6 K
( H# K' }3 b+ I+ ^7 b9 Q+ N5 c
; Q/ f1 q* l5 R' h+ S! e% K( e. g7 P显然不是我司的产品00-0e-5e打头的mac地址。
- t. N: h4 B" ^) T/ i. H, h/ D3 g( O: B
对比正常呼叫的mac地址
; Y6 Q% T, f9 L7 [+ H' b
- p \1 o% [7 z2 m# ~, W
! a; Y8 ^2 C6 T! J/ w1 a* I
& e( T$ v: t, s9 I# R据此,判断环境中存在两个172.31.234.108的ip地址,造成ippbx把invite消息发给了错误的mac地址,导致e1板没有收到这个invite消息,所以没有响应。当时没有抓arp包,应该是这个设备发出的查询172.31.234.220的mac地址,或者ippbx发出查询172.31.234.108的mac地址,这个冲突的设备回了,导致ippbx的mac地址被更新,导致的故障。
/ g2 x; z: Z& G( j( Q P3 j( c
% Q2 E* ^, s6 e1 @: v检查下面的iad有一个172.31.234.108的设备:3 I2 ~2 V7 k- Q" k
@, P2 ? l9 ~) i1 ~* P/ e" x6 [$ S
( q1 W7 e6 g6 f3 n+ k! ]
( \+ o1 l% t& {/ N让现场更改这个ip地址,防止和e1板冲突,后故障消除。& H8 h. `$ J# F
* x) c# F q7 b" `改天抓的包里:
- T1 m$ F1 i% N$ S# h/ v8 u9 w
! o3 p$ o' }% i# O5 c4 Z9 c9 {0 ?# v# ?( S1 X0 J* ~
5 X8 j. [- j( f6 F4 D+ Y# @) S% g改成了这个ip地址。) v! v& T, n4 O9 k$ o$ P$ s
! S- Q4 ~( q- d$ j回头再去看单通的问题,发现单通的时间段里,消息发给了错误的mac地址。
7 }6 l% O, b: j" V% F9 l, u2 {
8 M! B: U1 B# Z1 h/ B$ P. J( p
% J3 q$ R' V* C \7 @2 y J7 _) z
/ E; ^' U( C5 ^! k: n; Z
- k. D' {# s1 }) W2 D. q2 D; T2 H! K7 I
& a1 B3 ~. L8 T4 Y, c
+ y) s/ t3 E* }4 A& r8 e/ n; h+ T% @: M
" d- J. w+ p4 O
, v, u/ @+ y' i+ M0 t8 P
/ \' g: R/ r p$ r, c
6 \0 x# s1 n) W
% [! Q% F' |& K: i$ X
结论:ip冲突导致单通和呼叫不通,arp单播消息导致mac地址被更改为错误的,导致ip层消息发给错误的地方,导致奇怪现象的发生。改天抓的包如下:
3 U3 \! F! I# ^6 ]( ~) P" ?1 x% P( O
- w9 E$ u, j* u+ ], g; O$ w, I* X' l/ w! a7 Q: p) M/ o7 T
& t, m6 o+ P- k0 p; r4 ]. o经验:不是下面那个拨叫不通听提示音的问题,还发现不了是ip冲突,以后遇到此类文件,还真得注意了,抓包要抓arp和sip协议和rtp协议和icmp协议(rtp发错地方会有icmp的提示),这样好排查故障。
- R/ ?. y- E7 x+ d' k0 A3 G* J x6 t+ J% H* }
wireshark里的ctrl+f可以快速找到字符串和16进制串,查找rtp的ssrc可以确定一个方向的语音流。sip contains 号码可以快速找到对应的通话流程包。/ b9 j+ U# l" u$ d0 o
————————————————
( r8 W6 g0 l) N版权声明:本文为CSDN博主「wj31932」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
% D1 H& x' |" V, A& f7 s原文链接:https://blog.csdn.net/wj31932/article/details/100057318
+ `/ \ w4 `( i$ T; E+ i( C7 j8 L t9 S' G
|