出家如初,成佛有余

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

Posted in 技术相关 by chuanliang on 2013/09/30

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

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库,对任务处理结果队列和待处理任务队列消息都采用必须确认、持久化方式

 

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: