2013年1月21日 星期一

ONVIF -- 重現錯誤的方式

在 client 與 server 的互通測試過程中,有時候客戶僅會使用我們所提供的client進行測試,但是卻不會想要讓我們擁有他們的server以自行進行測試。如此一旦遇到問題時,便只能夠靠 wireshark 封包來分析猜測可能原因。Debug工作將會變得非常不方便。

下面介紹的便是如何藉著 wireshark 封包的內容,讓問題重現。



1. 假設要手動連接某台 web server,重現某一個導致錯誤的HTTP Request,此時可以使用netcat,其作法如下:
$ cat request.xml | nc 192.168.0.2 80 
其中 request.xml 就是 wireshark 內的封包內容,例如下面這個例子:
POST /onvif/subscribe_service HTTP/1.0
Content-length: 2295
Content-type: application/soap+xml; charset=uft-8
Host: 192.168.0.2 User-Agent: ApacheBench/2.3
Accept: */*  
 <soap-env:envelope>omit</soap-env:envelope>
 
2. 假設需要多次重複某個步驟才會導致錯誤,則可以使用apache bench,例如若要重複發出100次request, 其作法如下:
$ ab -T "application/soap+xml; charset=uft-8" -p request.xml -n 100 -c 1 http://192.168.0.2/onvif/device_service

 
3. 假設需要結合多個步驟才能重現錯誤,則可以自行撰寫 script,重複上述兩種指令,例如撰寫script內容如下:
$ cat request_1.xml | nc 192.168.0.2 80
$ cat request_2.xml | nc 192.168.0.2 80
$ cat request_3.xml | nc 192.168.0.2 80

同樣可用來重送封包工具還有




參考資料
  1. http://httpd.apache.org/docs/2.2/programs/ab.html
  2. http://damithakumarage.wordpress.com/2008/07/11/benchmark-testing-tools-for-web-services/
  3. http://stackoverflow.com/questions/515328/good-tool-for-testing-socket-connections