python qq消息接收存储_【原创】python嗅探QQ消息实战

目录

需求分析

选型

设计与流程

实现过程

结果展示

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。如图所示。

当有发言产生时,返回一个有意义的结果如下图所示。

流程设计

登录了QQ账号

使用pypcap自动嗅探收到的网络包

使用dpkt解析收到的网络包并过滤出有消息内容的数据包

对消息进行分类,将发言时间、发送方ID号,接收方ID号、发言内容、发言分类结果和置信度这几个信息索引到Elasticsearch中

使用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 结果展示

源码

论如何用python发qq消息轰炸虐狗好友

因为我的某个好友在情人节的时候秀恩爱,所以我灵光一闪制作了qq消息轰炸并记录了下来. PS:另外很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基 ...

Python发送QQ消息

一.需求背景 每天早上取一批数据,数据文件经过压缩加密之后用邮箱发送,而解压密码通过QQ发送给运营.使用Python进行取数.文件加密在已经实现的情况下,需要实现通过QQ发送密码的功能.     在进 ...

关于 使用python向qq好友发送消息(对爬虫的作用----当程序执行完毕或者报错无限给自己qq发送消息,直到关闭)

以前看到网上一些小程序,在处理完事物后会自动发送qq消息,但是一直搞不懂是说明原理.也在网上找过一些python登陆qq发送消息的文字,但是都太复杂了.今天偶然看到一篇文章,是用python调用win ...

python实现定时发送qq消息

因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友.群.讨论组发送qq消息.其工作流程是:访问数据库提取最近计划— ...

[原创].NET 业务框架开发实战之八 业务层Mapping的选择策略

原文:[原创].NET 业务框架开发实战之八 业务层Mapping的选择策略 .NET 业务框架开发实战之八 业务层Mapping的选择策略 前言:在上一篇文章中提到了mapping,感觉很像在重新实 ...

虚拟机有QQ消息时宿主机自动弹窗提示

因为是检测窗口实现的,所以要求设置会话窗口自动弹出,而且看完消息就把QQ消息窗口关掉... 虚拟机端 #! /usr/bin/env python # -*- coding: utf-8 -*- fr ...

pyqt win32发送QQ消息

标题应该改为:python+win32发送QQ消息,全程使用python套个pyqt壳. 其实代码来自: http://blog.csdn.net/suzyu12345/article/details ...

Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验

(一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...

python实现qq机器人qqbot

title: python实现qq机器人qqbot tags: python date: 2018-6-1 10:19:00 --- 以下内容为转载 一.介绍 qqbot 是一个用 python 实现 ...

随机推荐

sp_get_menu函数使用分析

function sp_get_menu($id="main",$effected_id="mainmenu",$filetpl="

转:C/C++中,空数组、空类、类中空数组的解析及其作用

转自:http://blog.sina.com.cn/s/blog_93b45b0f01015s95.html 我们经常会遇到这些问题: (1)C++中定义一个空类,他们它的大小(sizeof) 为多 ...

(基础篇)PHP获取时间、时间戳的各种格式写法汇总

1.获取当前时间方法date() 很简单,这就是获取时间的方法,格式为:date($format, $timestamp),format为格式.timestamp为时间戳–可填参数. 2.获取时间戳方 ...

【HDOJ】【3037】Saving Beans

排列组合 啊……这题是要求c(n-1,0)+c(n,1)+c(n+1,2)+......+c(n+m-1,m) 这个玩意……其实就等于c(n+m,m) 好吧然后就是模P……Lucas大法好= = 我S ...

android4.4组件分析--service组件

6       Service 6.1            service介绍 6.1.1.            基本介绍 Service是Android四大组件之中的一个(其余的是activit ...

SQL总结手册

1.SQL语法 (1)查询 SQL查询是使用最多的,需要凭借结构.索引和字段类型等因素.大多数据库含有一个优化器(optimizer),把用户查询转换为可选形式,以提高查询效率. 基本语法为: SEL ...

移动端touchstart,touchmove,touchend

近段时间使用html5开发一个公司内部应用,而触摸事件必然是移动应用中所必须的,刚开始以为移动设备上或许也会支持鼠标事件,原来是不支持的,好在webkit内核的移动浏览器支持touch事件,并且打包成 ...

深入了解View(一)—— measure測量流程分析

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit改动而来,用它写博客.将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接 ...

【java并发核心一】Semaphore 的使用思路

最近在看一本书,打算一边学习一边把学习的经验记下来,所粘贴的代码都是我运行过的,大家一起学习,欢迎吐槽. 估计也没多少人看我的博客,哈哈,那么我还是会记 ...

ASP.NET MVC:看 MVC 源码,学习:如何将 Area 中的 Controller 放到独立的程序集?

背景 本文假设您已经熟悉了 ASP.NET MVC 的常规开发方式.执行模型和关键扩展点,这里主要说一下如何使用 ASP.NET MVC 的源代码解决一些问题. 如何将 Area 中的 Control ...

你可能感兴趣的:(python,qq消息接收存储)