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