1. 程式人生 > >使用tcpdump檢視HTTP請求響應 詳細資訊 資料

使用tcpdump檢視HTTP請求響應 詳細資訊 資料

tcpdump安裝

在Ubuntu/Debian系統上,執行如下命令安裝tcpdump工具:

sudo apt-get install tcpdump

在CentOS系統上,執行如下命令安裝tcpdump工具:

sudo yum install tcpdump

安裝完tcpdump後,就可以使用man命令檢視tcpdump的文件了。如果想直接看看tcpdump的一些使用例子,執行:

man tcpdump | less -Ip examples

tcpdump檢視HTTP流量

檢視HTTP GET請求

sudo tcpdump -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

檢視HTTP POST請求

sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

檢視HTTP請求響應頭以及資料

sudo tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
sudo tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

後語

要理解上述tcpdump過濾器中的位操作,需要了解TCP資料包的構造。後面的參考資料中給出了一個分析例子。

筆者有過這樣的經歷,接手一個遺留的軟體專案,發現各個API介面引數沒有文件記錄,而程式碼中的註釋說明是過時的!當接手這種專案開始重構的時候,需要理解程式碼邏輯,如果能知道線上實際執行中的API請求引數是什麼樣子的,將有助於理解。筆者曾嘗試修改Nginx配置檔案來記錄HTTP POST請求資訊,卻沒有發現一個簡單有效的方案。使用上述tcpdump命令來捕獲HTTP POST請求就十分簡單了。

參考資料