Python网络安全:使用Scapy检测ARP欺骗攻击
Python网络安全:使用Scapy检测ARP欺骗攻击
ARP欺骗是一种常见的网络攻击手段,攻击者通过发送伪造的ARP响应包,将自己的MAC地址与目标IP地址绑定,从而拦截目标设备与网络的通信。本文将介绍如何使用Python和Scapy库编写一个简单的ARP欺骗检测脚本。
代码实现
from scapy.all import *
from tkinter import messagebox
def get_mac(ip_address):
# 使用ARP请求获取IP地址对应的MAC地址
responses, unanswered = srp(Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ip_address), timeout=2, retry=10)
for s, r in responses:
return r[Ether].src
return None
def detect_attack():
with open('clients.txt', 'r') as f:
clients = f.readlines()
for client in clients:
ip = client.split()[0]
mac = get_mac(ip)
sniff_filter = 'arp and src host ' + ip
sniff_timeout = 10
sniff_count = 0
sniff_packets = sniff(filter=sniff_filter, timeout=sniff_timeout)
for packet in sniff_packets:
sniff_count += 1
if packet.haslayer(ARP) and packet[ARP].op == 2: # 判断是否为ARP响应包
src_mac = packet[ARP].hwsrc # 获取源MAC地址
dst_mac = packet[ARP].hwdst # 获取目标MAC地址
if src_mac != get_mac(ip) and src_mac != '00:00:00:00:00:00': # 判断是否存在伪造源MAC地址的情况
messagebox.showwarning('警告',
'检测到伪造源攻击!攻击源IP地址为' + ip + ',MAC地址为' + mac + ',伪造源MAC地址为' + src_mac + '!')
# 记录攻击日志
with open('detection_log.txt', 'a') as f:
f.write('警告' + '检测到伪造源攻击!攻击源IP地址为' + ip + ',MAC地址为' + mac + ',伪造源MAC地址为' + src_mac + '!
')
return
if sniff_count > 100:
messagebox.showwarning('警告', '检测到攻击源IP地址为' + ip + ',MAC地址为' + mac + '!')
with open('detection_log.txt', 'a') as f:
f.write('警告' + '检测到攻击源IP地址为' + ip + ',MAC地址为' + mac + '!
')
else:
messagebox.showinfo('提示', '未检测到攻击源!')
with open('detection_log.txt', 'a') as f:
f.write('提示' + '未检测到攻击源!
')
return
if __name__ == '__main__':
detect_attack()
代码解释
-
导入必要的库:
scapy.all: 用于网络数据包的构造、发送、接收和分析。tkinter.messagebox: 用于显示警告和提示信息。
-
get_mac(ip_address)函数:- 该函数用于获取指定IP地址对应的MAC地址。
- 使用
srp()函数发送ARP请求并接收响应。 - 如果收到响应,则返回响应包中的源MAC地址,否则返回
None。
-
detect_attack()函数:- 该函数是ARP欺骗检测的主要逻辑。
- 首先从
clients.txt文件中读取需要监控的IP地址列表。 - 针对每个IP地址,使用
sniff()函数捕获网络数据包,并设置过滤器只接收来自该IP地址的ARP数据包。 - 循环遍历每个捕获到的数据包:
- 如果是ARP响应包,则获取源MAC地址和目标MAC地址。
- 判断源MAC地址是否与之前获取的MAC地址一致,如果不一致且不是广播地址,则认为检测到ARP欺骗攻击。
- 弹出警告信息,并将攻击信息记录到日志文件中。
- 如果捕获到的数据包数量超过100个,则认为可能存在攻击行为,弹出警告信息并记录日志。
- 如果未检测到攻击,则弹出提示信息并记录日志。
记录伪造源攻击地址
在代码中,我们已经在检测到伪造源攻击的部分添加了记录日志的代码:
with open('detection_log.txt', 'a') as f:
f.write('警告' + '检测到伪造源攻击!攻击源IP地址为' + ip + ',MAC地址为' + mac + ',伪造源MAC地址为' + src_mac + '!
')
这段代码会将攻击源的IP地址、MAC地址以及伪造的源MAC地址记录到 detection_log.txt 文件中,方便后续分析和处理。
总结
本文介绍了如何使用Python和Scapy库编写一个简单的ARP欺骗检测脚本,并详细解释了代码的实现逻辑。该脚本可以帮助你及时发现网络中的ARP欺骗攻击,并记录攻击信息,提高网络安全防护能力。
原文地址: https://www.cveoy.top/t/topic/jojN 著作权归作者所有。请勿转载和采集!