python tcp 實時抓包


問題:之前我們系統上線后,因為是舊的系統,沒有加統計的功能,比如用戶喜歡那個頁面,是哪些用戶再訪問,接口的負載能力等等。

解決辦法: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,代碼解析:

 

[python]  view plain  copy
 
  1. pcapy.findalldevs()  
  2.   
  3.     max_bytes = 20480  
  4.     promiscuous = False  
  5.     read_timeout = 10000 # in milliseconds  
  6.     pc = pcapy.open_live("eth1", max_bytes,  
  7.         promiscuous, read_timeout)  
  8.   
  9. 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 

 


免責聲明!

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



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