linux tcpdump抓取HTTP包的詳細解釋
linux下使用tcpdump抓包分析tcp的三次握手
首先貼上tcp 三次握手的原理圖
伺服器開啟ftp服務並執行tcpdump抓包
伺服器:192.168.3.14 ftp服務
客戶端:192.168.3.100
伺服器執行以下命令,客戶端訪問伺服器ftp://192.168.3.14
tcpdump -S tcp port 21 -nn -i eth0 -c 20 > ftp.txt
-S列印TCP 資料包的順序號時, 使用絕對的順序號, 而不是相對的順序號
監控ftp的命令埠21
-c 只抓20個數據包
192.168.3.100客戶端使用隨機埠訪問伺服器21埠,seq=242796690(syn=j)
伺服器192.168.3.14迴應客戶端192.168.3.100
seq 1102963514, ack 242796691(ack=j+1,seq=k)
客戶端192.168.3.100確認接受到伺服器192.168.3.14的資訊
ack 1102963515(ack=k+1)
此時伺服器與客戶端進入ESTABLISHED狀態,開始進行資料傳送。。
利用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、簡單的統計效果