linux中tcpdump統計http請求應用例子

來源:互聯網
上載者:User

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

ps://www.centos.bz/wp-content/uploads/2014/07/http-tcpdump.png" />

下面介紹其統計方法。
1、捕捉10秒的資料包。

 代碼如下 複製代碼
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}'`

此命令表示監控網卡eth0,捕捉tcp,且21-22位元組字元為GE或者PO,表示匹配GET或者POST請求的資料包,並寫到/tmp/tcp.cap檔案。
2、這時候我們得到最新10秒的位元據包檔案,我們下一步就是通過strings命令來找出GET/POST的url以及Host。

 代碼如下 複製代碼
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

此命令是本文的關鍵,通過strings顯示二進位檔案tcp.cap所有可列印字元,然後通過grep和awk過濾出http請求,並把拼接得到的url(包括網域名稱+uri)寫進一個檔案url.txt。
3、這時我們拿到了近10秒鐘所有的訪問url,接下來的統計就容易得出,比如:
統計QPS:

 代碼如下 複製代碼
(( qps=$(wc -l /tmp/url.txt | cut -d' ' -f 1) / 10 ))
排除靜態檔案統計前10訪問url:
grep -v -i -E "\.(gif|png|jpg|jpeg|ico|js|swf|css)" /tmp/url.txt | sort | uniq -c | sort -nr | head -n 10

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.