基于Linux的ARP攻击检测软件的功能需要哪些 根据这几个规则用Python实现 首先捕获数据包将过滤规则设置为ARP包其他则丢弃接着进行分析ARP包分出正常主机和疑似异常主机异常主机的IP地址标为红色。 -检测应答报文时出现同一IP地址对应不同的MAC地址; - 检测请求报文时是否合法且出现不同IP地址对应同一个MAC地址; - 大量的ARP请求或响应包; - ARP包中的
基于Linux的ARP攻击检测软件需要实现以下功能:
- 捕获数据包并过滤出ARP包;
- 分析ARP包,区分正常主机和疑似异常主机;
- 标记异常主机的IP地址为红色;
- 检测同一IP地址对应不同的MAC地址;
- 检测不同IP地址对应同一个MAC地址;
- 检测大量的ARP请求或响应包;
- 检测ARP包中的源MAC地址和目标MAC地址不匹配;
- 输出遭受ARP攻击的信息;
- 输出未遭受ARP攻击的信息;
- 将所有信息保存在日志中。
下面是用Python实现的代码:
import os
import sys
import time
import logging
from scapy.all import *
logging.basicConfig(filename='arp_attack.log', level=logging.INFO)
def arp_attack_detect(pkt):
if ARP in pkt and pkt[ARP].op in (1,2): # ARP请求或响应包
if pkt[ARP].psrc == pkt[ARP].pdst: # 非法ARP包,源IP地址和目的IP地址相同
logging.warning("Illegal ARP packet: source IP address and destination IP address are the same.")
return
if pkt[ARP].op == 1: # ARP请求包
if pkt[ARP].hwsrc == pkt[ARP].hwdst: # 非法ARP包,源MAC地址和目的MAC地址相同
logging.warning("Illegal ARP packet: source MAC address and destination MAC address are the same.")
return
if pkt[ARP].hwsrc != '00:00:00:00:00:00': # 排除广播地址
if pkt[ARP].psrc in ip_mac_dict: # 已有该IP地址的记录
if pkt[ARP].hwsrc != ip_mac_dict[pkt[ARP].psrc]: # 不同MAC地址对应同一IP地址
logging.warning("ARP attack detected: different MAC addresses are associated with the same IP address.")
logging.info("IP address: {}, MAC address 1: {}, MAC address 2: {}".format(pkt[ARP].psrc, pkt[ARP].hwsrc, ip_mac_dict[pkt[ARP].psrc]))
else: # 新的记录
ip_mac_dict[pkt[ARP].psrc] = pkt[ARP].hwsrc
elif pkt[ARP].op == 2: # ARP响应包
if pkt[ARP].psrc in ip_mac_dict: # 已有该IP地址的记录
if pkt[ARP].hwsrc != ip_mac_dict[pkt[ARP].psrc]: # 不同MAC地址对应同一IP地址
logging.warning("ARP attack detected: different MAC addresses are associated with the same IP address.")
logging.info("IP address: {}, MAC address 1: {}, MAC address 2: {}".format(pkt[ARP].psrc, pkt[ARP].hwsrc, ip_mac_dict[pkt[ARP].psrc]))
else: # 新的记录
ip_mac_dict[pkt[ARP].psrc] = pkt[ARP].hwsrc
if len(ip_mac_dict) > 50: # 大量ARP请求或响应包
logging.warning("ARP attack detected: a large number of ARP request or response packets are detected.")
logging.info("The number of ARP packets: {}".format(len(ip_mac_dict)))
if pkt[ARP].hwsrc != pkt[Ether].src: # 源MAC地址和目标MAC地址不匹配
logging.warning("ARP attack detected: the source MAC address and the destination MAC address do not match.")
logging.info("Source MAC address: {}, destination MAC address: {}, source IP address: {}, destination IP address: {}".format(pkt[Ether].src, pkt[Ether].dst, pkt[ARP].psrc, pkt[ARP].pdst))
def main():
global ip_mac_dict
ip_mac_dict = {} # 记录IP地址和MAC地址的对应关系
sniff(filter="arp", prn=arp_attack_detect)
if __name__ == '__main__':
main()
代码中使用了Scapy库来捕获ARP包,并对ARP包进行分析,实现了检测ARP攻击的功能。当检测到ARP攻击时,会输出警告信息,并将详细信息保存在日志文件中
原文地址: https://www.cveoy.top/t/topic/fyPo 著作权归作者所有。请勿转载和采集!