天天看點

Linux基礎:用tcpdump抓包

網絡資料包截獲分析工具。支援針對網絡層、協定、主機、網絡或端口的過濾。并提供and、or、not等邏輯語句幫助去除無用的資訊。

tcpdump - dump traffic on a network

監聽第一塊網卡上經過的資料包。主機上可能有不止一塊網卡,是以經常需要指定網卡。

例子:監聽本機跟主機<code>182.254.38.55</code>之間往來的通信包。

備注:出、入的包都會被監聽。

特定來源

特定目标位址

如果不指定<code>src</code>跟<code>dst</code>,那麼來源 或者目标 是hostname的通信都會被監聽

伺服器上不同服務分别用了TCP、UDP作為傳輸層,假如隻想監聽TCP的資料包

監聽來自主機<code>123.207.116.169</code>在端口<code>22</code>上的TCP資料包

<code>210.27.48.1</code>除了和<code>210.27.48.2</code>之外的主機之間的通信

(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預設會将輸出寫到緩沖區,隻有緩沖區内容達到一定的大小,或者tcpdump退出時,才會将輸出寫到本地磁盤

也可以加上<code>-U</code>強制立即寫到本地磁盤(一般不建議,性能相對較差)

先看下面一個比較常見的部署方式,在伺服器上部署了nodejs server,監聽3000端口。nginx反向代理監聽80端口,并将請求轉發給nodejs server(<code>127.0.0.1:3000</code>)。

浏覽器 -&gt; nginx反向代理 -&gt; nodejs server

問題:假設使用者(183.14.132.117)通路浏覽器,發現請求沒有傳回,該怎麼排查呢?

步驟一:檢視請求是否到達nodejs server -&gt; 可通過日志檢視。

步驟二:檢視nginx是否将請求轉發給nodejs server。

這時你會發現沒有任何輸出,即使nodejs server已經收到了請求。因為nginx轉發到的位址是127.0.0.1,用的不是預設的interface,此時需要顯示指定interface

備注:配置nginx,讓nginx帶上請求側的host,不然nodejs server無法擷取 src host,也就是說,下面的監聽是無效的,因為此時對于nodejs server來說,src host 都是 127.0.0.1

步驟三:檢視請求是否達到伺服器

tcpdump 很詳細的

<a href="http://blog.chinaunix.net/uid-11242066-id-4084382.html">http://blog.chinaunix.net/uid-11242066-id-4084382.html</a>

<a href="http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html">http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html</a>

Linux tcpdump指令詳解

Tcpdump usage examples(推薦)

<a href="http://www.rationallyparanoid.com/articles/tcpdump.html">http://www.rationallyparanoid.com/articles/tcpdump.html</a>

使用TCPDUMP抓取HTTP狀态頭資訊

<a href="http://blog.sina.com.cn/s/blog_7475811f0101f6j5.html">http://blog.sina.com.cn/s/blog_7475811f0101f6j5.html</a>