最近和學(xué)弟在調(diào)試一個(gè)GPRS通信模塊,需求是通過(guò)GPRS模塊通過(guò)http協(xié)議發(fā)送數(shù)據(jù)到服務(wù)器,但是http協(xié)議一直失敗,服務(wù)器返回400,通過(guò)查詢http狀態(tài)碼得知,http400錯(cuò)誤是請(qǐng)求無(wú)效,因?yàn)镚PRS模塊沒(méi)有實(shí)現(xiàn)http協(xié)議的封裝,需要在TCP協(xié)議的基礎(chǔ)上,手動(dòng)拼裝http格式的報(bào)文.所以初步猜測(cè)是http協(xié)議格式錯(cuò)誤導(dǎo)致的.
這時(shí)候,最簡(jiǎn)單有效的調(diào)錯(cuò)方式就是通過(guò)抓包分析,查看數(shù)據(jù)格式,然后修改.但是在GPRS模塊上沒(méi)法安裝抓包工具,只能在服務(wù)器上抓包,服務(wù)器是centos的,雖然有tcpdump工具,但是沒(méi)有界面,沒(méi)法具體分析數(shù)據(jù)包.直接使用tcpdump抓到的數(shù)據(jù)包,根本沒(méi)法分析好不.
在windows上,有wireshark這個(gè)工具,可以很方便的分析網(wǎng)絡(luò)數(shù)據(jù)包,這個(gè)軟件有多牛鼻就不用多說(shuō)了,所有經(jīng)過(guò)網(wǎng)卡數(shù)據(jù)都能抓到,配合圖形界面,可以很方便的查看分析數(shù)據(jù).不知能查看應(yīng)用層協(xié)議的數(shù)據(jù),網(wǎng)絡(luò)中的五層協(xié)議都能查看.
有沒(méi)有辦法把tcpdump和wireshark這兩個(gè)軟件結(jié)合起來(lái)使用呢???
辦法當(dāng)然是有的,把tcpdump抓取的數(shù)據(jù)轉(zhuǎn)存文件,然后用wireshark打開(kāi)文件,分析數(shù)據(jù).
1.開(kāi)啟tcpdump抓包,并將結(jié)果轉(zhuǎn)存為文件
tcpdump tcp -s 0 port 80 -w ./http.cap
說(shuō)一下這幾個(gè)參數(shù)
tcp
是指定抓取那種協(xié)議的數(shù)據(jù),因?yàn)槲覀円トttp協(xié)議,但是tcp不能指定http協(xié)議,但是http協(xié)議是基于TCP協(xié)議的,所以抓取TCP協(xié)議數(shù)據(jù).
-s 0
tcpdump 抓取數(shù)據(jù)包時(shí)默認(rèn)抓取長(zhǎng)度為68字節(jié)歼郭。加上-S 0 后可以抓到完整的數(shù)據(jù)包
port 80
我的服務(wù)器監(jiān)聽(tīng)的80端口,所以只抓取80端口的數(shù)據(jù).
-w ./http.cap
指定tcpdump轉(zhuǎn)存數(shù)據(jù)時(shí)的文件./http.cap
是當(dāng)前目錄下的http.cap文件
- 發(fā)起請(qǐng)求
在終端中使用 ctrl+c組合鍵結(jié)束抓包,然后會(huì)在當(dāng)前目錄下生成一個(gè)http.cap文件
3.把文件下載下來(lái),使用tcpdump分析數(shù)據(jù)
在wireshark中,通過(guò)文件>打開(kāi) 找到從服務(wù)器下載的http.cap文件,并打開(kāi)
到這已經(jīng)成功打開(kāi)了,剩下的就是分析數(shù)據(jù)包了
在協(xié)議http的那一行右鍵,選擇追蹤流,然后選擇http
到這,整個(gè)抓包就完成了,是不是很簡(jiǎn)單呢
經(jīng)過(guò)抓包分析,終于解決了http400的問(wèn)題