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()

代码解释

  1. 导入必要的库:

    • scapy.all: 用于网络数据包的构造、发送、接收和分析。
    • tkinter.messagebox: 用于显示警告和提示信息。
  2. get_mac(ip_address) 函数:

    • 该函数用于获取指定IP地址对应的MAC地址。
    • 使用 srp() 函数发送ARP请求并接收响应。
    • 如果收到响应,则返回响应包中的源MAC地址,否则返回 None
  3. 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欺骗攻击,并记录攻击信息,提高网络安全防护能力。

Python网络安全:使用Scapy检测ARP欺骗攻击

原文地址: https://www.cveoy.top/t/topic/jojN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录