Python实现:

  1. 导入必要的模块
import os
import sys
import time
import logging
from scapy.all import *
  1. 设置日志记录
logging.basicConfig(filename='arp_attack.log', level=logging.INFO, format='%(asctime)s %(message)s')
  1. 定义捕获数据包的回调函数
def arp_packet_callback(packet):
    if packet[ARP].op == 1:  # ARP请求包
        arp_request_dict[packet[ARP].psrc] = packet[ARP].hwsrc
        if packet[ARP].psrc in arp_reply_dict:  # 如果已经有ARP响应包,则判断MAC地址是否一致
            if arp_reply_dict[packet[ARP].psrc] != packet[ARP].hwsrc:
                logging.warning('[!] ARP Spoofing Detected: IP %s has multiple MAC addresses: %s and %s' % (
                    packet[ARP].psrc, arp_reply_dict[packet[ARP].psrc], packet[ARP].hwsrc))
        elif packet[ARP].psrc in arp_request_dict:  # 如果已经有ARP请求包,则判断数量是否过多
            count = len([x for x in arp_request_dict.values() if x == packet[ARP].hwsrc])
            if count > 5:
                logging.warning('[!] ARP Spoofing Detected: IP %s has multiple MAC addresses: %s' % (
                    packet[ARP].psrc, packet[ARP].hwsrc))
        else:
            arp_request_dict[packet[ARP].psrc] = packet[ARP].hwsrc

    elif packet[ARP].op == 2:  # ARP响应包
        arp_reply_dict[packet[ARP].psrc] = packet[ARP].hwsrc
        if packet[ARP].hwsrc in arp_reply_dict.values():  # 如果已经有其他IP地址对应该MAC地址,则判断是否一致
            for ip, mac in arp_reply_dict.items():
                if mac == packet[ARP].hwsrc and ip != packet[ARP].psrc:
                    logging.warning('[!] ARP Spoofing Detected: MAC address %s corresponds to multiple IP addresses: %s and %s' % (
                        packet[ARP].hwsrc, packet[ARP].psrc, ip))
                    break

    if len(arp_reply_dict) > 10:  # 如果ARP响应包数量过多,则清空字典
        arp_reply_dict.clear()
    if len(arp_request_dict) > 10:  # 如果ARP请求包数量过多,则清空字典
        arp_request_dict.clear()
  1. 定义主函数
def main():
    if os.geteuid() != 0:  # 检查是否以root权限运行
        print('[-] Please run as root')
        sys.exit(1)

    logging.info('ARP attack detection started')

    sniff(filter='arp', prn=arp_packet_callback, store=0)
  1. 运行主函数
if __name__ == '__main__':
    arp_request_dict = {}
    arp_reply_dict = {}
    main()

运行后,程序将开始捕获ARP包,并根据规则进行分析,如果发现ARP攻击,则输出警告信息并保存在日志中

基于Linux的ARP攻击检测软件的功能需要哪些 根据这几个规则用Python实现 首先捕获数据包过滤规则设置为ARP包其他则丢弃接着进行分析ARP包分出正常主机和疑似异常主机异常主机的IP地址标为红色。 -同一IP地址对应多个MAC地址; - 多个IP地址对应同一个MAC地址; - 大量的ARP请求或响应包; - ARP包中的源MAC地址和目标MAC地址不匹配;同时满足两种规

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

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