1. 程式人生 > >tcpdump:執行在命令列下的嗅探工具

tcpdump:執行在命令列下的嗅探工具

這裡寫圖片描述

簡介

tcpdump 是一個執行在命令列下的嗅探工具。它允許使用者攔截和顯示傳送或收到過網路連線到該計算機的TCP/IP和其他資料包,即tcpdump可以將網路中傳送的資料包的“頭”完全截獲下來提供分析。tcpdump 是一個在BSD許可證下發布的自由軟體。

tcpdump 適用於大多數的類Unix系統 作業系統:包括Linux、Solaris、BSD、Mac OS X、HP-UX和AIX 等等。在這些系統中,tcpdump 需要使用libpcap這個捕捉資料的庫。其在Windows下的版本稱為WinDump;它需要WinPcap驅動,相當於在Linux平臺下的libpcap。

用途

tcpdump能夠分析網路行為,效能和應用產生或接收網路流量。它支援針對網路層、協議、主機、網路或埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的資訊,從而使使用者能夠進一步找出問題的根源。

也可以使用 tcpdump 的實現特定目的,例如在路由器和閘道器之間攔截並顯示其他使用者或計算機通訊。通過 tcpdump 分析非加密的流量,如Telnet或HTTP的資料包,檢視登入的使用者名稱、密碼、網址、正在瀏覽的網站內容,或任何其他資訊。因此係統中存在網路分析工具主要不是對本機安全的威脅,而是對網路上的其他計算機的安全存在威脅。

有很多使用者喜歡使用柏克萊資料包過濾器來限制 tcpdump 產生的資料包數量,這樣BPF會只把“感興趣”的資料包到上層軟體,可以避免從作業系統 核心向用戶態複製其他資料包,降低抓包的CPU的負擔以及所需的緩衝區空間,從而減少丟包率。

簡單參考手冊

tcpdump採用命令列方式,它的命令格式是:

tcpdump [-n] [-i 埠] [-w 儲存檔名] [-c 抓包數量] [-Aa] [-qX] [-r讀取檔案] [想要捕獲的資料內容(資料包)]

1.引數介紹

1.1 不轉換主機名、埠號等

# tcpdump -n

tcpdump 預設輸出主機名詞,-n 選項是輸出 IP 地址。

1.2 輸出詳細資訊

# tcpdump -v
or
# tcpdump -vv
or
# tcpdump -vvv

tcpdump 的詳細資訊有三個等級,你可以通過在命令列增加 v 標記的個數來獲取更多的資訊。

1.3 指定網路介面

# tcpdump -n -i eth1
or
# tcpdump -n -i any

any 表示任意埠,不加-i選項的話,預設從第一個網路裝置號抓取資訊。

1.4 寫入檔案

# tcpdump -w /path/to/file

寫出的是 tcpdump 固有的格式,需要用 tcpdump 命令檢視該檔案。

1.5 讀取檔案

# tcpdump  -r /path/to/file

1.6 指定抓包大小

# tcpdump  -s 100

1.7 指定抓包數量

# tcpdump  -c 10

不加 -c 選項的話,會預設一直抓包。

1.8 彙總命令

#  tcpdump  -nvvv -i any -c 100 -s 100

從任意網路介面抓取100個包的前100個位元組。

2.過濾器

tcpdump 可以通過各式各樣的表示式,來過濾所擷取或者輸出的資料。

2.1 查詢特定主機的流量

#  tcpdump  -nvvv -i any -c 3 host 10.0.3.1

2.2 只顯示源地址為特定主機的流量

#  tcpdump  -nvvv -i any -c 3 src host 10.0.3.1

2.3 過濾源和目的埠

#  tcpdump  -nvvv -i any -c 3 port 22 and port 60738

2.4 查詢兩個埠號的流量

#  tcpdump  -nvvv -i any -c 20 'port 80 or port 443'

2.5 查詢兩個特定埠和來自特定主機的資料流

#  tcpdump  -nvvv -i any -c 20 '(port 80 or port 443) and host 10.0.3.169'

3.理解輸出結果

3.1 判斷資料包型別

10.0.3.246.56894 > 192.168.0.92.22: Flags [S], cksum 0xcf28 (incorrect -> 0x0388), seq 682725222, win 29200, options [mss 1460,sackOK,TS val 619989005 ecr 0,nop,wscale 7], length 0

從上面的例子,我們可以判斷這個資料包是一個 SYN 資料包。
Flags 型別介紹:

[S] – SYN (開始連線)
[.] – 沒有標記
[P] – PSH (資料推送)
[F] – FIN (結束連線)
[R] – RST (重啟連線)
[S.] - SYN-ACK 資料包

4.資料包檢查

4.1 用十六進位制和 ASCII 碼列印資料包

#  tcpdump  -nvvv -i any -c 1 -XX 'port 80 and host 10.0.3.1'

排查應用程式網路問題的通常做法,就是用 tcpdump 的 -XX 標記打印出 16 進位制和 ASCII 碼格式的資料包。

4.2 只打印 ASCII 碼格式的資料包

#  tcpdump  -nvvv -i any -c 1 -A 'port 80 and host 10.0.3.1'

你可以通過 -A 標記來列印 ASCII 碼格式的資料包。

5.抓取非 TCP 資料流

tcpdump 不是隻能抓 TCP 資料包。它還可以用來獲取其他型別的資料包,例如 ICMP、 UDP 和 ARP 包。

5.1 ICMP 資料包

# tcpdump -nvvv -i any -c 2 icmp

5.2 UDP 資料包

# tcpdump -nvvv -i any -c 2 udp

6.舉例

6.1 監視指定網路介面的資料包

抓取回環網口的包:tcpdump -i lo

6.2 監視指定主機的資料包

截獲主機hostname傳送的所有資料
tcpdump -i eth0 src host hostname

監視所有送到主機hostname的資料包
tcpdump -i eth0 dst host hostname

截獲主機192.168.0.112 和主機192.168.0.113或192.168.0.114的通訊
tcpdump host 192.168.0.112 and \ (192.168.0.113 or 192.168.0.114 )

如果想要獲取主機192.168.0.112除了和主機192.168.0.113之外所有主機通訊的ip包,使用命令:
tcpdump ip host 192.168.0.112 and ! 192.168.0.113

借鑑URL: