1. 程式人生 > >tcpdump命令使用總結

tcpdump命令使用總結

linux tcpdump 抓包

目錄:

1. 命令簡介

2. 編譯安裝

3. 命令格式

4. 常用選項

5. 表達式介紹

6. 命令示例


一、命令簡介

Tcpdump是一款用於截取網絡分組,並過濾輸出分組內容的工具。tcpdump憑借強大的功能和靈活的截取策略,使其成為類UNIX系統下用於網絡分析和問題排查的首選工具。 tcpdump提供了源代碼,公開了接口,因此具備很強的可擴展性,對於網絡維護和入侵者都是非常有用的工具。tcpdump存在於基本的Linux系統中,由於它需要將網絡界面設置為混雜模式,普通用戶不能正常執行,但具備root權限的用戶可以直接執行它來獲取網絡上的信息。因此系統中存在網絡分析工具主要不是對本機安全的威脅,而是對網絡上的其他計算機的安全存在威脅。

tcpdump可以將網絡中傳送的數據包的“頭”完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供 and、or、not等邏輯語句來幫助我們去掉無用的信息。

二、編譯安裝

前提:只有先安裝好libpcap後,tcpdump安裝才不會出問題。
安裝前的準備:
使用本地光盤yum安裝flex和bison

[[email protected] ~]# yum install flex bison

安裝libpcap:

[[email protected] tools]# wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz
[[email protected] tools]# tar zxvf libpcap-1.8.1.tar.gz 
[[email protected] tools]# cd libpcap-1.8.1
[[email protected] libpcap-1.8.1]# ./configure
[[email protected] libpcap-1.8.1]# make && make install

然後開始安裝tcpdump:

[[email protected] tools]# wget http://www.tcpdump.org/release/tcpdump-4.9.1.tar.gz 
[[email protected] tools]# tar zxvf tcpdump-4.9.1.tar.gz 
[[email protected] tools]# cd tcpdump-4.9.1
[[email protected] tcpdump-4.9.1]# ./configure
[[email protected] tcpdump-4.9.1]# make && make install

三、命令格式

tcpdump [ 選項 ] [ -c 數量 ] [ -i 網絡接口 ] [ -w 文件名 ] [ 表達式 ]

四、常用選項

[[email protected] ~]# man tcpdump
...
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 [email protected] algo:secret,...  ]
        [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
        [ --time-stamp-precision=tstamp_precision ]
        [ --immediate-mode ] [ --version ]
        [ expression ]
...

選項翻譯如下:

-l:使標準輸出變為緩沖行形式;
-c:抓包次數;
-nn:直接以 IP 及 Port Number 顯示,而非主機名與服務名稱;
-s :<數據包大小> 設置每個數據包的大小;
-i:指定監聽的網絡接口;
-r:從指定的文件中讀取包;
-w:輸出信息保存到指定文件;
-a:將網絡地址和廣播地址轉變成名字;
-d:將匹配信息包的代碼以人們能夠理解的匯編格式給出;
-e:在輸出行打印出數據鏈路層的頭部信息;
-f:將外部的Internet地址以數字的形式打印出來;
-t:在輸出的每一行不打印時間戳;
-v :輸出稍微詳細的報文信息;--vv則輸出更詳細信息。

五、表達式介紹

表達式指正則表達式,tcpdump利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則會捕獲該報文。如果沒有給出任何條件,則會截獲網絡上所有的信息包。
在表達式中一般有如下幾種類型的關鍵字:

1. 關於類型的關鍵字:

主要包括host,net,port,例如 host 210.27.48.2, 指明 210.27.48.2是一臺主機,net 202.0.0.0指明202.0.0.0是一個網絡地址,port 23 指明端口號是23。如果沒有指定類型,缺省的類型是host。

2. 確定傳輸方向的關鍵字:

主要包括src,dst,dst or src,dst and src, 這些關鍵字指明了傳輸的方向。舉例說明,src 210.27.48.2 ,指明ip包中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的網絡地址是202.0.0.0。如果沒有指明 方向關鍵字,則缺省是src or dst關鍵字。

3. 協議的關鍵字:

主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI (分布式光纖數據接口網絡)上的特定的網絡協議,實際上它是”ether”的別名,fddi和ether 具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。 其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpdump 將會 監聽所有協議的信息包。

4. 三種邏輯運算:

與運算是‘and‘,‘&&‘; 或運算是‘or‘ ,‘||‘; 非運算是 ‘not ‘ ‘! ‘。

5. 其他重要的關鍵字:

gateway, broadcast, less(小於), greater(大於)

六、命令示例

1. 默認啟動

普通情況下,直接啟動tcpdump將監視第一個網絡界面上所有流過的數據包。

[[email protected] ~]# tcpdump

2. 獲取指定網絡接口的數據包

如果不指定網卡,默認tcpdump只會監視本機的第一個網絡接口。

[[email protected] ~]# tcpdump -i ens33

3. 打印所有進入或離開‘ames‘這臺主機的數據包

[[email protected] ~]# tcpdump host ames
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10:58:56.339806 IP ames.47460 > server.jotting.cn.domain: 18031+ A? ames.magedu.com. (33)
10:58:56.340324 IP ames.47460 > server.jotting.cn.domain: 14082+ AAAA? ames.magedu.com. (33)
10:58:56.340594 IP server.jotting.cn.domain > ames.47460: 18031 NXDomain 0/1/0 (93)
10:58:56.341291 IP server.jotting.cn.domain > ames.47460: 14082 NXDomain 0/1/0 (93)
10:58:56.341760 IP ames.48307 > server.jotting.cn.domain: 33925+ A? ames. (22)
...

也可以指定ip,例如截獲所有 172.16.0.9 的主機收到的和發出的所有的數據包

[[email protected] ~]# tcpdump host 172.16.0.9

4. 截獲eth0網卡10次收發所有數據包並將抓包結果保存到test文件,再讀取test抓包結果文件

[[email protected] ~]# tcpdump -i ens33 -c 10 -w test
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
12 packets received by filter
0 packets dropped by kernel
[[email protected] ~]# tcpdump -r test
reading from file test, link-type EN10MB (Ethernet)
11:09:58.776309 IP ames.ssh > station26.jotting.cn.61368: Flags [P.], seq 4287612257:4287612405, ack 1274827487, win 251, length 148
11:09:58.776690 IP station26.jotting.cn.61368 > ames.ssh: Flags [.], ack 148, win 2053, length 0
11:09:58.782086 IP 172.16.252.50.netbios-ns > 172.16.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
11:09:58.784033 IP 172.16.252.50.netbios-ns > 172.16.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
11:09:58.786659 IP pxe33.jotting.cn.60491 > 239.255.255.250.ssdp: UDP, length 133
11:09:58.789438 IP 172.16.252.50.netbios-ns > 172.16.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
11:09:58.797115 IP 172.16.252.50.59388 > 239.255.255.250.ssdp: UDP, length 173
11:09:58.837599 IP 172.16.252.189.58166 > 239.255.255.250.ssdp: UDP, length 174
11:09:58.877108 IP pxe33.jotting.cn.49353 > station11.jotting.cn.ssh: Flags [.], ack 2053202339, win 11416, length 0
11:09:59.168665 ARP, Request who-has 192.168.0.1 tell 192.168.0.111, length 46
[[email protected] ~]#

5. 獲取所有來訪問80端口的數據包(指定端口範圍:portrange1-1024)

[[email protected] ~]# tcpdump port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
11:14:08.219687 IP ames.40608 > 10.68.7.12.http: Flags [P.], seq 4065612137:4065612783, ack 1201464828, win 65280, length 646
11:14:08.244030 IP 10.68.7.12.http > ames.40608: Flags [.], ack 646, win 65535, length 0
11:14:27.824996 IP 10.68.7.12.http > ames.40608: Flags [P.], seq 1:11, ack 646, win 65535, length 10
11:14:27.825014 IP ames.40608 > 10.68.7.12.http: Flags [.], ack 11, win 65280, length 0
11:14:27.835376 IP ames.40608 > 10.68.7.12.http: Flags [P.], seq 646:652, ack 11, win 65280, length 6
11:14:27.859675 IP 10.68.7.12.http > ames.40608: Flags [.], ack 652, win 65535, length 0
11:14:34.741259 IP ames.40608 > 10.68.7.12.http: Flags [.], seq 652:3332, ack 11, win 65280, length 2680

6. 獲取ip包中源地址是172.16.0.1的數據包(目的是dst)

[[email protected] ~]# tcpdump src 172.16.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
11:37:22.749614 IP server.jotting.cn.domain > station26.jotting.cn.53491: 43693 8/4/4 CNAME clients.l.google.com., CNAME clients-china.l.google.com., A 74.125.204.138, A 74.125.204.139, A 74.125.204.101, A 74.125.204.100, A 74.125.204.113, A 74.125.204.102 (321)
11:37:22.768044 IP server.jotting.cn.domain > ames.43197: 63175* 1/1/1 PTR station26.jotting.cn. (118)
11:37:22.770613 IP server.jotting.cn.domain > ames.48682: 37078* 1/1/1 PTR server.jotting.cn. (105)
11:37:22.772635 IP server.jotting.cn.domain > ames.48980: 11819 NXDomain* 0/1/0 (105)
11:37:27.766386 ARP, Request who-has ames tell server.jotting.cn, length 46
^C  ---> 按ctrl+c終止.
5 packets captured
5 packets received by filter
0 packets dropped by kernel
[[email protected] ~]#

7. 獲取主機172.16.252.47和主機172.16.0.1之間通信的數據包

[[email protected] ~]# tcpdump host 172.16.252.47 and 172.16.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
11:41:21.623567 IP server.jotting.cn.domain > ames.43836: 26320* 1/1/1 PTR server.jotting.cn. (105)
11:41:21.624211 IP ames.53567 > server.jotting.cn.domain: 27576+ PTR? 47.252.16.172.in-addr.arpa. (44)
11:41:21.667365 IP ames.45595 > server.jotting.cn.domain: 48898+ A? station26.jotting.cn. (41)
11:41:21.667657 IP ames.45595 > server.jotting.cn.domain: 3471+ AAAA? station26.jotting.cn. (41)
11:41:21.667946 IP server.jotting.cn.domain > ames.45595: 48898* 1/1/1 A 172.16.251.26 (94)
11:41:21.668210 IP server.jotting.cn.domain > ames.45595: 3471* 0/1/0 (89)
11:41:21.672773 IP ames.51764 > server.jotting.cn.domain: 21351+ A? station26.jotting.cn. (41)
11:41:21.673857 IP server.jotting.cn.domain > ames.51764: 21351* 1/1/1 A 172.16.251.26 (94)
...
^C
39 packets captured
42 packets received by filter
3 packets dropped by kernel
[[email protected] ~]#

8. 獲取tcp協議並且源地址來訪問80的端口

實驗方法:我開了兩個終端,一個用來通過循環語句執行curl命令,另一個用來抓包。

第一個終端執行如下python代碼:

#!/usr/bin/python 
# coding: utf-8
import time
import os
for i in range(5):
    os.system(‘curl jotting.cn‘)
    time.sleep(0.5)

第二個終端執行tcpdump命令:

[[email protected] ~]# tcpdump tcp and src 172.16.252.47 and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
13:09:50.403823 IP ames.34876 > 101.201.68.76.http: Flags [S], seq 2531480337, win 29200, options [mss 1460,sackOK,TS val 13321408 ecr 0,nop,wscale 7], length 0
13:09:50.409624 IP ames.34876 > 101.201.68.76.http: Flags [.], ack 4100740743, win 229, options [nop,nop,TS val 13321414 ecr 222196798], length 0
13:09:50.409965 IP ames.34876 > 101.201.68.76.http: Flags [P.], seq 0:74, ack 1, win 229, options [nop,nop,TS val 13321414 ecr 222196798], length 74: HTTP: GET / HTTP/1.1
13:09:50.415583 IP ames.34876 > 101.201.68.76.http: Flags [.], ack 384, win 237, options [nop,nop,TS val 13321420 ecr 222196804], length 0
13:09:50.416841 IP ames.34876 > 101.201.68.76.http: Flags [F.], seq 74, ack 384, win 237, options [nop,nop,TS val 13321421 ecr 222196804], length 0
13:09:50.424146 IP ames.34876 > 101.201.68.76.http: Flags [.], ack 385, win 237, options [nop,nop,TS val 13321429 ecr 222196811], length 0
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel
[[email protected] ~]#

9. 獲取主機123.118.168.155和除了123.125.37.230之外的所有ip包

[[email protected] ~]# tcpdump ip host 123.118.168.155 and ! 123.125.37.230

10. 截獲長度大於1000數據包,對於DDOS攻擊時,可以使用

[[email protected] ~]# tcpdump -i eth0 greater 1000

11. 過濾原物理主機地址為1C-39-47-AE-8A-5B的報頭

[[email protected] ~]# tcpdump ether src 1C-39-47-AE-8A-5B

...

完!


本文出自 “yangbin” 博客,請務必保留此出處http://13683137989.blog.51cto.com/9636221/1963383

tcpdump命令使用總結