基于Linux的ARP攻击检测软件:功能、规则和Python实现
基于Linux的ARP攻击检测软件:功能、规则和Python实现
本软件基于Linux系统,使用Python语言实现,能够实时检测网络中的ARP攻击行为。软件提供用户登录、注册、攻击检测、扫描局域网主机等功能,并通过界面展示和日志记录攻击检测结果。
功能需求:
- **数据包捕获和过滤:**使用Scapy库捕获数据包,并过滤出ARP包,丢弃其他类型数据包。
- **ARP包分析:**分析ARP包,区分出正常主机和疑似异常主机。
- **疑似异常主机标记:**将疑似异常主机的IP地址和MAC地址标为红色,方便识别。
- **用户登录和注册:**提供用户登录和注册功能,使用文件存储用户数据,并进行验证。
- **攻击检测功能页面:**提供三个按钮:‘开始攻击检测’、‘停止攻击检测’和‘扫描局域网主机’。
- **攻击检测结果输出:**将检测到的源IP地址和源MAC地址信息输出到界面,并保存到日志文件中。
- **扫描局域网主机:**扫描局域网内所有活动主机,并将IP地址和MAC地址输出到界面,并保存到日志文件中。
- **停止攻击检测:**清除检测信息。
- ARP攻击检测规则:
- 检测应答报文时,判断是否出现同一IP地址对应不同的MAC地址,是则可能遭受ARP攻击。
- 检测请求报文时,判断是否合法且是否出现不同IP地址对应同一个MAC地址,是则可能遭受ARP攻击。
- 检测ARP请求或响应包,检测是否存在同一IP或者是同一MAC地址发出大量数据包,是则可能遭受ARP攻击。
- **攻击结果输出:**根据检测结果,输出“遭受ARP攻击”或“未遭受ARP攻击”,并将所有信息保存在日志文件中。
Python实现:
- 使用Scapy库捕获数据包并过滤出ARP包。
- 分析ARP包,使用字典保存每个IP地址对应的MAC地址,若出现同一IP地址对应不同的MAC地址则标记为疑似异常主机。
- 使用Tkinter库实现用户登录和注册功能,查询和修改用户信息的功能。
- 使用Tkinter库实现功能页面,包括开始攻击检测、停止攻击检测和扫描局域网主机的按钮,输出框和保存信息的功能。
- 在开始攻击检测时,使用字典保存每个IP地址对应的源MAC地址,若出现同一IP地址对应不同的源MAC地址则标记为疑似异常主机,并将源IP地址和源MAC地址信息输出到框中并保存到文件中。
- 在扫描局域网主机时,使用ARP协议发送ARP请求,获取所有活动主机的IP地址和MAC地址,并输出到框中并保存到文件中。
- 在停止攻击检测时,清空保存的信息。
- 在检测应答报文时,遍历所有ARP包,判断是否出现同一IP地址对应不同的MAC地址,若是则标记为疑似异常主机。
- 在检测请求报文时,遍历所有ARP包,判断是否合法且是否出现不同IP地址对应同一个MAC地址,若是则标记为疑似异常主机。
- 在检测ARP请求或响应包时,使用字典保存每个IP地址或MAC地址对应的数据包数量,若存在同一IP或同一MAC地址发出大量数据包则标记为疑似异常主机。
- 输出遭受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攻击检测是一个复杂的课题,本软件仅提供基本功能,可能无法检测到所有类型的攻击。
- 在使用软件时,请确保已获得相关权限和授权。
原文地址: https://www.cveoy.top/t/topic/jpkT 著作权归作者所有。请勿转载和采集!