簡介
網路資料包截獲分析工具。支援針對網路層、協議、主機、網路或埠的過濾。並提供and、or、not等邏輯語句幫助去除無用的資訊。
tcpdump - dump traffic on a network
例子
不指定任何引數
監聽第一塊網路卡上經過的資料包。主機上可能有不止一塊網路卡,所以經常需要指定網路卡。
tcpdump
複製程式碼
監聽特定網路卡
tcpdump -i en0
複製程式碼
監聽特定主機
例子:監聽本機跟主機182.254.38.55
之間往來的通訊包。
備註:出、入的包都會被監聽。
tcpdump host 182.254.38.55
複製程式碼
特定來源、目標地址的通訊
特定來源
tcpdump src host hostname
複製程式碼
特定目標地址
tcpdump dst host hostname
複製程式碼
如果不指定src
跟dst
,那麼來源 或者目標 是hostname的通訊都會被監聽
tcpdump host hostname
複製程式碼
特定埠
tcpdump port 3000
複製程式碼
監聽TCP/UDP
伺服器上不同服務分別用了TCP、UDP作為傳輸層,假如只想監聽TCP的資料包
tcpdump tcp
複製程式碼
來源主機+埠+TCP
監聽來自主機123.207.116.169
在埠22
上的TCP資料包
tcpdump tcp port 22 and src host 123.207.116.169
複製程式碼
監聽特定主機之間的通訊
tcpdump ip host 210.27.48.1 and 210.27.48.2
複製程式碼
210.27.48.1
除了和210.27.48.2
之外的主機之間的通訊
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
複製程式碼
稍微詳細點的例子
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
複製程式碼
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個引數的位置,用來過濾資料包的型別 (2)-i eth1 : 只抓經過介面eth1的包 (3)-t : 不顯示時間戳 (4)-s 0 : 抓取資料包時預設抓取長度為68位元組。加上-S 0 後可以抓到完整的資料包 (5)-c 100 : 只抓取100個資料包 (6)dst port ! 22 : 不抓取目標埠是22的資料包 (7)src net 192.168.1.0/24 : 資料包的源網路地址為192.168.1.0/24 (8)-w ./target.cap : 儲存成cap檔案,方便用ethereal(即wireshark)分析
抓http包
TODO
限制抓包的數量
如下,抓到1000個包後,自動退出
tcpdump -c 1000
複製程式碼
儲存到本地
備註:tcpdump預設會將輸出寫到緩衝區,只有緩衝區內容達到一定的大小,或者tcpdump退出時,才會將輸出寫到本地磁碟
tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap
複製程式碼
也可以加上-U
強制立即寫到本地磁碟(一般不建議,效能相對較差)
實戰例子
先看下面一個比較常見的部署方式,在伺服器上部署了nodejs server,監聽3000埠。nginx反向代理監聽80埠,並將請求轉發給nodejs server(127.0.0.1:3000
)。
瀏覽器 -> nginx反向代理 -> nodejs server
問題:假設使用者(183.14.132.117)訪問瀏覽器,發現請求沒有返回,該怎麼排查呢?
步驟一:檢視請求是否到達nodejs server -> 可通過日誌檢視。
步驟二:檢視nginx是否將請求轉發給nodejs server。
tcpdump port 8383
複製程式碼
這時你會發現沒有任何輸出,即使nodejs server已經收到了請求。因為nginx轉發到的地址是127.0.0.1,用的不是預設的interface,此時需要顯示指定interface
tcpdump port 8383 -i lo
複製程式碼
備註:配置nginx,讓nginx帶上請求側的host,不然nodejs server無法獲取 src host,也就是說,下面的監聽是無效的,因為此時對於nodejs server來說,src host 都是 127.0.0.1
tcpdump port 8383 -i lo and src host 183.14.132.117
複製程式碼
步驟三:檢視請求是否達到伺服器
tcpdump -n tcp port 8383 -i lo and src host 183.14.132.117
複製程式碼
相關連結
tcpdump 很詳細的 http://blog.chinaunix.net/uid-11242066-id-4084382.html
http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html Linux tcpdump命令詳解
Tcpdump usage examples(推薦) http://www.rationallyparanoid.com/articles/tcpdump.html
使用TCPDUMP抓取HTTP狀態頭資訊 http://blog.sina.com.cn/s/blog_7475811f0101f6j5.html