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、簡單的統計效果