基于Linux的ARP攻击检测软件功能及Python实现
基于Linux的ARP攻击检测软件功能及Python实现
本文将介绍一款基于Linux的ARP攻击检测软件的功能需求和Python实现。该软件旨在通过捕获和分析网络数据包,识别潜在的ARP攻击行为,并提供用户友好界面进行操作。
功能需求
- 数据包捕获和过滤: 软件需要能够捕获网络数据包,并根据特定规则过滤出ARP数据包,其他数据包被丢弃。
 - ARP包分析: 软件需要分析捕获到的ARP包,区分正常主机和疑似异常主机。疑似异常主机的IP地址和MAC地址将以红色标注,以便用户直观识别。
 - 用户注册登录: 软件需要提供用户注册和登录功能。用户注册时需要查询数据库,若存在同名用户则提示“该用户已注册”,否则将用户名和密码添加到数据库。登录时,软件需要查询数据库,若不存在该用户则提示“查无该用户”,若密码错误则提示“用户名或密码错误”。登录成功后跳转至功能页面,隐藏主页面。
 - 功能页面: 功能页面提供三个按钮:
- 开始攻击检测: 开始检测ARP攻击,并将源IP地址和源MAC地址信息输出到框中,并保存在文件中。
 - 停止攻击检测: 停止攻击检测,并清空信息。
 - 扫描局域网主机: 扫描局域网中的活动主机,将IP地址和MAC地址输出到框中,并保存在文件中。
 
 - 攻击检测规则: 软件需要根据以下规则判断是否遭受ARP攻击:
- 规则1: 检测应答报文时,判断是否出现同一IP地址对应不同的MAC地址,是则可能遭受ARP攻击。
 - 规则2: 检测请求报文时,判断是否合法且是否出现不同IP地址对应同一个MAC地址,是则可能遭受ARP攻击。
 - 规则3: 检测ARP请求或响应包,判断是否存在同一IP地址或同一MAC地址发出大量数据包,是则可能遭受ARP攻击,否则未遭受ARP攻击。
 - 判断结果: 满足两种及以上规则则输出“遭受ARP攻击”,否则输出“未遭受ARP攻击”,并将所有信息保存到日志文件中。
 
 
Python实现
- 数据包捕获和过滤: 使用Scapy库捕获数据包,并使用过滤规则筛选出ARP数据包。
 - ARP包分析: 解析ARP包信息,提取IP地址和MAC地址,并将疑似异常主机的IP地址和MAC地址以红色显示。
 - 用户注册登录: 使用文件存储用户数据,进行查询和验证操作。
 - 功能页面: 使用Tkinter库创建GUI界面,添加“开始攻击检测”、“停止攻击检测”、“扫描局域网主机”三个按钮。
 - 攻击检测规则: 使用字典记录IP地址和MAC地址的对应关系,并根据规则进行判断。
 - 信息输出: 将攻击检测结果、IP地址、MAC地址等信息输出到文本框中,并保存到日志文件中。
 
代码示例
import scapy.all as scapy
import tkinter as tk
import threading
import time
# 攻击检测规则
class ArpAttackDetector:
    def __init__(self):
        self.ip_mac_dict = {}
        self.mac_ip_dict = {}
        self.ip_count_dict = {}
        self.mac_count_dict = {}
        self.attack_log = []
    def analyze_arp_packet(self, packet):
        # 规则1: 同一IP对应不同MAC
        if packet[scapy.ARP].op == 2:  # 应答报文
            if packet[scapy.ARP].psrc in self.ip_mac_dict and self.ip_mac_dict[packet[scapy.ARP].psrc] != packet[scapy.ARP].hwsrc:
                self.attack_log.append(f'规则1: IP地址 {packet[scapy.ARP].psrc} 对应不同MAC地址')
        # 规则2: 不同IP对应同一个MAC
        if packet[scapy.ARP].op == 1:  # 请求报文
            if packet[scapy.ARP].hwsrc in self.mac_ip_dict and self.mac_ip_dict[packet[scapy.ARP].hwsrc] != packet[scapy.ARP].pdst:
                self.attack_log.append(f'规则2: 不同IP地址对应同一个MAC地址')
        # 规则3: 同一IP或MAC发出大量数据包
        if packet[scapy.ARP].psrc in self.ip_count_dict:
            self.ip_count_dict[packet[scapy.ARP].psrc] += 1
            if self.ip_count_dict[packet[scapy.ARP].psrc] > 10:  # 设置阈值
                self.attack_log.append(f'规则3: IP地址 {packet[scapy.ARP].psrc} 发出大量数据包')
        else:
            self.ip_count_dict[packet[scapy.ARP].psrc] = 1
        if packet[scapy.ARP].hwsrc in self.mac_count_dict:
            self.mac_count_dict[packet[scapy.ARP].hwsrc] += 1
            if self.mac_count_dict[packet[scapy.ARP].hwsrc] > 10:  # 设置阈值
                self.attack_log.append(f'规则3: MAC地址 {packet[scapy.ARP].hwsrc} 发出大量数据包')
        else:
            self.mac_count_dict[packet[scapy.ARP].hwsrc] = 1
    def start_detection(self):
        while True:
            packet = scapy.sniff(prn=self.analyze_arp_packet, filter='arp', count=1)
            time.sleep(1)
# GUI界面
class ArpAttackGui:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('ARP攻击检测软件')
        self.detector = ArpAttackDetector()
        self.start_button = tk.Button(self.root, text='开始攻击检测', command=self.start_detection)
        self.start_button.pack()
        self.stop_button = tk.Button(self.root, text='停止攻击检测', command=self.stop_detection)
        self.stop_button.pack()
        self.scan_button = tk.Button(self.root, text='扫描局域网主机', command=self.scan_network)
        self.scan_button.pack()
        self.info_label = tk.Label(self.root, text='攻击检测信息: 
')
        self.info_label.pack()
        self.result_label = tk.Label(self.root, text='结果: 
')
        self.result_label.pack()
        self.root.mainloop()
    def start_detection(self):
        self.detector.start_detection()
    def stop_detection(self):
        # 停止攻击检测线程
        pass
    def scan_network(self):
        # 扫描局域网主机
        pass
# 主程序
if __name__ == '__main__':
    gui = ArpAttackGui()
总结
本文介绍了基于Linux的ARP攻击检测软件的功能需求和Python实现。该软件使用Scapy库捕获和分析网络数据包,使用Tkinter库创建GUI界面,并根据特定规则判断是否遭受ARP攻击。用户可以通过该软件监控网络流量,及时发现潜在的ARP攻击行为,保护网络安全。
原文地址: https://www.cveoy.top/t/topic/jpkP 著作权归作者所有。请勿转载和采集!