1. 0d0a的问题

每个报文结束的时候一般要有0d0a标志,SIPp生成的报文有两种情况:

a.有两对0d0a:不带媒体信息的各种报文(这个貌似是正常的)

b.没有0d0a:带媒体信息的各种报文(这个应该是有一对0d0a)

对于b情况,一般request是没问题的,但是response出现过没有0d0a结束符号就不被认可的问题。

祖传解决方法:媒体信息最后另起一行加一个“.”,基本就可以蒙混过关了。

2. 自动答复的问题

其实这个问题应该算是功能有限造成的。SIPp有一个参数,就是-aa,作用就是自动200 OK答复INFO、UPDATE和NOTIFY。这个功能虽然解决了一部分UAC功能限制问题,但缺点就是这里的200 OK是没有媒体信息并且不能定制的。而很多时候的UPDATE信令是需要你返回带媒体信息的200 OK以求确认的。目前除了修改并编译源文件,恐怕没有啥好方法解决这个问题。

当然,想要彻底避免这个问题就要采取第三个BUG的解决方法,用UAS代替UAC。

3. UAC和UAS的问题

相信用过SIPp的人都知道,SIPp是分为UAC场景和UAS场景的。一个是客户端、一个是服务端。客户端只能接收response,对request置之不理(认为是non-SIP报文)。服务端接收各种报文,但场景必须以接收报文开始。

这个问题是老大难问题了。不知道为啥那帮人非要搞什么UAC和UAS,都是报文,为啥可以接收response,不能接收request?!真不知道开发SIPp的人是怎么想的,这样分工是方便了用户还是麻烦了用户呢。

圡人解决方法:先看看那些外国人的圡办法,有人为了解决这个问题,做了个patch。搞个了什么prescenario和postscenario,试了一下,貌似就是搞了连续运行的三个场景- -! pre场景是UAC,到需要响应request的时候进入main场景UAS,post场景不知道有啥特别的用处。这个办法由于他的局限性和某些BUG(试了几次就发现了不少问题),没有特别深入的研究。不过最大的问题是:sourceforge上只有对应于某个早期版本的patch文件,06-04-11版本,那个时候的SIPp貌似都不支持openssl和pcapplay啊!

链接在这里:http://sourceforge.net/tracker/index.php?func=detail&aid=1485741&group_id=104305&atid=637566

祖传解决方法:这个方法我打算申请国家专利呢\(^o^)/~,如果你有幸看到了,使用的时候要心存感激啊,阿门!~~\(≧▽≦)/~

我用的方法就是伪造IP法。

UAS是全功能的,但是就是需要触发才能运行。但是我们往往是想让场景按照某个频率发出请求,然后响应的。对于这种情况,我们先写好UAS脚本(不考虑触发问题),写好后在最前面加上<recv request="ANY" />。也就是说,当UAS收到了SIP协议"ANY"指令的时候,就开始工作(这里的ANY可以是任何值,只要按照SIP协议构造报文就好了)。

下一步,可能有的同志会天真的想,在本机再开一个SIPp,按照指定频率发送某个报文不就行了。但是这样是行不通的,因为SIPp的UAS场景只会对发来信息的IP做反馈,就算你调用场景的时候指定了remote_IP,也是没用的。于是,伪造IP法上场了。利用程序生成修改了IP头的报文,其中IP和端口要设置成你要测试的目标服务器端口。然后,按照指定频率批量发送SIP报文给SIPp的UAS场景,激发场景的运行。

这里要注意两点:

1.伪造IP头需要调用的函数在windows2000以后的版本都被和谐了,因此可以考虑使用虚拟机的方式在win2000下跑程序。网络链接要用bridge方式,为啥我就不说了。

2.你构造的SIP报文一定要有不同的Call-ID,否则SIPp会认为是同一个呼叫而不会再理会。

还是那句话,当你用了我的技术为自己带来收入的同时,别忘记心存感激~ 如果以后你也有技术了,请分享给大家╭(╯3╰)╮

国内关于SIPp的介绍太少了,那些凤毛麟角的介绍也都是菜鸟级或者是装逼级的。有的人明明搞明白了,却说的含糊其辞,让新手无所适从。(#‵′)凸

长此以往,国人的技术水平如何提高?!~(=@__@=)

文章版权:杜斟的个人博客 - 个人技术分享

本文链接:http://mcat.cc/index.php/archives/570/

转载请注明文章原始出处 !

添加新评论

返回顶部