基于Linux的ARP攻击检测软件的功能需要以下几点:

  1. 捕获数据包并设置过滤规则为ARP包,丢弃其他数据包;
  2. 分析ARP包,将正常主机和疑似异常主机进行区分;
  3. 将疑似异常主机的IP地址和MAC地址标为红色;
  4. 检测应答报文,判断是否出现同一IP地址对应不同的MAC地址,如果是则可能遭受ARP攻击;
  5. 检测请求报文,判断是否合法且是否出现不同IP地址对应同一个MAC地址,如果是则可能遭受ARP攻击;
  6. 检测大量的ARP请求或响应包,判断是否为同一IP发出或者是同一MAC地址发出,如果是则可能遭受ARP攻击;
  7. 输出遭受ARP攻击或未遭受ARP攻击的结果,并将所有信息保存在日志中。

以下是Python实现:

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

# 设置过滤规则为ARP包
filter_rule = "arp"

# 存储疑似异常主机的IP地址和MAC地址
suspicious_hosts = {}

# 存储所有的日志信息
log_info = []

# 检测应答报文
def check_reply_packet(packet):
    if packet[ARP].op == 2:
        if packet[ARP].psrc in suspicious_hosts.keys() and packet[ARP].hwsrc != suspicious_hosts[packet[ARP].psrc]:
            return True
    return False

# 检测请求报文
def check_request_packet(packet):
    if packet[ARP].op == 1:
        if packet[ARP].hwsrc in suspicious_hosts.values() and packet[ARP].psrc not in suspicious_hosts.keys():
            return True
    return False

# 检测大量的ARP请求或响应包
def check_arp_packets(packets):
    src_ips = {}
    src_macs = {}
    for packet in packets:
        src_ip = packet[ARP].psrc
        src_mac = packet[ARP].hwsrc
        if src_ip in src_ips.keys():
            if src_ips[src_ip] != src_mac:
                return True
        else:
            src_ips[src_ip] = src_mac
        if src_mac in src_macs.keys():
            if src_macs[src_mac] != src_ip:
                return True
        else:
            src_macs[src_mac] = src_ip
    return False

# 处理捕获到的ARP包
def handle_packet(packet):
    global suspicious_hosts
    global log_info
    if packet.haslayer(ARP):
        if packet[ARP].op == 1:
            # 检测请求报文
            if check_request_packet(packet):
                if packet[ARP].psrc not in suspicious_hosts.keys():
                    suspicious_hosts[packet[ARP].psrc] = packet[ARP].hwsrc
                    log_info.append("[{}] Request packet from {} ({}) is suspicious".format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), packet[ARP].psrc, packet[ARP].hwsrc))
        elif packet[ARP].op == 2:
            # 检测应答报文
            if check_reply_packet(packet):
                if packet[ARP].psrc not in suspicious_hosts.keys():
                    suspicious_hosts[packet[ARP].psrc] = packet[ARP].hwsrc
                    log_info.append("[{}] Reply packet from {} ({}) is suspicious".format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), packet[ARP].psrc, packet[ARP].hwsrc))
        # 检测大量的ARP请求或响应包
        if len(suspicious_hosts) > 0:
            packets = sniff(filter=filter_rule, count=50, timeout=5)
            if check_arp_packets(packets):
                log_info.append("[{}] There may be an ARP attack".format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
                for ip, mac in suspicious_hosts.items():
                    log_info.append("[{}] {} ({}) is suspicious".format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), ip, mac))
                suspicious_hosts = {}

# 主函数
def main():
    sniff(filter=filter_rule, prn=handle_packet)

if __name__ == "__main__":
    main()

以上Python代码实现了基于Linux的ARP攻击检测软件的功能,包括捕获数据包、分析ARP包、检测应答报文、检测请求报文、检测大量的ARP请求或响应包等,同时满足两种规则或以上的就输出遭受ARP攻击,不满足则输出未遭受ARP攻击,并且将所有信息保存在日志中

基于Linux的ARP攻击检测软件的功能需要哪些 根据这几个规则用Python实现 首先捕获数据包将过滤规则设置为ARP包其他则丢弃接着进行分析ARP包分出正常主机和疑似异常主机将疑似异常主机的IP地址和MAC地址标为红色。 -检测应答报文时判断是否出现同一IP地址对应不同的MAC地址;是则可能遭受ARP攻击 - 检测请求报文时是否合法且是否出现不同IP地址对应同一个MAC地址;是则可

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

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