
網絡數據包截獲分析工具。支持針對網絡層、協議、主機、網絡或端口的過濾。并提供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的數據包
tcpdump 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)分析
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