命令介紹
tcpdump 從字面上理解是 dump the traffic on a network,是命令行下對網絡進行抓包分析的工具。不僅提供了根據網絡層、協議、主機、網絡或埠等多個條件進行過濾的能力,還能夠通過 and、or、not邏輯語句,以及表達式來滿足用戶多種多樣的網絡抓包需求。
Linux 下的命令格式:
常用的參數:
-D:列出可用於抓包的接口;-l :使標準輸出變為緩衝行形式;-n:不把網絡地址轉換成名字;-c:在收到指定的包的數目後,tcpdump就會停止;-i:指定監聽的網絡接口;(如果沒有指定可能在默認網卡上監聽,需要指定綁定了特定IP的網卡);-s:指定記錄package的大小,常見 -s 0 ,代表最大值65535,一般linux傳輸最小單元MTU為1500;-w:直接將包寫入文件中,配合 -G time 選項可以按照固定的時間間隔切割輸出的文件;-X:直接輸出package data數據,默認不設置,只能通過-w指定文件進行輸出;Unix、Mac下tcpdump命令的參數有所不同,在具體使用過程中要查閱文檔進行相應的調整。如Mac下的命令格式:NAME tcpdump - dump traffic on a networkSYNOPSIS tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -j tstamp_type ] [ -k (metadata_arg) ] [ -m module ] [ -M secret ] [ --number ] [ -Q in|out|inout ] [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ -Q packet-metadata-filter ] [ -Q in|out|inout ] [ --time-stamp-precision=tstamp_precision ] [ --immediate-mode ] [ --version ] [ expression ]
表達式
表達式的基本格式為:proto dir type ID 。表達式之間可以使用邏輯語句進行連接。分別介紹如下:
協議。包括:tcp、udp、icmp,如果為空則可以匹配所有協議。目標。包括:src、dst、src or dst、src and dst。類型。包括:host、net、port、portrange。用法舉例
監聽 eth1 網卡上的所有數據包 tcpdump -i eth1監聽某個IP上的所有數據包,適合有多個IP的設備的場景tcpdump host 10.208.0.10監聽兩個IP之間通信的數據包tcpdump host 10.208.0.10 and \( 10.208.1.10 \)監聽主機與某個IP之外的所有IP數據包tcpdump ip host 10.208.0.10 and ! 10.208.1.10監聽某個IP所有80埠的流量tcpdump tcp port 80 and host 10.208.0.10本文無法列舉所有的使用場景,還需要各位同學根據自己需求分析實踐,如果願意與樓主交流,歡迎通過關注公眾號找到我。如果不習慣使用命令行下的抓包工具,也可以使用圖形界面的抓包工具,通過 Wireshark使用入門 可以了解更多信息。