史上最簡明的 Tcpdump 入門指南,看這一篇就夠了

簡介

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

如果不指定 srcdst,那麼來源 或者目標 是 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

作者:程序猿小卡
鏈接:https://juejin.cn/post/6844903541845262344

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/W_CPV77fUMQOYVOom0ugJg