????今天要給大家介紹的一個(gè) Unix 下的一個(gè)網(wǎng)絡(luò)數(shù)據(jù)采集分析工具?--?Tcpdump,也就是我們常說(shuō)的抓包工具。
????與它功能類(lèi)似的工具有 wireshark ,不同的是,wireshark 有圖形化界面,而 tcpdump 則只有命令行。用簡(jiǎn)單的話(huà)來(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ú)用的信息。
tcp dump 實(shí)用命令實(shí)例
就比如下面這個(gè)命令,我們要通過(guò)host參數(shù)指定 host ip 進(jìn)行過(guò)濾
$?tcpdump?host?192.168.10.100
主程序+參數(shù)名+參數(shù)值這樣的組合才是我們正常認(rèn)知里面命令行該有的樣子。
可 tcpdump 卻不走尋常路,我們居然還可以在 host 前再加一個(gè)限定詞,來(lái)縮小過(guò)濾的范圍?
$?tcpdump?src?host?192.168.10.100
從字面上理解,確實(shí)很容易理解,但是這不符合編寫(xiě)命令行程序的正常邏輯,導(dǎo)致我們會(huì)有所疑慮:
除了 src ,dst,可還有其它可以用的限定詞?
src,host 應(yīng)該如何理解它們,叫參數(shù)名?不合適,因?yàn)?src 明顯不合適。
如果你在網(wǎng)上看到有關(guān) tcpdump 的博客、教程,無(wú)一不是給你一個(gè)參數(shù)組合,告訴你這是實(shí)現(xiàn)了怎樣的一個(gè)過(guò)濾器?這樣的教學(xué)方式,很容易讓你依賴(lài)別人的文章來(lái)使用 tcpdump,而不能將 tcpdump 這樣神器消化,達(dá)到靈活應(yīng)用,靈活搭配過(guò)濾器的效果。
上面加了 src 本身就顛覆了我們的認(rèn)知,你可知道在 src 之前還可以加更多的條件,比如 tcp, udp, icmp 等詞,在你之前的基礎(chǔ)上再過(guò)濾一層。
$?tcpdump?tcp?src?host?192.168.10.100
這種參數(shù)的不確定性,讓大多數(shù)人對(duì) tcpdump 的學(xué)習(xí)始終無(wú)法得其精髓。
因此,在學(xué)習(xí) tcpdump 之前,我覺(jué)得有必要要先讓你知道:tcpdump 的參數(shù)是如何組成的?這非常重要。
?tcpdump 的各種參數(shù):
option 可選參數(shù):將在后邊一一解釋
proto 類(lèi)過(guò)濾器:根據(jù)協(xié)議進(jìn)行過(guò)濾,可識(shí)別的關(guān)鍵詞有:upd, udp, icmp, ip, ip6, arp, rarp,ether,wlan, fddi, tr, decnet
type 類(lèi)過(guò)濾器:可識(shí)別的關(guān)鍵詞有:host, net, port, portrange,這些詞后邊需要再接參數(shù)。
direction 類(lèi)過(guò)濾器:根據(jù)數(shù)據(jù)流向進(jìn)行過(guò)濾,可識(shí)別的關(guān)鍵字有:src, dst,同時(shí)你可以使用邏輯運(yùn)算符進(jìn)行組合,比如 src or dst
理解 tcpdump 的輸出
tcpdump 輸出的內(nèi)容雖然多,卻很規(guī)律。
這里以我隨便抓取的一個(gè) tcp 包為例來(lái)看一下
21:26:49.013621?IP?172.20.20.1.15605?>?172.20.20.2.5920:?Flags?[P.],?seq?49:97,?ack?106048,?win?4723,?length?48
從上面的輸出來(lái)看,可以總結(jié)出:
第一列:時(shí)分秒毫秒 21:26:49.013621
第二列:網(wǎng)絡(luò)協(xié)議 IP
第三列:發(fā)送方的ip地址+端口號(hào),其中172.20.20.1是 ip,而15605 是端口號(hào)
第四列:箭頭 >, 表示數(shù)據(jù)流向
第五列:接收方的ip地址+端口號(hào),其中 172.20.20.2 是 ip,而5920 是端口號(hào)
第六列:冒號(hào)
第七列:數(shù)據(jù)包內(nèi)容,包括Flags 標(biāo)識(shí)符,seq 號(hào),ack 號(hào),win 窗口,數(shù)據(jù)長(zhǎng)度 length,其中 [P.] 表示 PUSH 標(biāo)志位為 1,更多標(biāo)識(shí)符見(jiàn)下面
Flags 標(biāo)識(shí)符
使用 tcpdump 抓包后,會(huì)遇到的 TCP 報(bào)文 Flags,有以下幾種:
[S]: SYN(開(kāi)始連接)
[P]: PSH(推送數(shù)據(jù))
[F]: FIN (結(jié)束連接)
[R]: RST(重置連接)
[.]: 沒(méi)有 Flag,由于除了 SYN 包外所有的數(shù)據(jù)包都有ACK,所以一般這個(gè)標(biāo)志也可表示 ACK
常規(guī)過(guò)濾規(guī)則
1 基于IP地址過(guò)濾:host
使用host就可以指定 host ip 進(jìn)行過(guò)濾
$?tcpdump?host?192.168.10.100
數(shù)據(jù)包的 ip 可以再細(xì)分為源ip和目標(biāo)ip兩種
#?根據(jù)源ip進(jìn)行過(guò)濾
$?tcpdump?-i?eth2?src?192.168.10.100
?根據(jù)目標(biāo)ip進(jìn)行過(guò)濾
$?tcpdump?-i?eth2?dst?192.168.10.200
2、基于網(wǎng)段進(jìn)行過(guò)濾:net
若你的ip范圍是一個(gè)網(wǎng)段,可以直接這樣指定
$?tcpdump?net?192.168.10.0/24
網(wǎng)段同樣可以再細(xì)分為源網(wǎng)段和目標(biāo)網(wǎng)段
#?根據(jù)源網(wǎng)段進(jìn)行過(guò)濾
$?tcpdump?src?net?192.168
?根據(jù)目標(biāo)網(wǎng)段進(jìn)行過(guò)濾
$?tcpdump?dst?net?192.168
3、基于端口進(jìn)行過(guò)濾:port
使用port就可以指定特定端口進(jìn)行過(guò)濾
$?tcpdump?port?8088
端口同樣可以再細(xì)分為源端口,目標(biāo)端口
#?根據(jù)源端口進(jìn)行過(guò)濾
$?tcpdump?src?port?8088
?根據(jù)目標(biāo)端口進(jìn)行過(guò)濾
$?tcpdump?dst?port?8088
如果你想要同時(shí)指定兩個(gè)端口你可以這樣寫(xiě)
$?tcpdump?port?80?or?port?8088
但也可以簡(jiǎn)寫(xiě)成這樣
$?tcpdump?port?80?or?8088
如果你的想抓取的不再是一兩個(gè)端口,而是一個(gè)范圍,一個(gè)一個(gè)指定就非常麻煩了,此時(shí)你可以這樣指定一個(gè)端口段。
$?tcpdump?portrange?8000-8080
$?tcpdump?src?portrange?8000-8080
$?tcpdump?dst?portrange?8000-8080
對(duì)于一些常見(jiàn)協(xié)議的默認(rèn)端口,我們還可以直接使用協(xié)議名,而不用具體的端口號(hào)
比如 http ?== 80,https == 443 等
$?tcpdump?tcp?port?http
4 基于協(xié)議進(jìn)行過(guò)濾:proto
常見(jiàn)的網(wǎng)絡(luò)協(xié)議有:tcp, udp, icmp, http, ip,ipv6 等
若你只想查看 icmp 的包,可以直接這樣寫(xiě)
$?tcpdump?icmp
protocol 可選值:ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, ?moprc, ?iso, ?stp, ipx, ?or ?netbeui
3.5 基本IP協(xié)議的版本進(jìn)行過(guò)濾
當(dāng)你想查看 tcp 的包,你也許會(huì)這樣子寫(xiě)
$?tcpdump?tcp
這樣子寫(xiě)也沒(méi)問(wèn)題,就是不夠精準(zhǔn),為什么這么說(shuō)呢?
ip 根據(jù)版本的不同,可以再細(xì)分為 IPv4 和 IPv6 兩種,如果你只指定了 tcp,這兩種其實(shí)都會(huì)包含在內(nèi)。
那有什么辦法,能夠?qū)?IPv4 和 IPv6 區(qū)分開(kāi)來(lái)呢?
很簡(jiǎn)單,如果是 IPv4 的 tcp 包 ,就這樣寫(xiě)(友情提示:數(shù)字 6 表示的是 tcp 在ip報(bào)文中的編號(hào)。)
$tcpdump'ip?proto?tcp'
?or
$ tcpdump?ip?proto?6
?or
$tcpdump'ip?protochain?tcp'
?or?
$?tcpdump?ip?protochain?6
而如果是 IPv6 的 tcp 包 ,就這樣寫(xiě)
$tcpdump'ip6?proto?tcp'
?or
$ tcpdump?ip6?proto?6
?or
$tcpdump'ip6?protochain?tcp'
?or?
$?tcpdump?ip6?protochain?6
關(guān)于上面這幾個(gè)命令示例,有兩點(diǎn)需要注意:
跟在 proto 和 protochain 后面的如果是 tcp, udp, icmp ,那么過(guò)濾器需要用引號(hào)包含,這是因?yàn)?tcp,udp, icmp 是 tcpdump 的關(guān)鍵字。
跟在ip 和 ip6 關(guān)鍵字后面的 proto 和 protochain 是兩個(gè)新面孔,看起來(lái)用法類(lèi)似,它們是否等價(jià),又有什么區(qū)別呢?
關(guān)于第二點(diǎn),網(wǎng)絡(luò)上沒(méi)有找到很具體的答案,我只能通過(guò)man tcpdump的提示, 給出自己的個(gè)人猜測(cè),但不保證正確。
proto 后面跟的<protocol>的關(guān)鍵詞是固定的,只能是 ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, ?moprc, ?iso, ?stp, ipx, ?or ?netbeui 這里面的其中一個(gè)。
而 protochain 后面跟的 protocol 要求就沒(méi)有那么嚴(yán)格,它可以是任意詞,只要 tcpdump 的 IP 報(bào)文頭部里的 protocol 字段為<protocol>就能匹配上。
理論上來(lái)講,下面兩種寫(xiě)法效果是一樣的
$tcpdump'ip?&&?tcp'
$tcpdump'ip?proto?tcp'
同樣的,這兩種寫(xiě)法也是一樣的
$tcpdump'ip6?&&?tcp'
$tcpdump'ip6?proto?tcp'
可選參數(shù)解析
1 設(shè)置不解析域名提升速度
-n:不把ip轉(zhuǎn)化成域名,直接顯示 ?ip,避免執(zhí)行 DNS lookups 的過(guò)程,速度會(huì)快很多
-nn:不把協(xié)議和端口號(hào)轉(zhuǎn)化成名字,速度也會(huì)快很多。
-N:不打印出host 的域名部分.。比如,,如果設(shè)置了此選現(xiàn),tcpdump 將會(huì)打印'nic' 而不是 'nic.ddn.mil'.
2 過(guò)濾結(jié)果輸出到文件
使用 tcpdump 工具抓到包后,往往需要再借助其他的工具進(jìn)行分析,比如常見(jiàn)的 wireshark 。
而要使用wireshark ,我們得將 tcpdump 抓到的包數(shù)據(jù)生成到文件中,最后再使用 wireshark 打開(kāi)它即可。
使用-w參數(shù)后接一個(gè)以.pcap后綴命令的文件名,就可以將 tcpdump 抓到的數(shù)據(jù)保存到文件中。
$?tcpdump?icmp?-w?icmp.pcap
3 從文件中讀取包數(shù)據(jù)
使用-w是寫(xiě)入數(shù)據(jù)到文件,而使用-r是從文件中讀取數(shù)據(jù)。
讀取后,我們照樣可以使用上述的過(guò)濾器語(yǔ)法進(jìn)行過(guò)濾分析。
$?tcpdump?icmp?-r?all.pcap
4 控制詳細(xì)內(nèi)容的輸出
-v:產(chǎn)生詳細(xì)的輸出. 比如包的TTL,id標(biāo)識(shí),數(shù)據(jù)包長(zhǎng)度,以及IP包的一些選項(xiàng)。同時(shí)它還會(huì)打開(kāi)一些附加的包完整性檢測(cè),比如對(duì)IP或ICMP包頭部的校驗(yàn)和。
-vv:產(chǎn)生比-v更詳細(xì)的輸出. 比如NFS回應(yīng)包中的附加域?qū)?huì)被打印, SMB數(shù)據(jù)包也會(huì)被完全解碼。(摘自網(wǎng)絡(luò),目前我還未使用過(guò))
-vvv:產(chǎn)生比-vv更詳細(xì)的輸出。比如 telent 時(shí)所使用的SB, SE 選項(xiàng)將會(huì)被打印, 如果telnet同時(shí)使用的是圖形界面,其相應(yīng)的圖形選項(xiàng)將會(huì)以16進(jìn)制的方式打印出來(lái)(摘自網(wǎng)絡(luò),目前我還未使用過(guò))
5 控制時(shí)間的顯示
-t:在每行的輸出中不輸出時(shí)間
-tt:在每行的輸出中會(huì)輸出時(shí)間戳
-ttt:輸出每?jī)尚写蛴〉臅r(shí)間間隔(以毫秒為單位)
-tttt:在每行打印的時(shí)間戳之前添加日期的打?。ù朔N選項(xiàng),輸出的時(shí)間最直觀)
6 顯示數(shù)據(jù)包的頭部
-x:以16進(jìn)制的形式打印每個(gè)包的頭部數(shù)據(jù)(但不包括數(shù)據(jù)鏈路層的頭部)
-xx:以16進(jìn)制的形式打印每個(gè)包的頭部數(shù)據(jù)(包括數(shù)據(jù)鏈路層的頭部)
-X:以16進(jìn)制和 ASCII碼形式打印出每個(gè)包的數(shù)據(jù)(但不包括連接層的頭部),這在分析一些新協(xié)議的數(shù)據(jù)包很方便。
-XX:以16進(jìn)制和 ASCII碼形式打印出每個(gè)包的數(shù)據(jù)(包括連接層的頭部),這在分析一些新協(xié)議的數(shù)據(jù)包很方便。
7 過(guò)濾指定網(wǎng)卡的數(shù)據(jù)包
-i:指定要過(guò)濾的網(wǎng)卡接口,如果要查看所有網(wǎng)卡,可以-i any
8 過(guò)濾特定流向的數(shù)據(jù)包
-Q:選擇是入方向還是出方向的數(shù)據(jù)包,可選項(xiàng)有:in, out, inout,也可以使用 ?--direction=[direction] 這種寫(xiě)法
9 其他常用的一些參數(shù)
-A:以ASCII碼方式顯示每一個(gè)數(shù)據(jù)包(不顯示鏈路層頭部信息). 在抓取包含網(wǎng)頁(yè)數(shù)據(jù)的數(shù)據(jù)包時(shí), 可方便查看數(shù)據(jù)
-l: 基于行的輸出,便于你保存查看,或者交給其它工具分析
-q: 簡(jiǎn)潔地打印輸出。即打印很少的協(xié)議相關(guān)信息, 從而輸出行都比較簡(jiǎn)短.
-c: 捕獲 count 個(gè)包 tcpdump 就退出
-s: ?tcpdump 默認(rèn)只會(huì)截取前96字節(jié)的內(nèi)容,要想截取所有的報(bào)文內(nèi)容,可以使用-s number,number就是你要截取的報(bào)文字節(jié)數(shù),如果是 0 的話(huà),表示截取報(bào)文全部?jī)?nèi)容。
-S: 使用絕對(duì)序列號(hào),而不是相對(duì)序列號(hào)
-C:file-size,tcpdump 在把原始數(shù)據(jù)包直接保存到文件中之前, 檢查此文件大小是否超過(guò)file-size. 如果超過(guò)了, 將關(guān)閉此文件,另創(chuàng)一個(gè)文件繼續(xù)用于原始數(shù)據(jù)包的記錄. 新創(chuàng)建的文件名與-w 選項(xiàng)指定的文件名一致, 但文件名后多了一個(gè)數(shù)字.該數(shù)字會(huì)從1開(kāi)始隨著新創(chuàng)建文件的增多而增加. file-size的單位是百萬(wàn)字節(jié)(nt: 這里指1,000,000個(gè)字節(jié),并非1,048,576個(gè)字節(jié), 后者是以1024字節(jié)為1k, 1024k字節(jié)為1M計(jì)算所得, 即1M=1024 * 1024 = 1,048,576)
-F:使用file 文件作為過(guò)濾條件表達(dá)式的輸入, 此時(shí)命令行上的輸入將被忽略.
10 對(duì)輸出內(nèi)容進(jìn)行控制的參數(shù)
-D: 顯示所有可用網(wǎng)絡(luò)接口的列表
-e: 每行的打印輸出中將包括數(shù)據(jù)包的數(shù)據(jù)鏈路層頭部信息
-E: 揭秘IPSEC數(shù)據(jù)
-L:列出指定網(wǎng)絡(luò)接口所支持的數(shù)據(jù)鏈路層的類(lèi)型后退出
-Z:后接用戶(hù)名,在抓包時(shí)會(huì)受到權(quán)限的限制。如果以root用戶(hù)啟動(dòng)tcpdump,tcpdump將會(huì)有超級(jí)用戶(hù)權(quán)限。
-d:打印出易讀的包匹配碼
-dd:以C語(yǔ)言的形式打印出包匹配碼.
-ddd:以十進(jìn)制數(shù)的形式打印出包匹配碼
過(guò)濾規(guī)則組合
有編程基礎(chǔ)的同學(xué),對(duì)于下面三個(gè)邏輯運(yùn)算符應(yīng)該不陌生了吧
and:所有的條件都需要滿(mǎn)足,也可以表示為 &&
or:只要有一個(gè)條件滿(mǎn)足就可以,也可以表示為||
not:取反,也可以使用!
舉個(gè)例子,我想需要抓一個(gè)來(lái)自10.5.2.3,發(fā)往任意主機(jī)的3389端口的包
$?tcpdump?src?10.5.2.3?and?dst?port?3389
當(dāng)你在使用多個(gè)過(guò)濾器進(jìn)行組合時(shí),有可能需要用到括號(hào),而括號(hào)在 shell 中是特殊符號(hào),因?yàn)槟阈枰褂靡?hào)將其包含。例子如下:
$tcpdump'src?10.0.2.4?and?(dst?port?3389?or?22)'
而在單個(gè)過(guò)濾器里,常常會(huì)判斷一條件是否成立,這時(shí)候,就要使用下面兩個(gè)符號(hào)
=:判斷二者相等
==:判斷二者相等
!=:判斷二者不相等
當(dāng)你使用這兩個(gè)符號(hào)時(shí),tcpdump 還提供了一些關(guān)鍵字的接口來(lái)方便我們進(jìn)行判斷,比如
if:表示網(wǎng)卡接口名、
proc:表示進(jìn)程名
pid:表示進(jìn)程 id
svc:表示 service class
dir:表示方向,in 和 out
eproc:表示 effective process name
epid:表示 effective process ID
比如我現(xiàn)在要過(guò)濾來(lái)自進(jìn)程名為nc發(fā)出的流經(jīng) en0 網(wǎng)卡的數(shù)據(jù)包,或者不流經(jīng) en0 的入方向數(shù)據(jù)包,可以這樣子寫(xiě)
$tcpdump"(?if=en0?and?proc?=nc?)?||?(if?!=?en0?and?dir=in)"
抓包實(shí)戰(zhàn)應(yīng)用例子
以下例子摘自:https://fuckcloudnative.io/posts/tcpdump-examples/
1 提取 HTTP 的 User-Agent
從 HTTP 請(qǐng)求頭中提取 HTTP 用戶(hù)代理:
$?tcpdump?-nn?-A?-s1500?-l?|?grep"User-Agent:"
通過(guò)egrep可以同時(shí)提取用戶(hù)代理和主機(jī)名(或其他頭文件):
$?tcpdump?-nn?-A?-s1500?-l?|?egrep?-i'User-Agent:|Host:'
2 抓取 HTTP GET 和 POST 請(qǐng)求
抓取 HTTP GET 請(qǐng)求包:
$?tcpdump?-s?0?-A?-vv'tcp[((tcp[12:1]?&?0xf0)?>>?2):4]?=?0x47455420'
#?or
$?tcpdump?-vvAls0?|?grep'GET'
可以抓取 HTTP POST 請(qǐng)求包:
$?tcpdump?-s?0?-A?-vv'tcp[((tcp[12:1]?&?0xf0)?>>?2):4]?=?0x504f5354'
#?or?
$?tcpdump?-vvAls0?|?grep'POST'
注意:該方法不能保證抓取到 HTTP POST 有效數(shù)據(jù)流量,因?yàn)橐粋€(gè) POST 請(qǐng)求會(huì)被分割為多個(gè) TCP 數(shù)據(jù)包。
3 找出發(fā)包數(shù)最多的 IP
找出一段時(shí)間內(nèi)發(fā)包最多的 IP,或者從一堆報(bào)文中找出發(fā)包最多的 IP,可以使用下面的命令:
$?tcpdump?-nnn?-t?-c?200?|?cut?-f?1,2,3,4?-d'.'|?sort?|?uniq?-c?|?sort?-nr?|?head?-n?20
cut -f 1,2,3,4 -d '.': 以.為分隔符,打印出每行的前四列。即 IP 地址。
sort | uniq -c: 排序并計(jì)數(shù)
sort -nr: 按照數(shù)值大小逆向排序
4 抓取 DNS 請(qǐng)求和響應(yīng)
DNS 的默認(rèn)端口是 53,因此可以通過(guò)端口進(jìn)行過(guò)濾
$?tcpdump?-i?any?-s0?port?53
5 切割 pcap 文件
當(dāng)抓取大量數(shù)據(jù)并寫(xiě)入文件時(shí),可以自動(dòng)切割為多個(gè)大小相同的文件。例如,下面的命令表示每 3600 秒創(chuàng)建一個(gè)新文件capture-(hour).pcap,每個(gè)文件大小不超過(guò)200*1000000字節(jié):
$?tcpdump??-w?/tmp/capture-%H.pcap?-G?3600?-C?200
這些文件的命名為capture-{1-24}.pcap,24 小時(shí)之后,之前的文件就會(huì)被覆蓋。
6 提取 HTTP POST 請(qǐng)求中的密碼
從 HTTP POST 請(qǐng)求中提取密碼和主機(jī)名:
$tcpdump?-s?0?-A?-n?-l?|?egrep?-i"POST?/|pwd=|passwd=|password=|Host:"
7 提取 HTTP 請(qǐng)求的 URL
提取 HTTP 請(qǐng)求的主機(jī)名和路徑:
$tcpdump?-s?0?-v?-n?-l?|?egrep?-i"POST?/|GET?/|Host:"
8 抓取 HTTP 有效數(shù)據(jù)包
抓取 80 端口的 HTTP 有效數(shù)據(jù)包,排除 TCP 連接建立過(guò)程的數(shù)據(jù)包(SYN / FIN / ACK):
$tcpdump'tcp?port?80?and?(((ip[2:2]?-?((ip[0]&0xf)<<2))?-?((tcp[12]&0xf0)>>2))?!=?0)'
9 結(jié)合 Wireshark 進(jìn)行分析
通常Wireshark(或 tshark)比 tcpdump 更容易分析應(yīng)用層協(xié)議。一般的做法是在遠(yuǎn)程服務(wù)器上先使用tcpdump抓取數(shù)據(jù)并寫(xiě)入文件,然后再將文件拷貝到本地工作站上用Wireshark分析。
還有一種更高效的方法,可以通過(guò) ssh 連接將抓取到的數(shù)據(jù)實(shí)時(shí)發(fā)送給 Wireshark 進(jìn)行分析。以 MacOS 系統(tǒng)為例,可以通過(guò)brew cask install wireshark來(lái)安裝,然后通過(guò)下面的命令來(lái)分析:
$ssh?root@remotesystem'tcpdump?-s0?-c?1000?-nn?-w?-?not?port?22'|?/Applications/Wireshark.app/Contents/MacOS/Wireshark?-k?-i?-
例如,如果想分析 DNS 協(xié)議,可以使用下面的命令:
$ssh?root@remotesystem'tcpdump?-s0?-c?1000?-nn?-w?-?port?53'|?/Applications/Wireshark.app/Contents/MacOS/Wireshark?-k?-i?-
抓取到的數(shù)據(jù):
-c選項(xiàng)用來(lái)限制抓取數(shù)據(jù)的大小。如果不限制大小,就只能通過(guò)ctrl-c來(lái)停止抓取,這樣一來(lái)不僅關(guān)閉了 tcpdump,也關(guān)閉了 wireshark。
到這里,我已經(jīng)將我所知道的 tcpdump 的用法全部說(shuō)了一遍,如果你有認(rèn)真地看完本文,相信會(huì)有不小的收獲,掌握一個(gè)上手的抓包工具,對(duì)于以后我們學(xué)習(xí)網(wǎng)絡(luò)、分析網(wǎng)絡(luò)協(xié)議、以及定位網(wǎng)絡(luò)問(wèn)題,會(huì)很有幫助,而 tcpdump 是我推薦的一個(gè)抓包工具。