tcpdump簡單來說就是輸出網絡上的數據報文。可以根據使用者的選擇來對網絡上的數據報文進行截獲並進行分析。
可以根據網絡協議、物理接口、ip地址和端口號等各種條件進行過濾,還可以對抓獲報文大小進行控制,等等。
1. 抓取報文
最簡單的開始捕獲報文的方法是直接使用tcpdump並指定捕獲的網卡名稱即可。
tcpdump -i eth0
可以使用ctrl+c來結束捕獲程序。tcpdump的可視化輸出功能有限。通常是捕獲報文並保存下來,然后使用圖形用戶界面軟件wireshark來分析。
可以使用-w選項來指定文件名即可將報文保存下來。
tcpdump -i eth0 -s 1500 -w aaa.cap
tcpdump有很多參數來控制在哪里捕獲,如何捕獲,以及捕獲文件如何保存處理等選項,
-i interface 指定監聽的網卡
-s 指定每個報文中截取的數據長度,不是缺省的68字節。如果僅僅對報頭感興趣,可以不使用該選項,指定為0說明不限制報文長度,而是捕獲整個報文。一般以太網的MTU值為1500,因此指定長度為1500即可。
-w filename 報文保存到文件
-c 當收到指定報文個數后退出
-e 打印鏈接頭,如MAC地址(print the link-level header on each dump line. This can be used, to print MAC layer addresses for protocols)。
-n 不要將IP地址和端口號進行轉換,轉換需要CPU時間
-G <rotate_seconds> 每隔指定的時間,將捕獲的報文循環保存為新文件。需要-w配合使用,並指定時間格式才能循環保存文件,否則覆蓋原來文件。常用事件格式%d(每月中的第幾天),%H(當前的小時時間),%M(當前的分鍾時間),%S(當前的秒時間)。
-D 輸出tcpdump可以捕獲的接口列表,包含接口編號和接口名稱
-v 當解析或打印時輸出詳細的信息。例如報文的生存時間TTL、ID等IP報文選項。
-r 讀取有-w創建的報文
-t 不打印時間戳
tcpdump -i eth0 -s 1500 -G 60 -w wang%H%M%s.pcap tcpdump -i eth0 -n -v -c 500
2. 匹配規則
只有符合表達式要求的報文才會被抓取到。
表達式由一個或多個基本元素加上連接符組成,這些基本元素也稱為原語,是指不可分割的最小單元。基本元素由一個ID和一個或多個修飾符組成,有3種不同類型的修飾符。
第一種是類型修飾符,共4個類型修飾符,分別為host、net、port和portrange。
host指定要捕獲的主機或ip地址。
net需要捕獲報文的子網。
port和portrange分別用於指定端口和端口范圍。
第二種是傳輸方向的修飾符,包括src和dst。不僅可修飾地址,也可修飾端口。
tcpdump -i eth0 'dst port 80' -v tcpdump -i eth0 'prot 5060 and src 192.168.1.100' -v
第三種是協議修飾符,可以基於特定的協議來進行過濾,可以是IP、ARP、RARP、ICMP、TCP和UDP等協議類型,如tcp port 21、udp port 5060等。
另外這些原語可以使用and(&&)、or(||)和not(!)來進行運算組合。所有的報文集合是全集,可以進行交、並和補集運算。在多個層次的集合運算時,可以使用小括號來分割其集合運算符的結合關系。
tcpdump -i eth0 -s0 -w wang.pcap host 10.0.0.15
tcpdump -i eth0 -w aaa.pcap port 59 or port 53 or port 80 or arp or icmp
摘自:智能路由器開發指南
