概述
用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。
tcpdump可以將網絡中傳送的數據包的“頭”完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。
tcpdump基于底層libpcap庫開發,運行需要root權限。
一、tcpdump安裝
環境虛擬機:vmware 15.5.2os: ubuntu 12.04
安裝tcpdump
sudoapt-getinstalltcpdump
3. 版本查看
tcpdump--h
tcpdump version 4.0。
libpcap version 1.1.1 表示libpcap的版本。
二、tcpdump參數
常用參數選項說明:
參數 | 含義 |
---|---|
-a | 將網絡地址和廣播地址轉變成名字 |
-c | 在收到指定的包的數目后,tcpdump就會停止; |
-d | 將匹配信息包的代碼以人們能夠理解的匯編格式給出;以可閱讀的格式輸出。 |
-dd | 將匹配信息包的代碼以c語言程序段的格式給出; |
-ddd | 將匹配信息包的代碼以十進制的形式給出; |
-e | 在輸出行打印出數據鏈路層的頭部信息; |
-f | 將外部的Internet地址以數字的形式打印出來; |
-l | 使標準輸出變為緩沖行形式; |
-n | 直接顯示IP地址,不顯示名稱; |
-nn | 端口名稱顯示為數字形式,不顯示名稱; |
-t | 在輸出的每一行不打印時間戳; |
-v | 輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息; |
-vv | 輸出詳細的報文信息; |
-F | 從指定的文件中讀取表達式,忽略其它的表達式; |
-i | 指定監聽的網絡接口; |
-r | 從指定的文件中讀取包(這些包一般通過-w選項產生); |
-w | 直接將包寫入文件中,并不分析和打印出來; |
-T | 將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單 網絡管理協議;) |
三、命令選項使用舉例
1. 截獲主機收到和發出的所有數據包。
命令:
tcpdump
說明:
tcpdump截取包默認顯示數據包的頭部。
普通情況下,直接啟動tcpdump將監視第一個網絡接口上所有流過的數據包。
基礎格式:時間 數據包類型 源IP 端口/協議 > 目標IP 端口/協議 協議詳細信息
按下Ctrl+C會終止tcpdump命令。且會在結尾處生成統計信息。
終止tcpdump
2. 指定抓包數量 -c
指定抓取2個數據包。
命令:
tcpdump-c2
說明:
最后會自動生成統計信息。
【注意,已經切換到管理員了,虛擬機中要產生數據包,可以另外開一個窗口ping baidu.com后面不再提示】
ping baidu.com
3. 將抓包信息寫入文件 -w
使用-w選項指定記錄文件。
命令:
tcpdump-c10-wtcpdump_test.log
說明:
保存的文件不是文本格式,不能直接查看。tcpdump保存的文件的格式是幾乎所有主流的抓包工具軟件都可以讀取。所以可以使用更易讀的圖形界面工具來查看記錄文件。
4. 讀取記錄文件 -r
使用-r選項讀取文件。
命令:
tcpdump-rtcpdump_test.log
![讀取記錄文件
5. 打印出所有可工作的接口 -D
命令:
tcpdump-D
其中網卡為eth0。
6. 指定監控的網卡 -i
命令:
tcpdump-ieth0
如果不指定網卡,默認tcpdump只會監視第一個網絡接口,一般是eth0。
7. 顯示更詳細的數據包信息 -v -vv
選項-v,-vv可以顯示更詳細的抓包信息。
tcpdump -v
tcpdump -vv
8. 不使用域名反解 -n
使用-n后,tcpdump會直接顯示IP地址,不會顯示域名(與netstat命令相似)。
9. 增加抓包時間戳 -tttt選項
tcpdump的所有輸出打印行中都會默認包含時間戳信息;時間戳信息的顯示格式如下
hhss.frac(nt:小時:分鐘:秒.)
此時間戳的精度與內核時間精度一致,反映的是內核第一次看到對應數據包的時間;
而數據包從物理線路傳遞到內核的時間, 以及內核花費在此包上的中斷處理時間都沒有算進來;
使用-tttt選項,抓包結果中將包含抓包日期:
命令:
tcpdump-tttt
增加抓包時間戳
四、條件過濾
1. 過濾:指定需要抓取的協議
tcpdump可以只抓某種協議的包,支持指定以下協議:「ip,ip6,arp,tcp,udp,wlan」等。
命令:
tcpdumpudp tcpdumpicmp tcpdumptcp tcpdumparp
2. 過濾:指定協議的端口號
使用port參數,用于指定端口號。
命令:tcpdump tcp port 80
使用portrange參數,用于指定端口范圍。
命令:tcpdump tcp portrange 1-1024
3. 過濾:指定源與目標
src 表示源。
dst 表示目標。
命令:
tcpdump src port 8080
tcpdump dst port 80
4. 過濾:指定特定主機的消息包
使用host指定需要監聽的主機。
命令:
tcpdumphost192.168.1.113
注意:若使用了host參數使用了計算機名或域名。例tcpdump host shi-pc ,則無法再使用-n選項。
5. 過濾:指定數據包大小
使用greater(大于)與less(小于)可以指定數據包大小的范圍。
「例:只抓取大于1000字節的數據包?!?/p>
命令:
tcpdumpgreater1000
「例:只抓取小于10字節的數據包。」
命令:
tcpdumpless10
五、 邏輯表達式
使用基本邏輯組合拼裝出更精細的過濾條件。
1. 邏輯與
邏輯與關系,使用and。
命令:
tcpdumptcpandhost192.168.1.112 tcpdumptcpandsrc192.168.1.112andport8080
2. 邏輯或
邏輯或關系,使用or。
命令:
tcpdumphost192.168.1.112or192.168.1.113
3. 邏輯非
邏輯非關系,使用not,也可以使用 ! 。
若使用 ! 必須與其后面的字符隔開一個空格。
例:當通過ssh協議遠程使用tcpdump時,為了避免ssh的數據包的輸出,所以一般需要禁止ssh數據包的輸出。
命令:
tcpdumpnottcpport22 tcpdump!tcpport22
4. 括號
括號需要使用在引號內,或轉意使用。否則會報錯。
例:抓取非22端口,且主機為192.168.1.112 和 192.168.1.113的TCP數據包。
命令:
tcpdumpnottcpport22andhost192.168.1.112or192.168.1.113 tcpdump"nottcpport22andhost(192.168.1.112or192.168.1.113)" tcpdumpnottcpport22andhost"(192.168.1.112or192.168.1.113)"
六、其他實例
1. 打印所有進入或離開sundown的數據包.
tcpdumphostsundown
2. 截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信
tcpdumphost210.27.48.1and(210.27.48.2or210.27.48.3)
3. 如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用命令:
tcpdumpiphost210.27.48.1and!210.27.48.2
4. 監視所有送到主機hostname的數據包
tcpdump-ieth0dsthosthostname
5. 獲取主機210.27.48.1接收或發出的telnet包
23為telnet的端口
tcpdumptcpport23andhost210.27.48.1
6. 監視本機的udp 123 端口
123 為ntp的服務端口
tcpdumpudpport123
7. 使用tcpdump抓取HTTP包
tcpdump-XvvennSs0-ieth0tcp[20:2]=0x4745ortcp[20:2]=0x4854
0x4745 為"GET"前兩個字母"GE",
0x4854 為"HTTP"前兩個字母"HT"。
tcpdump 對截獲的數據并沒有進行徹底解碼,數據包內的大部分內容是使用十六進制的形式直接打印輸出的。
顯然這不利于分析網絡故障,通常的解決辦法是先使用帶**-w參數的tcpdump 截獲數據并保存到文件中**,然后再使用其他程序(如Wireshark)進行解碼分析。當然也應該定義過濾規則,以避免捕獲的數據包填滿整個硬盤。
六、查看數據包完整內容
tcpdump默認不顯示數據包的詳細內容。
方法一:
使用-A參數能以ASCII碼顯示數據包。
例:只抓取1個數據包,并顯示其內容。
命令:
tcpdump-c1-A
方法二:
使用-X參數能16進制數與ASCII碼共同顯示數據包。
例:只抓取1個數據包,并顯示其內容。
命令:
tcpdump-c1-X
七、tcpdump 與wireshark
Wireshark(以前是ethereal)是Windows下非常簡單易用的抓包工具,現在也有Linux版本。
通過Tcpdump抓取的數據包分析比較麻煩,要想很方便的分析數據包, 我們可以用Tcpdump + Wireshark 的完美組合實現:在 Linux 里抓包,然后在Windows 里分析包。
保存數據包為wireshark能識別的文件:
tcpdumptcp-ieth1-t-s0-c100anddstport!22andsrcnet192.168.1.0/24-w./target.cap
參數 | 含義 |
---|---|
tcp | ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型 |
-i eth1 | 只抓經過接口eth1的包 |
-t | 不顯示時間戳 |
-s 0 | 抓取數據包時默認抓取長度為68字節。加上-S 0 后可以抓到完整的數據包 |
-c 100 | 只抓取100個數據包 |
dst port ! 22 | 不抓取目標端口是22的數據包 |
src net 192.168.1.0/24 | 數據包的源網絡地址為192.168.1.0/24 |
-w ./target.cap | 保存成cap文件,方便用ethereal(即wireshark)分析 |
責任編輯:haq
-
網絡
+關注
關注
14文章
7599瀏覽量
89250
原文標題:網絡/命令行抓包工具tcpdump詳解
文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論