基于Linux的ARP攻击检测软件的功能需要哪些 根据这几个规则用Python实现 首先捕获数据包将过滤规则设置为ARP包其他则丢弃接着进行分析ARP包分出正常主机和疑似异常主机将疑似异常主机标为红色。 -检测应答报文时判断是否出现同一IP地址对应不同的MAC地址;是则可能遭受ARP攻击 - 检测请求报文时是否合法且是否出现不同IP地址对应同一个MAC地址;是则可能遭受ARP攻击
功能:
- 捕获数据包,过滤规则设置为ARP包
- 分析ARP包,区分正常主机和疑似异常主机
- 标记疑似异常主机为红色
- 检测应答报文,判断同一IP地址对应不同的MAC地址,可能遭受ARP攻击
- 检测请求报文,判断是否合法且是否出现不同IP地址对应同一个MAC地址,可能遭受ARP攻击
- 检测大量的ARP请求或响应包,判断是否为同一IP或同一MAC地址发出,可能遭受ARP攻击
- 输出遭受ARP攻击或未遭受ARP攻击的信息
- 保存所有信息在日志中
Python实现:
- 使用Scapy库捕获ARP数据包,过滤规则为ARP包
- 分析ARP包,使用字典存储IP地址和对应的MAC地址,若IP地址对应的MAC地址已存在,则将该主机标记为疑似异常主机
- 使用ANSI Escape Code将疑似异常主机标记为红色输出
- 检测应答报文,判断同一IP地址对应不同的MAC地址,若出现,则将该主机标记为疑似异常主机
- 检测请求报文,判断是否合法且是否出现不同IP地址对应同一个MAC地址,若出现,则将该主机标记为疑似异常主机
- 检测大量的ARP请求或响应包,使用计数器统计同一IP或同一MAC地址发出的ARP包数量,若超过阈值,则将该主机标记为疑似异常主机
- 输出遭受ARP攻击或未遭受ARP攻击的信息,同时将所有信息保存在日志中
- 使用logging库保存所有信息到日志文件中
示例代码:
from scapy.all import *
import logging
# 设置日志格式和级别
logging.basicConfig(filename='arp_attack.log', level=logging.INFO, format='%(asctime)s %(message)s')
# 存储IP地址和对应的MAC地址
ip_mac_dict = {}
# 存储疑似异常主机
suspicious_hosts = set()
# 统计ARP包数量
arp_count = {}
# 阈值
threshold = 10
# 检测应答报文
def check_response(pkt):
if pkt[ARP].op == 2:
if pkt[ARP].psrc in ip_mac_dict and pkt[ARP].hwsrc != ip_mac_dict[pkt[ARP].psrc]:
suspicious_hosts.add(pkt[ARP].psrc)
logging.warning('ARP attack detected: same IP address with different MAC address - %s', pkt[ARP].psrc)
# 检测请求报文
def check_request(pkt):
if pkt[ARP].op == 1:
if pkt[ARP].psrc != pkt[ARP].pdst and pkt[ARP].hwsrc in ip_mac_dict.values():
suspicious_hosts.add(pkt[ARP].psrc)
logging.warning('ARP attack detected: different IP addresses with same MAC address - %s', pkt[ARP].psrc)
# 检测大量的ARP请求或响应包
def check_arp_count(pkt):
if pkt[ARP].psrc != pkt[ARP].pdst:
if pkt[ARP].psrc in arp_count:
arp_count[pkt[ARP].psrc] += 1
if arp_count[pkt[ARP].psrc] > threshold:
suspicious_hosts.add(pkt[ARP].psrc)
logging.warning('ARP attack detected: large number of ARP requests from the same IP address - %s', pkt[ARP].psrc)
else:
arp_count[pkt[ARP].psrc] = 1
# 处理ARP包
def handle_arp(pkt):
if pkt.haslayer(ARP):
# 存储IP地址和对应的MAC地址
ip_mac_dict[pkt[ARP].psrc] = pkt[ARP].hwsrc
# 检测应答报文
check_response(pkt)
# 检测请求报文
check_request(pkt)
# 检测大量的ARP请求或响应包
check_arp_count(pkt)
# 输出疑似异常主机
if pkt[ARP].psrc in suspicious_hosts:
print('\033[91m' + pkt[ARP].psrc + ' is a suspicious host!' + '\033[0m')
else:
print(pkt[ARP].psrc + ' is a normal host.')
# 保存信息到日志文件中
logging.info('IP: %s, MAC: %s', pkt[ARP].psrc, pkt[ARP].hwsrc)
# 捕获ARP数据包
sniff(filter='arp', prn=handle_arp)
``
原文地址: http://www.cveoy.top/t/topic/fyQI 著作权归作者所有。请勿转载和采集!