Linux基礎:用tcpdump抓包

簡介

網絡數據包截獲分析工具。支持針對網絡層、協議、主機、網絡或端口的過濾。並提供and、or、not等邏輯語句幫助去除無用的信息。html

tcpdump - dump traffic on a networknode

例子

不指定任何參數

監聽第一塊網卡上通過的數據包。主機上可能有不止一塊網卡,因此常常須要指定網卡。nginx

tcpdump
複製代碼

監聽特定網卡

tcpdump -i en0
複製代碼

監聽特定主機

例子:監聽本機跟主機182.254.38.55之間往來的通訊包。shell

備註:出、入的包都會被監聽。瀏覽器

tcpdump host 182.254.38.55
複製代碼

特定來源、目標地址的通訊

特定來源bash

tcpdump src host hostname
複製代碼

特定目標地址服務器

tcpdump dst host hostname
複製代碼

若是不指定srcdst,那麼來源 或者目標 是hostname的通訊都會被監聽網絡

tcpdump host hostname
複製代碼

特定端口

tcpdump port 3000
複製代碼

監聽TCP/UDP

服務器上不一樣服務分別用了TCP、UDP做爲傳輸層,假如只想監聽TCP的數據包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

相關文章
相關標籤/搜索