基于Linux与Python的ARP攻击检测软件实现

ARP攻击是一种常见的网络攻击手段,攻击者通过伪造ARP报文,可以实现监听网络流量、篡改网络数据等目的。为了保护网络安全,本文介绍如何使用Python编写一个ARP攻击检测软件,该软件可以识别以下几种ARP攻击行为:

  • 同一IP地址对应多个MAC地址
  • 多个IP地址对应同一个MAC地址
  • 大量的ARP请求或响应包
  • ARP包中的源MAC地址和目标MAC地址不匹配

Python实现

本程序使用Python的Scapy库进行网络数据包捕获和分析。

1. 导入必要的模块

import os
import sys
import time
import logging
from scapy.all import *

2. 设置日志记录

logging.basicConfig(filename='arp_attack.log', level=logging.INFO, format='%(asctime)s %(message)s')

3. 定义捕获数据包的回调函数

def arp_packet_callback(packet):
    if packet[ARP].op == 1:  # ARP请求包
        if packet[ARP].psrc in arp_request_dict: 
            if arp_request_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_request_dict[packet[ARP].psrc], packet[ARP].hwsrc))
            else:
                count = list(arp_request_dict.values()).count(packet[ARP].hwsrc)
                if count > 5:
                    logging.warning('[!] ARP Spoofing Detected: Too many ARP requests from IP %s with MAC %s' % (
                        packet[ARP].psrc, packet[ARP].hwsrc))
        else:
            arp_request_dict[packet[ARP].psrc] = packet[ARP].hwsrc

    elif packet[ARP].op == 2:  # ARP响应包
        if packet[ARP].hwsrc in arp_reply_dict: 
            if arp_reply_dict[packet[ARP].hwsrc] != 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, arp_reply_dict[packet[ARP].hwsrc]))
        else:
            arp_reply_dict[packet[ARP].hwsrc] = packet[ARP].psrc

    if len(arp_reply_dict) > 100: 
        arp_reply_dict.clear()
    if len(arp_request_dict) > 100:
        arp_request_dict.clear()

4. 定义主函数

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)

5. 运行主函数

if __name__ == '__main__':
    arp_request_dict = {}
    arp_reply_dict = {}
    main()

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

注意: 这只是一个简单的ARP攻击检测程序示例,实际应用中需要根据具体情况进行修改和完善。

基于Linux与Python的ARP攻击检测软件实现

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

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