杭州哪里做網(wǎng)站好如何快速推廣網(wǎng)上國網(wǎng)
?
?
文章目錄
- 一、命令簡介
- 二、使用方法
- 三、命令選項
- 四、基本語法和使用方法
- 1. 顯示 ASCII 字符串
- 2. 抓取特定協(xié)議的數(shù)據(jù)
- 3. 抓取特定主機的數(shù)據(jù)
- 4. 將抓取的數(shù)據(jù)寫入文件
- 5. 行緩沖模式
- 五、理解tcpdump的輸出
- 六、過濾表達式
- 1. Host 過濾
- 2. Network 過濾
- 3. Proto 過濾
- 4. Port 過濾
- 5. 使用邏輯運算符
- 七、舉例
- 1. 原始數(shù)據(jù)輸出
- 2. 來自特定的IP,發(fā)往特定的端口
- 3. 從某個網(wǎng)段來,到某個網(wǎng)段去
- 4. 到某個IP的非SSH流量
- 5. 根據(jù) TCP Flags 分離數(shù)據(jù)
- 5. 發(fā)現(xiàn) HTTP Get請求
- 6. 抓取用戶名和密碼
?
一、命令簡介
?
tcpdump
是一個網(wǎng)絡(luò)抓包工具,它可以捕獲和分析TCP/IP
網(wǎng)絡(luò)協(xié)議的數(shù)據(jù)包。它使用libpcap
庫來抓取網(wǎng)絡(luò)數(shù)據(jù)包,這個庫在幾乎在所有的 Linux/Unix 中都有。之所以叫做tcpdump
,是因為它最初是用于捕獲和分析TCP協(xié)議的數(shù)據(jù)包。然而,隨著時間的推移,它的功能擴展到了其他協(xié)議,如UDP
、ICMP
等。盡管如此,它的名稱仍然保持為tcpdump
。
?
?它支持針對網(wǎng)絡(luò)層、協(xié)議、主機、網(wǎng)絡(luò)或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。
?
?
二、使用方法
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ][ -c count ][ -C file_size ] [ -G rotate_seconds ] [ -F file ][ -i interface ] [ -j tstamp_type ] [ -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 ][ --time-stamp-precision=tstamp_precision ][ --immediate-mode ] [ --version ][ expression ]
?
?
三、命令選項
-A 以ASCII碼方式顯示每一個數(shù)據(jù)包(不會顯示數(shù)據(jù)包中鏈路層頭部信息)。在抓取包含網(wǎng)頁數(shù)據(jù)的數(shù)據(jù)包時,可方便查看數(shù)據(jù)。-c counttcpdump將在接受到count個數(shù)據(jù)包后退出。-C file-size (此選項用于配合-w file 選項使用)該選項使得tcpdump在把原始數(shù)據(jù)包直接保存到文件中之前,檢查此文件大小是否超過file-size。如果超過了,將關(guān)閉此文件。另創(chuàng)一個文件繼 續(xù)用于原始數(shù)據(jù)包的記錄。新創(chuàng)建的文件名與-w選項指定的文件名一致,但文件名后多了一個數(shù)字。該數(shù)字會從1開始隨著新創(chuàng)建文件的增多而增加,單位是M。-d 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成可閱讀的格式,并傾倒到標準輸出。-dd 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成C語言的格式,并傾倒到標準輸出。-ddd 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成十進制數(shù)字的格式,并傾倒到標準輸出。-D 打印系統(tǒng)中所有tcpdump可以在其上進行抓包的網(wǎng)絡(luò)接口。每一個接口會打印出數(shù)字編號,相應(yīng)的接口名字,以及可能的一個網(wǎng)絡(luò)接口描述。其中網(wǎng)絡(luò)接口名字和數(shù)字編號可以用于`-i`選項,用來指定要抓包的網(wǎng)絡(luò)接口。-e 每行的打印輸出中將包括數(shù)據(jù)包的數(shù)據(jù)鏈路層頭部信息。默認情況下 tcpdump不會顯示數(shù)據(jù)鏈路層信息,使用'-e'選項可以顯示源和目的 MAC地址,以及VLAN tag信息。-f 用數(shù)字顯示網(wǎng)際網(wǎng)絡(luò)地址。-F file使用file文件作為過濾條件表達式的輸入,此時命令行上的輸入將被忽略。-i interface指定需要監(jiān)聽的網(wǎng)口。如果沒有指定,tcpdump會從系統(tǒng)接口列表中搜尋編號最小的網(wǎng)口(不包括loopback網(wǎng)口)。-l 對標準輸出進行行緩沖(使標準輸出設(shè)備遇到一個換行符就馬上把這行的內(nèi)容打印出來)。在需要同時觀察抓包打印以及保存抓包記錄的時候很有用。比如,可通過以下命令組合來達到此目的:tcpdump -l | tee dattcpdump -l > dat & tail -f dat-n 不把主機的網(wǎng)絡(luò)地址轉(zhuǎn)換成名字。-nn 不解析域名和端口。這樣不僅方便查看IP和端口號,而且在抓取大量數(shù)據(jù)時非常高效,因為域名解析會降低抓取速度。-N 不打印出host的域名部分。比如,如果設(shè)置了此選現(xiàn),tcpdump將會打印'nic'而不是'nic.ddn.mil'。-O 不啟用進行包匹配時所用的優(yōu)化代碼。當懷疑某些bug是由優(yōu)化代碼引起的,此選項將很有用。-p 不讓網(wǎng)絡(luò)界面進入混雜模式。但必須注意,在特殊情況下此網(wǎng)絡(luò)接口還是會以混雜模式來工作。-q 快速輸出,僅列出少數(shù)的傳輸協(xié)議信息。-r file從文件file中讀取包數(shù)據(jù)。如果file字段為'-'符號,則tcpdump會從標準輸入中讀取包數(shù)據(jù)。-s snaplen設(shè)置tcpdump的數(shù)據(jù)包抓取長度為snaplen。tcpdump默認只會截取前96字節(jié)的內(nèi)容,如果snaplen是0的話,表示截取報文全部內(nèi)容。-S 打印TCP數(shù)據(jù)包的順序號時,使用絕對的順序號,而不是相對的順序號。相對順序號可理解為,相對第一個TCP包順序號的差距。比如,接受方收到第一個數(shù)據(jù)包的絕對順序號為232323,對于后來接收到的第2個,第3個數(shù)據(jù)包,tcpdump會打印其序列號為1,2分別表示與第一個數(shù)據(jù)包的差距為1和2。而如果此時'-S'選項被設(shè)置,對于后來接收到的第2個,第3個數(shù)據(jù)包會打印出其絕對順序號:232324,232325)。-T type強制tcpdump按type指定的協(xié)議所描述的包結(jié)構(gòu)來分析收到的數(shù)據(jù)包。目前已知的type可取的協(xié)議為:aodv (Ad-hoc On-demand Distance Vector protocol, 按需距離向量路由協(xié)議,在Ad hoc(點對點模式)網(wǎng)絡(luò)中使用)cnfp (Cisco NetFlow protocol)rpc (Remote Procedure Call)rtp (Real-Time Applications protocol)rtcp (Real-Time Applications con-trol protocol)snmp (Simple Network Management Protocol)tftp (Trivial File Transfer Protocol, 碎文件協(xié)議)vat (Visual Audio Tool, 可用于在internet上進行電視電話會議的應(yīng)用層協(xié)議)wb (distributed White Board, 可用于網(wǎng)絡(luò)會議的應(yīng)用層協(xié)議)-t 在每行輸出中不打印時間戳。-tt 不對每行輸出的時間進行格式處理(這種格式一眼可能看不出其含義,如時間戳打印成1261798315)。-ttt tcpdump輸出時,每兩行打印之間會延遲一個段時間(以毫秒為單位)。-tttt 在每行打印的時間戳之前添加日期的打印。-v 當分析和打印的時候,產(chǎn)生詳細的輸出。比如,包的生存時間,標識,總長度以及IP包的一些選項。這也會打開一些附加的包完整性檢測,比如對IP或ICMP包頭部的校驗和。-vv 產(chǎn)生比-v更詳細的輸出。比如,NFS回應(yīng)包中的附加域?qū)淮蛴?#xff0c;SMB數(shù)據(jù)包也會被完全解碼。-vvv 產(chǎn)生比-vv更詳細的輸出。比如,telent時所使用的SB,SE選項將會被打印,如果telnet同時使用的是圖形界面,其相應(yīng)的圖形選項將會以16進制的方式打印出來。-w 把包數(shù)據(jù)直接寫入文件而不進行分析和打印輸出。這些包數(shù)據(jù)可在隨后通過'-r'選項來重新讀入并進行分析和打印。-x 將每個數(shù)據(jù)包的頭部數(shù)據(jù)以及數(shù)據(jù)部分以16進制的形式打印出來。需要注意的是,這個選項不會包括連接層的頭部數(shù)據(jù)。 -xx tcpdump會打印每個包的頭部數(shù)據(jù),同時會以16進制打印出每個包的數(shù)據(jù)。其中包括數(shù)據(jù)鏈路層的頭部。-X 當分析和打印時,tcpdump會打印每個包的頭部數(shù)據(jù),同時會以16進制和ASCII碼形式打印出每個包的數(shù)據(jù)(但不包括連接層的頭部)。這對于分析一些新協(xié)議的數(shù)據(jù)包很方便。-XX 當分析和打印時,tcpdump會打印每個包的頭部數(shù)據(jù),同時會以16進制和ASCII碼形式打印出每個包的數(shù)據(jù),其中包括數(shù)據(jù)鏈路層的頭部。
?
?
四、基本語法和使用方法
1. 顯示 ASCII 字符串
tcpdump -A -s0 port 22
?
2. 抓取特定協(xié)議的數(shù)據(jù)
后面可以跟上協(xié)議名稱來過濾特定協(xié)議的流量,以 UDP 為例,可以加上參數(shù) udp 或 protocol 17
,這兩個命令意思相同。
tcpdump -i eth0 udp
tcpdump -i eth0 proto 17
同理,tcp 與 protocol 6
意思相同。
?
3. 抓取特定主機的數(shù)據(jù)
使用過濾器 host
可以抓取特定目的地址和源IP地址的流量。也可以使用 src
或 dst
只抓取源或目的地。
tcpdump -i eth0 host 10.10.1.1
tcpdump -i eth0 dst 10.10.1.20
?
4. 將抓取的數(shù)據(jù)寫入文件
使用 tcpdump 截取數(shù)據(jù)報文的時候,默認會打印到屏幕的默認輸出,你會看到按照順序和格式,很多的數(shù)據(jù)一行行快速閃過,根本來不及看清楚所有的內(nèi)容。不過,tcpdump 提供了把截取的數(shù)據(jù)保存到文件的功能,以便后面使用其他圖形工具(比如 wireshark,Snort)來分析。
-w
選項用來把數(shù)據(jù)報文輸出到文件:
tcpdump -i eth0 -s0 -w test.pcap
?
5. 行緩沖模式
如果想實時將抓取到的數(shù)據(jù)通過管道傳遞給其他工具來處理,需要使用 -l
選項來開啟行緩沖模式(或使用 -c
選項來開啟數(shù)據(jù)包緩沖模式)。使用 -l
選項可以將輸出通過立即發(fā)送給其他命令,其他命令會立即響應(yīng)。
tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'
?
?
五、理解tcpdump的輸出
截取數(shù)據(jù)只是第一步,第二步就是理解這些數(shù)據(jù),下面就解釋一下 tcpdump 命令輸出各部分的意義。
21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (6), length 64)192.168.1.106.56166 > 124.192.132.54.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 021:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (6), length 44)124.192.132.54.80 > 192.168.1.106.56166: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440], length 021:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (6), length 40)192.168.1.106.56166 > 124.192.132.54.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0
最基本也是最重要的信息就是數(shù)據(jù)報的源地址/端口和目的地址/端口,上面的例子第一條數(shù)據(jù)報中,源地址 ip 是 192.168.1.106
,源端口是 56166
,目的地址是 124.192.132.54
,目的端口是 80
。 >
符號代表數(shù)據(jù)的方向。
此外,上面的三條數(shù)據(jù)還是 tcp 協(xié)議的三次握手過程,第一條就是 SYN
報文,這個可以通過 Flags [S]
看出。下面是常見的 TCP 報文的 Flags:
[S]
: SYN(開始連接)[.]
: 沒有 Flag[P]
: PSH(推送數(shù)據(jù))[F]
: FIN (結(jié)束連接)[R]
: RST(重置連接)
而第二條數(shù)據(jù)的 [S.]
表示 SYN-ACK
,就是 SYN
報文的應(yīng)答報文。
?
六、過濾表達式
tcpdump的過濾表達式用于指定要捕獲的數(shù)據(jù)包的條件。
1. Host 過濾
用來過濾某個主機的數(shù)據(jù)報文。例如:
tcpdump host 1.2.3.4
該命令會抓取所有發(fā)往主機 1.2.3.4
或者從主機 1.2.3.4
發(fā)出的流量。如果想只抓取從該主機發(fā)出的流量,可以使用下面的命令:
tcpdump src host 1.2.3.4
?
2. Network 過濾
用來過濾某個網(wǎng)段的數(shù)據(jù),使用的是 CIDR 模式??梢允褂盟脑M(x.x.x.x)、三元組(x.x.x)、二元組(x.x)和一元組(x)。四元組就是指定某個主機,三元組表示子網(wǎng)掩碼為 255.255.255.0
,二元組表示子網(wǎng)掩碼為 255.255.0.0
,一元組表示子網(wǎng)掩碼為255.0.0.0
。例如,抓取所有發(fā)往網(wǎng)段 192.168.1.x
或從網(wǎng)段 192.168.1.x
發(fā)出的流量:
tcpdump net 192.168.1
抓取所有發(fā)往網(wǎng)段 10.x.x.x
或從網(wǎng)段 10.x.x.x
發(fā)出的流量:
tcpdump net 10
和 Host 過濾器一樣,這里也可以指定源和目的:
tcpdump src net 10
也可以使用CIDR
格式:
tcpdump src net 172.16.0.0/12
?
3. Proto 過濾
用來過濾某個協(xié)議的數(shù)據(jù),關(guān)鍵字為 proto
,可省略。proto 后面可以跟上協(xié)議號或協(xié)議名稱,支持 icmp
, igmp
, igrp
, pim
, ah
, esp
, carp
, vrrp
, udp
和 tcp
。因為通常的協(xié)議名稱是保留字段,所以在于 proto 指令一起使用時,必須根據(jù) shell 類型使用一個或兩個反斜杠(/)來轉(zhuǎn)義。Linux 中的 shell 需要使用兩個反斜杠來轉(zhuǎn)義,MacOS 只需要一個。
例如,抓取 icmp 協(xié)議的報文:
tcpdump -n proto \\icmp
# 或者
tcpdump -n icmp
?
4. Port 過濾
用來過濾通過某個端口的數(shù)據(jù)報文,關(guān)鍵字為 port
。例如:
tcpdump port 389
?
5. 使用邏輯運算符
# and、or、not
tcpdump src host 192.168.1.100 and dst port 80
tcpdump src host 192.168.1.100 and (dst port 80 or dst port 443)
tcpdump not icmp# 注意當你構(gòu)建復(fù)雜查詢的時候,你可能需要使用引號。單引號告訴tcpdump忽略特定的特殊字符,如下面的例子中的括號。
tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'
?
?
七、舉例
?
1. 原始數(shù)據(jù)輸出
tcpdump -ttnnvvS
?
2. 來自特定的IP,發(fā)往特定的端口
tcpdump -nnvvS src 10.5.2.3 and dst port 3389
tcpdump -nnvvS src 10.5.2.3 and dst port 3389
?
3. 從某個網(wǎng)段來,到某個網(wǎng)段去
來自192.168.x.x
子網(wǎng),發(fā)往10.x
和172.16.x.x
。顯示十六進制,無需翻譯主機名,一個v的詳細信息。
tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
?
4. 到某個IP的非SSH流量
來自mars主機,發(fā)往非SSH端口。
tcpdump -vv src mars and not dst port 22
?
5. 根據(jù) TCP Flags 分離數(shù)據(jù)
# 使用TCP RST flag篩選
tcpdump 'tcp[13] & 4!=0'
tcpdump 'tcp[tcpflags] == tcp-rst'# 根據(jù) TCP SYN flag篩選
tcpdump 'tcp[13] & 2!=0'
tcpdump 'tcp[tcpflags] == tcp-syn'# 根據(jù) TCP SYN和ACK flag篩選
cpdump 'tcp[13]=18'# 根據(jù) TCP URG flag篩選
tcpdump 'tcp[13] & 32!=0'
tcpdump 'tcp[tcpflags] == tcp-urg'# 根據(jù) TCP ACK flag篩選
tcpdump 'tcp[13] & 16!=0'
tcpdump 'tcp[tcpflags] == tcp-ack'# 根據(jù) TCP PSH flag篩選
tcpdump 'tcp[13] & 8!=0'
tcpdump 'tcp[tcpflags] == tcp-psh'# 根據(jù) TCP FIN flag篩選
tcpdump 'tcp[13] & 1!=0'
tcpdump 'tcp[tcpflags] == tcp-fin'
?
5. 發(fā)現(xiàn) HTTP Get請求
tcpdump -vvAls0 | grep 'GET'
?
6. 抓取用戶名和密碼
tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '