超級詳細Tcpdump 的用法

2022-04-01 13:18:21 字數 3927 閱讀 7402

第一種是關於型別的關鍵字,主要包括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.

第二種是確定傳輸方向的關鍵字,主要包括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關鍵字。

第三種是協議的關鍵字,主要包括

fddi,ip,arp,rarp,tcp,udp等型別。fddi指明是在fddi(分布式光纖資料介面網路)上的特定

的網路協議,實際上它是"ether"的別名,fddi和ether具有類似的源位址和目的位址,所以可以將fddi協議包當作ether的包進行處理和

分析。其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpdump將會監聽所有協議的資訊包。

除了這三種型別的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,greater,還有三種邏輯運算,取非運算是

'not ' '! ', 與運算是'and','&&';或運算 是'or'

,'││';這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明。

普通情況下,直接啟動tcpdump將監視第乙個網路介面上所有流過的資料報。

# tcpdump

tcpdump: listening on fxp0

11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50

11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/c len=43

0000 0000 0080 0000 1007 cf08 0900 0000

0e80 0000 902b 4695 0980 8701 0014 0002

000f 0000 902b 4695 0008 00

11:58:48.373134 0:0:e8:5b:6d:85 > broadcast sap e0 ui/c len=97

ffff 0060 0004 ffff ffff ffff ffff ffff

0452 ffff ffff 0000 e85b 6d85 4008 0002

0640 4d41 5354 4552 5f57 4542 0000 0000

0000 00

使用-i引數指定tcpdump監聽的網路介面,這在計算機具有多個網路介面時非常有用,

使用-c引數指定要監聽的資料報數量,

使用-w引數指定將監聽到的資料報寫入檔案中儲存

a想要截獲所有210.27.48.1 的主機收到的和發出的所有的資料報:

#tcpdump host 210.27.48.1

b想要截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通訊,使用命令:(在命令列中適用 括號時,一定要

#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

c如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通訊的ip包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

d如果想要獲取主機210.27.48.1接收或發出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1

e 對本機的udp 123 埠進行監視 123 為ntp的服務埠

# tcpdump udp port 123

f 系統將只對名為hostname的主機的通訊資料報進行監視。主機名可以是本地主機,也可以是網路上的任何一台計算機。下面的命令可以讀取主機hostname傳送的所有資料:

#tcpdump -i eth0 src host hostname

g 下面的命令可以監視所有送到主機hostname的資料報:

#tcpdump -i eth0 dst host hostname

h  我們還可以監視通過指定閘道器的資料報:

#tcpdump -i eth0 gateway gatewayname

i 如果你還想監視編址到指定埠的tcp或udp資料報,那麼執行以下命令:

#tcpdump -i eth0 host hostname and port 80

j 如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通訊的ip包

,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

k 想要截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通訊,使用命令

:(在命令列中適用 括號時,一定要

#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

l 如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通訊的ip包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

m 如果想要獲取主機210.27.48.1接收或發出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1

第三種是協議的關鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等型別

除了這三種型別的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,

greater,還有三種邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'o

r' ,'||';

第二種是確定傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src ,

如果我們只需要列出送到80埠的資料報,用dst port;如果我們只希望看到返回80埠的資料報,用src port。

#tcpdump –i eth0 host hostname and dst port 80  目的埠是80

或者#tcpdump –i eth0 host hostname and src port 80  源埠是80  一般是提供http的服務的主機

如果條件很多的話  要在條件之前加and 或 or 或 not

#tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80

如果在ethernet 使用混雜模式 系統的日誌將會記錄

may  7 20:03:46 localhost kernel: eth0: promiscuous mode enabled.

may  7 20:03:46 localhost kernel: device eth0 entered promiscuous mode

may  7 20:03:57 localhost kernel: device eth0 left promiscuous mode

tcpdump

對截獲的資料並沒有進行徹底解碼,資料報內的大部分內容是使用十六進製制的形式直接列印輸出的。顯然這不利於分析網路故障,通常的解決辦法是先使用帶-w參

數的tcpdump 截獲資料並儲存到檔案中,然後再使用其他程式進行解碼分析。當然也應該定義過濾規則,以避免捕獲的資料報填滿整個硬碟。

超級詳細Tcpdump 的用法

第一種是關於型別的關鍵字,主要包括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.第二種是確定傳輸方...

超級詳細Tcpdump的用法

第一種是關於型別的關鍵字,主要包括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.第二種是確定傳輸方...

超級詳細Tcpdump 的用法

第一種是關於型別的關鍵字,主要包括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.第二種是確定傳輸方...