網(wǎng)絡(luò)編程(一)TCP數(shù)據(jù)包的分析
本人正在進行網(wǎng)絡(luò)編程方面的知識整理,想了好長時間不知道該從什么地方開始著手整理,正好最近項目上有個需求,需要在一對設(shè)備之間抓包,分析通信雙方的數(shù)據(jù)是否正確。正好借這個機會梳理一下如何利用tcpdump+Wireshark實現(xiàn)TCP數(shù)據(jù)包的解析??梢哉f對TCP數(shù)據(jù)包的分析,是進行網(wǎng)絡(luò)編程的基礎(chǔ)。通過TCP數(shù)據(jù)包的分析,可以有效的解決網(wǎng)絡(luò)編程中的好多問題。
利用已有設(shè)備,我們部署了如下的網(wǎng)絡(luò)拓?fù)鋱D,進行功能測試。選擇抓取Server:10.88.65.206與Client:10.88.65.128之間的通信數(shù)據(jù)。
下面開始介紹抓包分析流程:
首先介紹一下測試環(huán)境,Server端,IP地址為:10.88.65.206,操作系統(tǒng)為:CentOS6.6。Client端,IP地址為:10.88.65.128,操作系統(tǒng)為:CentOS6.6。抓包工具:tcpdump,CentOS桌面操作系統(tǒng)自帶。TCP協(xié)議分析工具:Wireshark。
客戶端和服務(wù)端之間為長連接,為獲取這對設(shè)備之間的通信數(shù)據(jù)。通過reboot命令重啟Client端設(shè)備,讓客戶端重新連接服務(wù)端并發(fā)送數(shù)據(jù)。在重啟客戶端之前在Server端,執(zhí)行抓包命令:
- tcpdump tcp -i eth0 port 3366 -s 0 -w test.cap
注意:簡單說明下這個命令,在服務(wù)端eth0網(wǎng)口的3366端口抓取tcp的完整數(shù)據(jù)包,并將數(shù)據(jù)寫入test.cap文件。client端和server端會有業(yè)務(wù)數(shù)據(jù)的發(fā)送,至于是什么業(yè)務(wù)數(shù)據(jù),這取決于你的實際業(yè)務(wù)。
待客戶端啟動成功并與服務(wù)端的業(yè)務(wù)數(shù)據(jù)收發(fā)恢復(fù)正常后,停止抓包。從服務(wù)端機器下載test.cap抓包文件進行分析(可以使用WinSCP、xftp等工具進行下載)。
如果你的電腦上面已經(jīng)安裝Wireshark,無需重復(fù)安裝,假設(shè)你的電腦上面沒有安裝Wireshark,你需要安裝一下。安裝完成后,可以直接雙擊打開test.cap文件。打開后結(jié)果如下所示:
與服務(wù)端通信的不止一臺設(shè)備,為了快速查看這對設(shè)備之間的數(shù)據(jù)包,可以添加一下過濾條件。
經(jīng)過過濾,我們可以看到剩下的數(shù)據(jù)全是這兩臺設(shè)備之間的數(shù)據(jù)。這樣更有利于我們進行數(shù)據(jù)分析。
我們可逐條查看發(fā)送數(shù)據(jù),直到找到我們需要檢查的數(shù)據(jù)。找到檢查的數(shù)據(jù)后,我們可以點擊Data,查看數(shù)據(jù)是否正確。如圖中的灰色部分,是我們測試中發(fā)送的業(yè)務(wù)數(shù)據(jù)。這里面的數(shù)據(jù)全是16進制字符串,你可以將你的業(yè)務(wù)數(shù)據(jù)也轉(zhuǎn)為16進制字符串來與此數(shù)據(jù)比對其正確性。
得到上面的16進制數(shù)據(jù)后,我們可以逐項的檢查數(shù)據(jù)的正確性。如果你是自定義協(xié)議,就可以將自定義協(xié)議,與實際發(fā)送數(shù)據(jù)進行逐一比對。