目录
需求分析
选型
设计与流程
实现过程
结果展示
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 ...