Python ARP 欺骗攻击检测与日志记录
Python ARP 欺骗攻击检测与日志记录
本文将介绍如何使用Python代码检测ARP欺骗攻击,并记录攻击事件。
代码示例
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 + '!\n')
break # 检测到攻击,跳出循环
if sniff_count > 100:
messagebox.showwarning('警告', '检测到攻击源IP地址为' + ip + ',MAC地址为' + mac + '!')
with open('detection_log.txt', 'a') as f:
f.write('警告' + '检测到攻击源IP地址为' + ip + ',MAC地址为' + mac + '!\n')
else: # 循环正常结束,表示未检测到攻击
messagebox.showinfo('提示', '未检测到攻击源!')
with open('detection_log.txt', 'a') as f:
f.write('提示' + '未检测到攻击源!\n')
return
代码优化
-
检测并记录攻击源: 代码中已经使用了ARP欺骗攻击检测的方法,如果检测到ARP响应包的源MAC地址与该IP地址对应的MAC地址不同,就说明存在伪造源MAC地址的情况,即可能存在ARP欺骗攻击。此时,使用
messagebox弹窗提示用户,并将检测结果记录在detection_log.txt文件中。 -
被攻击时依然显示未遭到攻击: 代码中,如果未检测到攻击源,就会弹出提示信息“未检测到攻击源!”。这个提示信息会在每个IP地址的检测过程中都弹出,因此如果有多个IP地址被检测,就会出现多个提示信息。为了避免这种情况,将提示信息放在
for循环外面,只在所有IP地址检测完成后弹出一次。 -
只输出一次信息便退出: 在代码中,如果检测到攻击源或者伪造源MAC地址,就会立即返回,不再检测其他IP地址。因此,如果想要只输出一次信息便退出,将
return语句放在for循环外面,只在所有IP地址检测完成后返回。同时,在检测到攻击源或者伪造源MAC地址时,可以使用break语句跳出当前循环,继续执行下一个IP地址的检测。
总结
本文介绍了使用Python代码实现ARP欺骗攻击检测的原理和方法,并提供了代码示例和优化建议,帮助您有效地检测和记录ARP攻击事件,并防止重复提示信息。
原文地址: https://www.cveoy.top/t/topic/jokq 著作权归作者所有。请勿转载和采集!