使用tcpdump檢視HTTP請求響應 詳細資訊 資料
阿新 • • 發佈:2019-02-07
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請求就十分簡單了。