基于Linux的ARP攻击检测软件:功能、规则和Python实现

本软件基于Linux系统,使用Python语言实现,能够实时检测网络中的ARP攻击行为。软件提供用户登录、注册、攻击检测、扫描局域网主机等功能,并通过界面展示和日志记录攻击检测结果。

功能需求:

  1. **数据包捕获和过滤:**使用Scapy库捕获数据包,并过滤出ARP包,丢弃其他类型数据包。
  2. **ARP包分析:**分析ARP包,区分出正常主机和疑似异常主机。
  3. **疑似异常主机标记:**将疑似异常主机的IP地址和MAC地址标为红色,方便识别。
  4. **用户登录和注册:**提供用户登录和注册功能,使用文件存储用户数据,并进行验证。
  5. **攻击检测功能页面:**提供三个按钮:‘开始攻击检测’、‘停止攻击检测’和‘扫描局域网主机’。
  6. **攻击检测结果输出:**将检测到的源IP地址和源MAC地址信息输出到界面,并保存到日志文件中。
  7. **扫描局域网主机:**扫描局域网内所有活动主机,并将IP地址和MAC地址输出到界面,并保存到日志文件中。
  8. **停止攻击检测:**清除检测信息。
  9. ARP攻击检测规则:
    • 检测应答报文时,判断是否出现同一IP地址对应不同的MAC地址,是则可能遭受ARP攻击。
    • 检测请求报文时,判断是否合法且是否出现不同IP地址对应同一个MAC地址,是则可能遭受ARP攻击。
    • 检测ARP请求或响应包,检测是否存在同一IP或者是同一MAC地址发出大量数据包,是则可能遭受ARP攻击。
  10. **攻击结果输出:**根据检测结果,输出“遭受ARP攻击”或“未遭受ARP攻击”,并将所有信息保存在日志文件中。

Python实现:

  1. 使用Scapy库捕获数据包并过滤出ARP包。
  2. 分析ARP包,使用字典保存每个IP地址对应的MAC地址,若出现同一IP地址对应不同的MAC地址则标记为疑似异常主机。
  3. 使用Tkinter库实现用户登录和注册功能,查询和修改用户信息的功能。
  4. 使用Tkinter库实现功能页面,包括开始攻击检测、停止攻击检测和扫描局域网主机的按钮,输出框和保存信息的功能。
  5. 在开始攻击检测时,使用字典保存每个IP地址对应的源MAC地址,若出现同一IP地址对应不同的源MAC地址则标记为疑似异常主机,并将源IP地址和源MAC地址信息输出到框中并保存到文件中。
  6. 在扫描局域网主机时,使用ARP协议发送ARP请求,获取所有活动主机的IP地址和MAC地址,并输出到框中并保存到文件中。
  7. 在停止攻击检测时,清空保存的信息。
  8. 在检测应答报文时,遍历所有ARP包,判断是否出现同一IP地址对应不同的MAC地址,若是则标记为疑似异常主机。
  9. 在检测请求报文时,遍历所有ARP包,判断是否合法且是否出现不同IP地址对应同一个MAC地址,若是则标记为疑似异常主机。
  10. 在检测ARP请求或响应包时,使用字典保存每个IP地址或MAC地址对应的数据包数量,若存在同一IP或同一MAC地址发出大量数据包则标记为疑似异常主机。
  11. 输出遭受ARP攻击或未遭受ARP攻击的结果,并将所有信息保存在日志中,包括时间、IP地址、MAC地址、数据包类型和是否疑似异常主机等信息。

日志内容:

  • 时间
  • IP地址
  • MAC地址
  • 数据包类型
  • 是否疑似异常主机

代码示例:

# 导入必要库
import scapy.all as scapy
import tkinter as tk
from tkinter import ttk
import time
import threading

# 定义全局变量
arp_table = {}
user_data = {}
log_data = []

# 数据包捕获和过滤函数
def capture_packets():
    while True:
        packets = scapy.sniff(prn=packet_analysis, filter='arp', count=1)
        time.sleep(1)

# ARP包分析函数
def packet_analysis(packet):
    if packet.haslayer(scapy.ARP):
        # 处理ARP应答报文
        if packet[scapy.ARP].op == 2:
            # 判断同一IP地址是否对应不同MAC地址
            if packet[scapy.ARP].psrc in arp_table and arp_table[packet[scapy.ARP].psrc] != packet[scapy.ARP].hwsrc:
                # 标记为疑似异常主机
                mark_suspicious(packet[scapy.ARP].psrc, packet[scapy.ARP].hwsrc)
        # 处理ARP请求报文
        elif packet[scapy.ARP].op == 1:
            # 判断请求报文是否合法
            # 判断同一MAC地址是否对应不同IP地址
            # ...
            # 标记为疑似异常主机
            mark_suspicious(packet[scapy.ARP].psrc, packet[scapy.ARP].hwsrc)
        # 记录ARP包信息
        log_packet(packet)

# 标记疑似异常主机函数
def mark_suspicious(ip, mac):
    # 将IP地址和MAC地址标为红色
    # ...

# 记录ARP包信息函数
def log_packet(packet):
    # 记录时间、IP地址、MAC地址、数据包类型和是否疑似异常主机
    # ...

# 用户登录和注册功能实现
# ...

# 功能页面实现
# ...

# 开始攻击检测函数
def start_detection():
    # 启动数据包捕获线程
    threading.Thread(target=capture_packets).start()

# 停止攻击检测函数
def stop_detection():
    # 停止数据包捕获
    # 清空ARP表
    # ...

# 扫描局域网主机函数
def scan_network():
    # 使用ARP协议发送请求
    # 获取所有活动主机的IP地址和MAC地址
    # 输出到界面并保存到日志文件中
    # ...

# 主程序
if __name__ == '__main__':
    # 初始化界面
    # ...

    # 加载用户数据
    # ...

    # 启动主循环
    # ...

注意:

  • 以上代码仅为示例,需要根据实际情况进行修改和完善。
  • ARP攻击检测是一个复杂的课题,本软件仅提供基本功能,可能无法检测到所有类型的攻击。
  • 在使用软件时,请确保已获得相关权限和授权。
基于Linux的ARP攻击检测软件:功能、规则和Python实现

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

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