發布一個與tcpdump配合使用的Python腳本,可以為tcpdump的輸出結果著色,直接下載
------------------------------------------分割線------------------------------------------
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2014年資料/10月/26日/給TcpDump加點顏色看看
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
------------------------------------------分割線------------------------------------------
詳細介紹一下:
熟悉網絡編程的同學一定都知道tcpdump,我們通常使用它截取IP包,然後用wireshark這樣的浏覽工具查看截取的數據包文件。這種工作方式不是太適合實時觀察數據。因為數據包要先被截取並轉儲成文件,然後才能在圖形界面下查看。有時候我需要直接在命令行快速查看tcpdump的輸出,並通過簡單的判讀來發現問題,但是如果直接判讀tcpdump的輸出會有點麻煩,因為IP和TCP的頭都是可變長度的,特別是TCP的頭經常會包含可選項,這導致TCP頭的長度經常不是20字節。所以我們無法使用簡單的方法(比如從開頭跨過多少字節)迅速定位到應用層的數據開頭。比如看到下面的數據,你能第一時間找到應用層socket發送數據的第一個字節位置嗎?(右面的可顯示字符“GET”已經表明了應用層數據開頭,但如果兩端都使用的是二進制協議而非基於文本的HTTP,就沒這麼好的事了)
當然我們可以翻出IP/TCP頭格式(參考wiki IPv4 TCP),然後對照各字段長度,分別找到IP頭和TCP頭的裡代表長度的字段,它們位於下面圖中的位置(5和8,單位是4字節),然後從屏幕上數過相應的字節就能確定應用層數據開頭(4745)。但是這真的很麻煩而且非常浪費時間。即使對於熟知TCP/IP頭格式的人來說,也難免會數錯啊。
我現在需要一個能輸出彩色的tcpdump,它在輸出的時候,使用不同的顏色來分別表示IP頭,TCP頭以及應用層數據段,這讓我可以一眼就看明白應用層通過socket收發的數據,而不是靠人肉的方式逐個字節數,通過最終效果可以看到彩色的tcpdump非常好用!
上面使用的是缺省配色,這適合大多數人使用:紅色是IP頭,綠色是TCP頭的定長部分,黃色是TCP頭的可變長部分,即可選項。白色就是應用層socket數據。由於著色是可配置的,所以如果你想區分頭部更詳細的各個字段,完全可以做到下面五顏六色的配色,囧......
其原理非常簡單,我使用一段Python腳本通過管道讀取tcpdump的輸出,將相應數據段著色後,重新輸出至屏幕。用法也簡單,只要在原有tcpdump命令的後端加一個管道送給本腳本處理一下即可。如果你的tcpdump命令像下面這樣
tcpdump 'dst port 80' -i eth1 -nn -X -l
加一個管道,送給腳本即可,像這樣
tcpdump 'dst port 80' -i eth1 -nn -X -l | cccolor
是不是很方便呢,要使用它,只要把單文件腳本拷貝到PATH所在目錄,然後直接在命令行使用就可以了。由於時間倉促我沒有實現Python3版本,當前版本在 Python 2.7.6 和Python 2.6.6沒什麼問題。我裝模作樣使用了最寬松的MIT licence,非常歡迎感興趣的小伙伴提出建議,或者一起來完善開發其他有趣的功能。
Linux系統安全工具之tcpdump http://www.linuxidc.com/Linux/2014-10/107889.htm
Linux系統入門學習:如何使用tcpdump來捕獲TCP SYN,ACK和FIN包 http://www.linuxidc.com/Linux/2014-10/107722.htm
Linux運維工程師利器:Nmap和tcpdump http://www.linuxidc.com/Linux/2014-02/96993.htm
tcpdump的用法及使用案例 http://www.linuxidc.com/Linux/2013-11/93200.htm
Linux下實現 tcpdump http://www.linuxidc.com/Linux/2013-08/88775.htm
Linux操作系統tcpdump抓包分析詳解 http://www.linuxidc.com/Linux/2013-07/87309.htm