概述
用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者的定義對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行截獲的包分析工具。
tcpdump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來(lái)提供分析。它支持針對(duì)網(wǎng)絡(luò)層、協(xié)議、主機(jī)、網(wǎng)絡(luò)或端口的過(guò)濾,并提供and、or、not等邏輯語(yǔ)句來(lái)幫助你去掉無(wú)用的信息。
tcpdump基于底層libpcap庫(kù)開(kāi)發(fā),運(yùn)行需要root權(quán)限。
一、tcpdump安裝
環(huán)境虛擬機(jī):vmware 15.5.2os: ubuntu 12.04
安裝tcpdump
sudoapt-getinstalltcpdump

3. 版本查看
tcpdump--h

tcpdump version 4.0。
libpcap version 1.1.1 表示libpcap的版本。
二、tcpdump參數(shù)
常用參數(shù)選項(xiàng)說(shuō)明:
| 參數(shù) | 含義 |
|---|---|
| -a | 將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成名字 |
| -c | 在收到指定的包的數(shù)目后,tcpdump就會(huì)停止; |
| -d | 將匹配信息包的代碼以人們能夠理解的匯編格式給出;以可閱讀的格式輸出。 |
| -dd | 將匹配信息包的代碼以c語(yǔ)言程序段的格式給出; |
| -ddd | 將匹配信息包的代碼以十進(jìn)制的形式給出; |
| -e | 在輸出行打印出數(shù)據(jù)鏈路層的頭部信息; |
| -f | 將外部的Internet地址以數(shù)字的形式打印出來(lái); |
| -l | 使標(biāo)準(zhǔn)輸出變?yōu)榫彌_行形式; |
| -n | 直接顯示IP地址,不顯示名稱; |
| -nn | 端口名稱顯示為數(shù)字形式,不顯示名稱; |
| -t | 在輸出的每一行不打印時(shí)間戳; |
| -v | 輸出一個(gè)稍微詳細(xì)的信息,例如在ip包中可以包括ttl和服務(wù)類型的信息; |
| -vv | 輸出詳細(xì)的報(bào)文信息; |
| -F | 從指定的文件中讀取表達(dá)式,忽略其它的表達(dá)式; |
| -i | 指定監(jiān)聽(tīng)的網(wǎng)絡(luò)接口; |
| -r | 從指定的文件中讀取包(這些包一般通過(guò)-w選項(xiàng)產(chǎn)生); |
| -w | 直接將包寫(xiě)入文件中,并不分析和打印出來(lái); |
| -T | 將監(jiān)聽(tīng)到的包直接解釋為指定的類型的報(bào)文,常見(jiàn)的類型有rpc (遠(yuǎn)程過(guò)程調(diào)用)和snmp(簡(jiǎn)單 網(wǎng)絡(luò)管理協(xié)議;) |
三、命令選項(xiàng)使用舉例
1. 截獲主機(jī)收到和發(fā)出的所有數(shù)據(jù)包。
命令:
tcpdump
說(shuō)明:
tcpdump截取包默認(rèn)顯示數(shù)據(jù)包的頭部。
普通情況下,直接啟動(dòng)tcpdump將監(jiān)視第一個(gè)網(wǎng)絡(luò)接口上所有流過(guò)的數(shù)據(jù)包。
基礎(chǔ)格式:時(shí)間 數(shù)據(jù)包類型 源IP 端口/協(xié)議 > 目標(biāo)IP 端口/協(xié)議 協(xié)議詳細(xì)信息

按下Ctrl+C會(huì)終止tcpdump命令。且會(huì)在結(jié)尾處生成統(tǒng)計(jì)信息。

終止tcpdump
2. 指定抓包數(shù)量 -c
指定抓取2個(gè)數(shù)據(jù)包。
命令:
tcpdump-c2
說(shuō)明:
最后會(huì)自動(dòng)生成統(tǒng)計(jì)信息。

【注意,已經(jīng)切換到管理員了,虛擬機(jī)中要產(chǎn)生數(shù)據(jù)包,可以另外開(kāi)一個(gè)窗口ping baidu.com后面不再提示】

ping baidu.com
3. 將抓包信息寫(xiě)入文件 -w
使用-w選項(xiàng)指定記錄文件。
命令:
tcpdump-c10-wtcpdump_test.log
說(shuō)明:
保存的文件不是文本格式,不能直接查看。tcpdump保存的文件的格式是幾乎所有主流的抓包工具軟件都可以讀取。所以可以使用更易讀的圖形界面工具來(lái)查看記錄文件。

4. 讀取記錄文件 -r
使用-r選項(xiàng)讀取文件。
命令:
tcpdump-rtcpdump_test.log

5. 打印出所有可工作的接口 -D
命令:
tcpdump-D

其中網(wǎng)卡為eth0。
6. 指定監(jiān)控的網(wǎng)卡 -i
命令:
tcpdump-ieth0
如果不指定網(wǎng)卡,默認(rèn)tcpdump只會(huì)監(jiān)視第一個(gè)網(wǎng)絡(luò)接口,一般是eth0。
7. 顯示更詳細(xì)的數(shù)據(jù)包信息 -v -vv
選項(xiàng)-v,-vv可以顯示更詳細(xì)的抓包信息。

tcpdump -v

tcpdump -vv
8. 不使用域名反解 -n
使用-n后,tcpdump會(huì)直接顯示IP地址,不會(huì)顯示域名(與netstat命令相似)。
9. 增加抓包時(shí)間戳 -tttt選項(xiàng)
tcpdump的所有輸出打印行中都會(huì)默認(rèn)包含時(shí)間戳信息;時(shí)間戳信息的顯示格式如下
hhss.frac(nt:小時(shí):分鐘:秒.)
此時(shí)間戳的精度與內(nèi)核時(shí)間精度一致,反映的是內(nèi)核第一次看到對(duì)應(yīng)數(shù)據(jù)包的時(shí)間;
而數(shù)據(jù)包從物理線路傳遞到內(nèi)核的時(shí)間, 以及內(nèi)核花費(fèi)在此包上的中斷處理時(shí)間都沒(méi)有算進(jìn)來(lái);
使用-tttt選項(xiàng),抓包結(jié)果中將包含抓包日期:
命令:
tcpdump-tttt

增加抓包時(shí)間戳
四、條件過(guò)濾
1. 過(guò)濾:指定需要抓取的協(xié)議
tcpdump可以只抓某種協(xié)議的包,支持指定以下協(xié)議:「ip,ip6,arp,tcp,udp,wlan」等。
命令:
tcpdumpudp tcpdumpicmp tcpdumptcp tcpdumparp
2. 過(guò)濾:指定協(xié)議的端口號(hào)
使用port參數(shù),用于指定端口號(hào)。
命令:tcpdump tcp port 80
使用portrange參數(shù),用于指定端口范圍。
命令:tcpdump tcp portrange 1-1024
3. 過(guò)濾:指定源與目標(biāo)
src 表示源。
dst 表示目標(biāo)。
命令:
tcpdump src port 8080
tcpdump dst port 80
4. 過(guò)濾:指定特定主機(jī)的消息包
使用host指定需要監(jiān)聽(tīng)的主機(jī)。
命令:
tcpdumphost192.168.1.113
注意:若使用了host參數(shù)使用了計(jì)算機(jī)名或域名。例tcpdump host shi-pc ,則無(wú)法再使用-n選項(xiàng)。
5. 過(guò)濾:指定數(shù)據(jù)包大小
使用greater(大于)與less(小于)可以指定數(shù)據(jù)包大小的范圍。
「例:只抓取大于1000字節(jié)的數(shù)據(jù)包?!?/p>
命令:
tcpdumpgreater1000
「例:只抓取小于10字節(jié)的數(shù)據(jù)包?!?/p>
命令:
tcpdumpless10
五、 邏輯表達(dá)式
使用基本邏輯組合拼裝出更精細(xì)的過(guò)濾條件。
1. 邏輯與
邏輯與關(guān)系,使用and。
命令:
tcpdumptcpandhost192.168.1.112 tcpdumptcpandsrc192.168.1.112andport8080
2. 邏輯或
邏輯或關(guān)系,使用or。
命令:
tcpdumphost192.168.1.112or192.168.1.113
3. 邏輯非
邏輯非關(guān)系,使用not,也可以使用 ! 。
若使用 ! 必須與其后面的字符隔開(kāi)一個(gè)空格。
例:當(dāng)通過(guò)ssh協(xié)議遠(yuǎn)程使用tcpdump時(shí),為了避免ssh的數(shù)據(jù)包的輸出,所以一般需要禁止ssh數(shù)據(jù)包的輸出。
命令:
tcpdumpnottcpport22 tcpdump!tcpport22
4. 括號(hào)
括號(hào)需要使用在引號(hào)內(nèi),或轉(zhuǎn)意使用。否則會(huì)報(bào)錯(cuò)。
例:抓取非22端口,且主機(jī)為192.168.1.112 和 192.168.1.113的TCP數(shù)據(jù)包。
命令:
tcpdumpnottcpport22andhost192.168.1.112or192.168.1.113 tcpdump"nottcpport22andhost(192.168.1.112or192.168.1.113)" tcpdumpnottcpport22andhost"(192.168.1.112or192.168.1.113)"
六、其他實(shí)例
1. 打印所有進(jìn)入或離開(kāi)sundown的數(shù)據(jù)包.
tcpdumphostsundown
2. 截獲主機(jī)210.27.48.1 和主機(jī)210.27.48.2 或210.27.48.3的通信
tcpdumphost210.27.48.1and(210.27.48.2or210.27.48.3)
3. 如果想要獲取主機(jī)210.27.48.1除了和主機(jī)210.27.48.2之外所有主機(jī)通信的ip包,使用命令:
tcpdumpiphost210.27.48.1and!210.27.48.2
4. 監(jiān)視所有送到主機(jī)hostname的數(shù)據(jù)包
tcpdump-ieth0dsthosthostname
5. 獲取主機(jī)210.27.48.1接收或發(fā)出的telnet包
23為telnet的端口
tcpdumptcpport23andhost210.27.48.1
6. 監(jiān)視本機(jī)的udp 123 端口
123 為ntp的服務(wù)端口
tcpdumpudpport123
7. 使用tcpdump抓取HTTP包
tcpdump-XvvennSs0-ieth0tcp[20:2]=0x4745ortcp[20:2]=0x4854
0x4745 為"GET"前兩個(gè)字母"GE",
0x4854 為"HTTP"前兩個(gè)字母"HT"。
tcpdump 對(duì)截獲的數(shù)據(jù)并沒(méi)有進(jìn)行徹底解碼,數(shù)據(jù)包內(nèi)的大部分內(nèi)容是使用十六進(jìn)制的形式直接打印輸出的。
顯然這不利于分析網(wǎng)絡(luò)故障,通常的解決辦法是先使用帶**-w參數(shù)的tcpdump 截獲數(shù)據(jù)并保存到文件中**,然后再使用其他程序(如Wireshark)進(jìn)行解碼分析。當(dāng)然也應(yīng)該定義過(guò)濾規(guī)則,以避免捕獲的數(shù)據(jù)包填滿整個(gè)硬盤(pán)。
六、查看數(shù)據(jù)包完整內(nèi)容
tcpdump默認(rèn)不顯示數(shù)據(jù)包的詳細(xì)內(nèi)容。
方法一:
使用-A參數(shù)能以ASCII碼顯示數(shù)據(jù)包。
例:只抓取1個(gè)數(shù)據(jù)包,并顯示其內(nèi)容。
命令:
tcpdump-c1-A

方法二:
使用-X參數(shù)能16進(jìn)制數(shù)與ASCII碼共同顯示數(shù)據(jù)包。
例:只抓取1個(gè)數(shù)據(jù)包,并顯示其內(nèi)容。
命令:
tcpdump-c1-X

七、tcpdump 與wireshark
Wireshark(以前是ethereal)是Windows下非常簡(jiǎn)單易用的抓包工具,現(xiàn)在也有Linux版本。
通過(guò)Tcpdump抓取的數(shù)據(jù)包分析比較麻煩,要想很方便的分析數(shù)據(jù)包, 我們可以用Tcpdump + Wireshark 的完美組合實(shí)現(xiàn):在 Linux 里抓包,然后在Windows 里分析包。
保存數(shù)據(jù)包為wireshark能識(shí)別的文件:
tcpdumptcp-ieth1-t-s0-c100anddstport!22andsrcnet192.168.1.0/24-w./target.cap
| 參數(shù) | 含義 |
|---|---|
| tcp | ip icmp arp rarp 和 tcp、udp、icmp這些選項(xiàng)等都要放到第一個(gè)參數(shù)的位置,用來(lái)過(guò)濾數(shù)據(jù)報(bào)的類型 |
| -i eth1 | 只抓經(jīng)過(guò)接口eth1的包 |
| -t | 不顯示時(shí)間戳 |
| -s 0 | 抓取數(shù)據(jù)包時(shí)默認(rèn)抓取長(zhǎng)度為68字節(jié)。加上-S 0 后可以抓到完整的數(shù)據(jù)包 |
| -c 100 | 只抓取100個(gè)數(shù)據(jù)包 |
| dst port ! 22 | 不抓取目標(biāo)端口是22的數(shù)據(jù)包 |
| src net 192.168.1.0/24 | 數(shù)據(jù)包的源網(wǎng)絡(luò)地址為192.168.1.0/24 |
| -w ./target.cap | 保存成cap文件,方便用ethereal(即wireshark)分析 |
責(zé)任編輯:haq
-
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
8264瀏覽量
94702
原文標(biāo)題:網(wǎng)絡(luò)/命令行抓包工具tcpdump詳解
文章出處:【微信號(hào):A1411464185,微信公眾號(hào):multisim】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
MinGW-w64工具集壓縮包的下載
如何使用wireshark進(jìn)行遠(yuǎn)程抓包
芯科科技Simplicity Studio 6的網(wǎng)絡(luò)分析功能介紹
搭建自己的ubuntu系統(tǒng)之必要庫(kù)安裝
ubuntu系統(tǒng)安裝之Vmware虛擬機(jī)安裝
TCPDump抓包分析實(shí)戰(zhàn)
如何評(píng)估協(xié)議分析儀的性能指標(biāo)?
詳解Linux網(wǎng)絡(luò)管理中的關(guān)鍵命令
單片機(jī)有沒(méi)有串口抓包工具推薦的,純小白,想像網(wǎng)絡(luò)協(xié)議那樣直接curl協(xié)議轉(zhuǎn)化為代碼
Cadence SPB OrCAD Allegro22.1安裝包
Cadence SPB OrCAD Allegro24.1安裝包
TwinCAT3 EtherCAT抓包 | 技術(shù)集結(jié)
網(wǎng)絡(luò)行抓包分析工具tcpdump安裝介紹
評(píng)論