利用tcpdump命令統計http的GET和POST請求

一、搭建的知識庫服務器, 須要統計來訪者都是哪些人,由於系統不是本身開發的,看不到訪問日誌。因此考慮從系統層面抓取訪問流量來實現。bash

二、經過tcpdump抓取的數據包,在wireshark中打開發現,http的請求GET動做,或者POST動做,加HOST拼接成一個url能夠打開,抓取到的頁面相似於這種:http://192.168.102.238:8090/pages/viewpage.action?pageId=491717服務器

三、因爲咱們內部工做人員的IP地址基本固定,因此經過IP和訪問的域名來判斷是不是正常的打開頁面請求,來記錄一次來訪者。tcp

四、tcpdump命令使用以下:測試

[root@conence ~]# tcpdump -i em1 tcp[20:2]=0x4745 or tcp[20:2]=0x504f -c 10  
| awk {'print $3'} | uniq | sort -n  //偏移抓包tcp[20:2]=0x4745 爲HTTP-GET 請求,0x504f爲HTTP-POST請求,利用該條命令抓取HTTP的GET和POST請求。url

五、簡單寫一個抓包的腳本,放到crontab中每秒執行日誌

[root@coence test]# cat sic.sh
#!/bin/bash
i=1
while (($i<=5))
do
        DATE0=`date +%Y%m%d%H%M`
        /usr/sbin/tcpdump -i em1 tcp[20:2]=0x4745 or tcp[20:2]=0x504f -c 20  | awk {'print $3'}| uniq | sort -n |awk -F '.' '{print $1.$2.$3.$4}' | uniq >> /tmp/log/src.log_${DATE0}
        
        *//該命令用於抓取HTTP GET/POST 請求,提取源IP,而後利用awk排序並輸出,其中uniq 去除重複項,awk -F XX ,提取一個IP地址的其中一個字段 print $1.$2 目的是拆分同一個字符串(好比192.168.1.1.55611這個在awk來看是一個字符,若是須要輸出其中的55611 則須要經過-F 加 "." 來拆分,而後使用 print $5 單獨輸出其中的一個字段),其中/usr/sbin/tcpdump 爲絕對路徑,若是須要把這個腳本加到crontab中來執行,就須要填寫絕對路徑*

        sleep 10s  
        *//等待10s,抓包數到20個,才能確認是一次正常的頁面請求,這個經過抓包測試過,打開一個頁面在15-20個數據包左右*
        kill `ps aux | grep tcpdump | grep -v grep | awk '{print $2}'`
        //結束當前的抓包
let "i++"
done
exit排序

六、保存的日誌還須要導出以後,經過execl來轉換crontab

七、簡單的統計效果開發

相關文章
相關標籤/搜索