【原創】python嗅探QQ消息實戰


目錄

  1. 需求分析
  2. 選型
  3. 設計與流程
  4. 實現過程
  5. 結果展示

1 需求分析

  在一些業務場景中需要拿到IM上的通信記錄來做一些數據分析,例如對QQ平台中的消息進行領域分類等。

2 選型

環境與工具:

  • python 2.7
  • Ubuntu 16.04
  • ElasticSearch 5.5.2
  • Kibana 5.5.2
  • Firefox 57.0.1 (64-bit)

Python第三方依賴:

  • pypcap(1.2.0)【捕包】
  • dpkt(1.9.1)【解析包】
  • elasticsearch(6.0.0) 【es的python客戶端】
  • tgrocery(0.1.3)【短文本分類】

3 分析與設計

  為了降低嗅探的難度,避免使用https的連接,從連接http://w.qq.com/ 抓取消息。

觀察業務邏輯

  使用火狐瀏覽器的前端工具(F12)來觀察我們的研究對象

  發現前端不斷查詢是否有新的消息產生以便獲取到頁面中,如果當前沒有新消息,則返回一個特定的JSON。如圖所示。
  當有發言產生時,返回一個有意義的結果如下圖所示。

流程設計

  1. 登錄了QQ賬號
  2. 使用pypcap自動嗅探收到的網絡包
  3. 使用dpkt解析收到的網絡包並過濾出有消息內容的數據包
  4. 對消息進行分類,將發言時間、發送方ID號,接收方ID號、發言內容、發言分類結果和置信度這幾個信息索引到Elasticsearch中
  5. 使用Kibana進行可視化

4 實現過程

4.1 包嗅探與包解析

import pcap
import dpkt
def captData():
	pc=pcap.pcap('wlp5s0')  #參數可為網卡名,可以使用ifconfig命令查看
	pc.setfilter('tcp port 80')    #設置監聽過濾器
	for ptime,pdata in pc:    #ptime為收到時間,pdata為收到數據
		pkt = dpkt.ethernet.Ethernet(pdata)  
		if pkt.data.data.__class__.__name__ != 'TCP':
			continue
		ip_data=pkt.data
		tcp_data=ip_data.data
		app_data=tcp_data.data#向上層層解析直到應用層的內容

		if app_data.find('poll_type')!=-1:#以特定字符串作為有消息的標識
			process(app_data)

4.2 短文本分類

from tgrocery import Grocery
def labelmaker(self):
	result=[]
	grocery = Grocery('11c_20k_20171226')#參數是分類模型的名稱
	grocery.load()	
	label_confidence=sorted(grocery.predict(self.shorttext).dec_values.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)[0]
	result.append(label_confidence[0])#置信度最高的分類結果
	result.append(label_confidence[1])# 置信度
	return result

4.3 將數據索引到ES

from elasticsearch import Elasticsearch
import hashlib
class Index2ES:
	def __init__(self,index,doctype,response_body):
		self.body=response_body
		self.index=index
		self.doctype=doctype
		self.id=hashlib.md5(str(response_body['time'])).hexdigest()
		self.es = Elasticsearch()

	def putdoc(self):
		self.es.index(index=self.index,doc_type=self.doctype,id=self.id,body=self.body)

4.4 新建並配置Kibana圖表

5 結果展示

源碼

Github:qqSnifferAndClassifier


免責聲明!

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



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