tcpdump使用教程


一、說明

在分析了wireshark使用方法后,其表達式書寫基本沒什么問題,但在linux上使用的更多是tcpdump。

tcpdump自大學就開始在用了,但一直沒搞懂其表達式的書寫規律,基本每次使用都得查、每次用后都會忘。

 

二、安裝

yum install tcpdump -y

 

三、使用

tcpdump命令用法如下,可概括為“tcpdump + 選項 + 表達式”;表達式用於指示過濾哪些數據包,選項用於指示如何處理表達式過濾出來的這些數據包。

tcpdump [ -AbdDefhHIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
           [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
           [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
           [ -P 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 ]
           [ expression ]

 

3.1 選項

選項也沒什么說的,看上邊的寫法也大概能猜出選項的意思,如果不能那就“man tcpdump”看一下具體的意思。提一下最常用的三個參數

-A----以可打印字符形式打印包的所有內容。在想查看應用層(如http)內容這個選項很有用。

-i----用於指定要捕獲數據包的網卡。如eth1。

-r----可以從指定的文件中讀入數據包。

-w----將捕獲的數據包存入到文件。一般保存成.pcap方便使用wireshark打開。

 

3.2 表達式

tcpdump使用pcap-filter語法,詳情可以查看"man pcap-filter",下邊是對man手冊的一些總結。當然另外還要說明,tcpdump有一些高級的用法,不一定都符合下邊的規律。

與wireshark表達式相較而言,雖然tcpdump也不叫難,但總體還是wireshark表達式更簡單明了一些。

 

3.2.1 基本表達式

一條基本的表達式寫法如下:

[proto] [dir] [type] [value]

proto----protocol,流量協議。可以為ether(數據鏈路層), ip,  ip6,  arp,  rarp, decnet, tcp 及 udp。另外也可以是fddi, tr, wlan但這三個都是數據鏈路層在不同數據鏈路層協議的叫法,與ether相互之間等價。tcpdump不支持應用層協議,只能借助端口實現某種應用層協議的過濾。

dir----direction,流量方向。可以為src, dst, src or dst 及 src and dst。另外也可以是ra,  ta, addr1, addr2, addr3 及 addr4但這幾個只適用於wlan數據鏈路層。

type----過濾項的值的類型。可以為host(ip或可解析的域名/主機名), net(網段) , port(端口或/etc/services可解析的服務) 及 portrange(端口范圍)。

# 示例一
# 過濾ip協議(proto)----目的(dir)----ip(type-host)----為192.168.220.128(value)的數據包
tcpdump ip dst host 192.168.220.128
# 當然我們前邊用了中括號,意味着在沒有歧義情下況某些字段是可以省略的,如這里proto字段可省略,等價於
# tcpdump dst host 192.168.220.128

# 示例二
# 過濾ip協議(proto)----目的(dir)----網段(type-net)----為192.168.220(value)的數據包
tcpdump ip dst net 192.168.220

# 示例三
# 過濾tcp協議(proto)----目的(dir)----端口(type-port)----為3306(value)的數據包
tcpdump tcp dst port 3306
# port支持/etc/services可解析的服務,3306對應mysql,所以等價於
# tcpdump tcp dst port mysql

# 示例四
# 過濾tcp協議(proto)----目的(dir)----端口范圍(type-portrange)----為3306-3308(value)的數據包
tcpdump tcp dst portrange 3306-3308

 

3.2.2 復合表達式

非----!或not。最高優先級。

與----&&或and。次優先級。

或----||或or。最低優先級。

改變運算優先級----大括號。

# 過濾ip協議(proto)----目的(dir)----ip(type-host)----為192.168.220.128(value)且
# tcp協議(proto)----目的(dir)----端口(type-port)----為3306(value)的數據包
tcpdump ip dst host 192.168.220.128 and tcp dst port 3306

# 過濾tcp協議(proto)----目的(dir)----端口(type-port)----為3306或3308(value)的數據包
tcpdump tcp dst port 3306 or tcp dst port 3308
# 另外也支持以下單引號寫法
# tcpdump tcp dst port '(3306 or 3308)'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM