请选择 进入手机版 | 继续访问电脑版

游迹天下-移动本地生活平台服务提供商

 找回密码
 立即注册
搜索
查看: 2117|回复: 0

消息驱动的自动化抓包架构

[复制链接]

85

主题

85

帖子

313

积分

版主

Rank: 7Rank: 7Rank: 7

积分
313
发表于 2013-11-9 23:30:38 | 显示全部楼层 |阅读模式
有同学说《微信公众平台账号内容搜索引擎爬取技术实现》对微信公众账号的爬取技术实现说得不透彻,那咱们再继续分享点细节吧。
1、业务场景:   
  串行自动化调用一些第三方的程序(请求参数变化),程序自动抓取序的请求报文,在抓取到匹配报文后,调用自有程序进行相应的业务处理。
串行调用是指必须处理完上一个请求后,才发起下一请求
2、主要技术方案:   
  系统主要语言为python
  主程序通过subprocess.call、subprocess.Popen来启动抓包程序线程和按键精灵程序线程
  抓包监听程序使用wireshark的命令行工具tshark
  自动化调用第三方程序采用按键精灵(也可考虑autoit等)
   按键精灵发起http请求使用WinHttp.WinHttpRequest.5.1
   消息队列采用RabbitMQ Server,消息传递都采用JSON报文
   接受按键精灵处理结果的系统采用Django
   对rabbitmq 的操作采用python pika库
   备注:
  a、可以通过制作按键精灵的插件来直接支持写队列等功能,这里直接利用按键精灵及VBS已有功能来;也可采用autohotkey等对python等支持较好的自动化程序
  b、在一些场合pywinauto等自动化测试工具并不能很好满足需求,而sikuli、按键精灵、autoit等在一些偏GUI的场合值得考虑

3、主要流程   3.1、主程序轮询任务处理结果队列,以获取自动化程序处理结果(例如是否执行完,执行结果等);主程序的线程与tshark抓包程序线程间通过线程共享方式共享抓包结果;
      主程序通过将正在处理请求的业务数据的标识(例如账户号)与消息队列获取的自动化程序处理的结果,匹配对应自动化任务标识的抓包结果(所以必须串行执行)
  3.2、如果上一条请求已经处理完,主程序调用subprocess.call(['taskkill', '/F', '/T', '/PID', str(p.pid)])杀死上一次请求所创建的自动化程序的线程和tshark抓包线程;
  3.3、主程序轮询待处理任务队列,如有新任务,将需要处理的业务数据写入约定的文件/数据库等,以实现与自动化程序的数据共享交换;然后创建自动化程序线程和抓包请求线程,发起新的自动化操作和抓包操作
  3.4、自动化程序从文件/数据库中读取业务数据,然后调用第三方需要抓包的程序执行自动化操作,处理结果通过CreateObject("WinHttp.WinHttpRequest.5.1")发起http请求,将对于业务标识的处理结果发送给本地Django程序
3.5、Django程序接收到请求后,将结果写入任务处理结果队列
3.6、抓包程序调用tshark抓包。避免tshark对抓包结果缓冲,需要注意用-l 参数
3.7、rabbitmq 操作采用python pika库,对任务处理结果队列和待处理任务队列消息都采用必须确认、持久化方式


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|游迹,懂你,懂世界!   游迹天下官方微信:uooji_com,游迹语音助手:uoojihelper|网站地图

GMT+8, 2019-1-17 12:28 , Processed in 0.148437 second(s), 38 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表