主頁 > 知識庫 > 舉例講解Linux中tcpdump工具的應(yīng)用

舉例講解Linux中tcpdump工具的應(yīng)用

熱門標(biāo)簽:硅谷的囚徒呼叫中心 家政服務(wù)網(wǎng)絡(luò) 服務(wù)器配置 百度競價點擊價格的計算公式 美團 解決方案 電話機器人搭建 外呼系統(tǒng)

先來看一個比較基本的用法:

復(fù)制代碼
代碼如下:

tcpdump -i eth0

其中,eth0為參數(shù)值,表示需要抓包的網(wǎng)口,這是個必需參數(shù)哦。

tcpdump的具體參數(shù)及意義:

-i:指定tcpdump監(jiān)聽的網(wǎng)絡(luò)接口

-s:指定要監(jiān)聽數(shù)據(jù)包的長度

-c:指定要監(jiān)聽的數(shù)據(jù)包數(shù)量,達到指定數(shù)量后自動停止抓包

-w:指定將監(jiān)聽到的數(shù)據(jù)包寫入文件中保存

-A:指定將每個監(jiān)聽到的數(shù)據(jù)包以ACSII可見字符打印

-n:指定將每個監(jiān)聽到數(shù)據(jù)包中的域名轉(zhuǎn)換成IP地址后顯示

-nn:指定將每個監(jiān)聽到的數(shù)據(jù)包中的域名轉(zhuǎn)換成IP、端口從應(yīng)用名稱轉(zhuǎn)換成端口號后顯示

-e:指定將監(jiān)聽到的數(shù)據(jù)包鏈路層的信息打印出來,包括源mac和目的mac,以及網(wǎng)絡(luò)層的協(xié)議

-p:將網(wǎng)卡設(shè)置為非混雜模式,不能與host或broadcast一起使用

-r:指定從某個文件中讀取數(shù)據(jù)包

-S:指定打印每個監(jiān)聽到的數(shù)據(jù)包的TCP絕對序列號而非相對序列號


tcpdump支持很多的關(guān)鍵字,下面先看幾個例子:

(例1)tcpdump -i eth0 host 192.168.0.250 ----- 在網(wǎng)口eth0上抓取主機地址為192.168.0.250的所有數(shù)據(jù)包 。

(例2)tcpdump -i eth0 net 192.168.0.0/24 ------ 在網(wǎng)口eth0上抓取網(wǎng)絡(luò)地址為192.168.0.0/24的所有數(shù)據(jù)包

(例3)tcpdump -i eth0 port 80 ------ 在網(wǎng)口eth0上抓取端口為80的所有數(shù)據(jù)包(注意,這里不區(qū)分是源端口還是目的端口)

當(dāng)然,我們也可以指定源端口或目的端口

(例4)tcpdump -i eth0 src port 80 and dst port 6100 --- 在網(wǎng)口eth0上抓取源端口為80且目的端口為6100的數(shù)據(jù)包,這里用到了and邏輯運算符

(例5)tcpdump -i eth0 icmp --- 在網(wǎng)口eth0上抓取所有icmp協(xié)議的數(shù)據(jù)包

以上幾個例子,可以大致體現(xiàn)出tcpdump的基本用法。

實際上,tcpdump主要包括三種類型的關(guān)鍵字,第一種是關(guān)于類型的關(guān)鍵字,主要包括host,net,port,如上面的例(1)(2)(3),第二種

是確定傳輸方向的關(guān)鍵字,主要包括src,dst,src or dst,src and dst,這些關(guān)鍵字指明了傳輸?shù)姆较?,如上面的例?)。第三種是協(xié)議關(guān)鍵字,包括fddi,ip,arp,

rarp,tcp,udp,imcp等,如上面的例(5)。

除了這三種類型的關(guān)鍵字外,還有其他重要的關(guān)鍵字,如:gateway,broadcast,less,greater,還有三種邏輯運算,取非運算是'not'、'!',與運算符是'and'、''、

或運算符是'or'、'||',這些關(guān)鍵字可以組合起來構(gòu)成強大的組合條件來滿足我們的需求。

借助tcpdump統(tǒng)計http請求
這里所說的統(tǒng)計http請求,是指統(tǒng)計QPS(每秒請求數(shù)),統(tǒng)計前十條被訪問最多的url。一般做這樣的統(tǒng)計時,我們經(jīng)常會使用網(wǎng)站訪問日志來統(tǒng)計。當(dāng)我們來到一個陌生的服務(wù)器環(huán)境,需要立即統(tǒng)計當(dāng)前前十條被訪問最多的url,來初步確定是否存在攻擊行為,使用tcpdump則簡單得多,因為我們不需要關(guān)心網(wǎng)站日志在哪,不需要考慮網(wǎng)站日志有沒有開啟之類的問題,直接用tcpdump捕捉當(dāng)前的http包,再進一步過濾,就會得出我們想要的統(tǒng)計。此功能已集成到EZHTTP,下面是效果圖:

下面介紹其統(tǒng)計方法。
1、捕捉10秒的數(shù)據(jù)包。

復(fù)制代碼
代碼如下:

tcpdump -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x504f -w /tmp/tcp.cap -s 512 2>1
sleep 10
kill `ps aux | grep tcpdump | grep -v grep | awk '{print $2}'`

此命令表示監(jiān)控網(wǎng)卡eth0,捕捉tcp,且21-22字節(jié)字符為GE或者PO,表示匹配GET或者POST請求的數(shù)據(jù)包,并寫到/tmp/tcp.cap文件。
2、這時候我們得到最新10秒的二進制數(shù)據(jù)包文件,我們下一步就是通過strings命令來找出GET/POST的url以及Host。

復(fù)制代碼
代碼如下:

strings /tmp/tcp.cap | grep -E "GET /|POST /|Host:" | grep --no-group-separator -B 1 "Host:" | grep --no-group-separator -A 1 -E "GET /|POST /" | awk '{url=$2;getline;host=$2;printf ("%s\n",host""url)}' > url.txt

此命令是本文的關(guān)鍵,通過strings顯示二進制文件tcp.cap所有可打印字符,然后通過grep和awk過濾出http請求,并把拼接得到的url(包括域名+uri)寫進一個文件url.txt。
3、這時我們拿到了近10秒鐘所有的訪問url,接下來的統(tǒng)計就容易得出,比如:
統(tǒng)計QPS:

復(fù)制代碼
代碼如下:

(( qps=$(wc -l /tmp/url.txt | cut -d' ' -f 1) / 10 ))

排除靜態(tài)文件統(tǒng)計前10訪問url:

復(fù)制代碼
代碼如下:

grep -v -i -E "\.(gif|png|jpg|jpeg|ico|js|swf|css)" /tmp/url.txt | sort | uniq -c | sort -nr | head -n 10

標(biāo)簽:韶關(guān) 防城港 烏蘭察布 南昌 北海 撫州 邢臺 臨沂

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《舉例講解Linux中tcpdump工具的應(yīng)用》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266