問題:之前我們系統上線后,因為是舊的系統,沒有加統計的功能,比如用戶喜歡那個頁面,是哪些用戶再訪問,接口的負載能力等等。
解決辦法:1,現有代碼更改,添加功能。現有代碼侵入太多,工作量比較大
2,想到tcpdump 抓包,然后分析文件。文件特別大,而且不能做到實時處理。
3,采用python 腳本來處理,直接抓包80端口,加上一些處理,入庫之內。
環境搭建:
1,使用到的第三方包:dpkt-1.8.8.tar.gz,
impacket-master.zip,
pcapy-master.zip
pylibpcap-0.6.4.tar.gz
PyMySQL3-0.5.tar.gz
pypcap-1.1.6.tar.gz
pypcap-master.zip
下載地址:
https://pan.baidu.com/s/1nvXeuLz
2,代碼解析:
- pcapy.findalldevs()
- max_bytes = 20480
- promiscuous = False
- read_timeout = 10000 # in milliseconds
- pc = pcapy.open_live("eth1", max_bytes,
- promiscuous, read_timeout)
- pc.setfilter('tcp port 80')
熟悉tcpdump 的都知道, eth1 是外網,然后 tcp port 80 是表示轉80 端口的包。
核心代碼:
recv_pkts 方法。
解包,得到請求ip地址
src = socket.inet_ntoa(ip.src)
ds = socket.inet_ntoa(ip.dst)
轉換數據為 http 請求數據,這樣http請求的數據都在里邊,比如cookie,session,
Url, 參數,表單等等。
request = dpkt.http.Request(http_data)
接下來, 就是統計數據了,自己實現即可。
項目地址:
https://github.com/gitsteven/python-tcpdumpdata
將來的版本:
1, 支持多包合並。
2, 支持https