使用 Python 检测 ARP 攻击并记录攻击源地址

def detect_attack():
    with open('clients.txt', 'r') as f:
        clients = f.readlines()
        for client in clients:
            ip = client.split()[0]
            mac = client.split()[1]
            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[ARP].op == 1 and packet[ARP].psrc != ip:
                    messagebox.showwarning('警告', '检测到伪造源攻击!源IP地址为' + packet[ARP].psrc + ',源MAC地址为' + packet[ARP].hwsrc + '!')
                    with open('detection_log.txt', 'a') as f:
                        f.write('警告'+ '检测到伪造源攻击!源IP地址为' + packet[ARP].psrc + ',源MAC地址为' + packet[ARP].hwsrc + '!\n')
            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

如何记录伪造源攻击的地址

要记录伪造源攻击的地址,可以在 sniff_packets 循环中添加判断条件,判断该 ARP 包是否是伪造源攻击。如果是,则记录该 ARP 包的源 IP 地址和源 MAC 地址。

代码中已添加判断条件:if packet[ARP].op == 1 and packet[ARP].psrc != ip,如果 ARP 包的类型为请求 (op 为 1) 且源 IP 地址 (psrc) 与目标 IP 地址 (ip) 不一致,则判断为伪造源攻击,并记录源 IP 地址 (packet[ARP].psrc) 和源 MAC 地址 (packet[ARP].hwsrc)。

为什么 ARP 欺骗攻击记录不到地址

ARP 欺骗攻击的源 MAC 地址和目标 MAC 地址都是伪造的,无法准确地确定攻击者的真实 MAC 地址。另外,ARP 欺骗攻击通常是在局域网内进行的,如果使用网络嗅探工具在外网进行监测,可能无法捕获到 ARP 欺骗攻击的数据包。

建议使用以下方法来提高 ARP 欺骗攻击检测的准确率:

  • 使用专业的网络安全设备进行监测,例如防火墙、入侵检测系统等。
  • 使用 ARP 守护程序,例如 ARPwatch,来监测 ARP 表的异常变化。
  • 使用网络流量分析工具,分析网络流量中的 ARP 协议数据包,以识别可能的 ARP 欺骗攻击。
Python ARP 攻击检测与地址记录

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

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