python实现图片嗅探工具——自编driftnet
- 前言
- 一、数据包嗅探
- 二、图片捕获
- 三、图片显示及主函数
- 写在最后
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:961562169
前言
想必尝试过中间人攻击(MITM)的小伙伴,大概率是知道driftnet的。这是一款简单使用的图片捕获工具,可以很方便的从网络数据包中抓取图片,从而将监听对象所浏览的图片尽收眼底。
苦于driftnet对windows的支持不是特别友好,而且近日闲来没事,于是我决定用python写一个简单的图片嗅探工具。
哐哐哐~搞定之后,效果还是不错的:
简单设置过后,开始监听:
注意:本工具不具有arp欺骗的功能,因此需要结合arp欺骗相应工具使用(如EvilFoca)
一、数据包嗅探
数据的嗅探采用的是scapy库的sniff模块,一句话便能搞定:
# 嗅探函数 def dosniff(filter_rule,sniff_time,prn_f): sniff(filter=filter_rule,timeout=sniff_time,prn=prn_f) # 监听数据包
其中prn参数是一个回调函数,即每抓取到一个数据包之后将执行这个函数,而这也是捕获数据包中图片的关键,具体实现,客官您望下看~
二、图片捕获
这里需要明确的是,在图片的传输过程中,往往一个TCP包的长度是不够的,所以一张图片往往分为很多个包。因此,为了捕获其中的图片,我们必须对图片数据进行识别,并将对应的数据包合并(相同的ack值)。
具体思路如下:
- 找到有上网数据的数据包
if p.haslayer(Raw): # 找出有上网数据的
- 判断是否为含有图片的HTTP响应
if 'Content-Type: image' in str(load): # 如果为图片响应 xxxxx # 提取HTTP协议中的相关信息(图片长度、图片后缀、IP地址、以及部分图片二进制数据) else: xxxxx # 判断是否为图片数据的某一部分,如果是则将数据添加进去