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


1、搭建的知識庫服務器, 需要統計來訪者都是哪些人,因為系統不是自己開發的,看不到訪問日志。所以考慮從系統層面抓取訪問流量來實現。

2、通過tcpdump抓取的數據包,在wireshark中打開發現,http的請求GET動作,或者POST動作,加HOST拼接成一個url可以打開,抓取到的頁面類似於這種:http://192.168.102.238:8090/pages/viewpage.action?pageId=491717

3、由於我們內部工作人員的IP地址基本固定,所以通過IP和訪問的域名來判斷是否是正常的打開頁面請求,來記錄一次來訪者。

4、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請求。

5、簡單寫一個抓包的腳本,放到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

6、保存的日志還需要導出之后,通過execl來轉換

7、簡單的統計效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM