基于Linux的ARP攻击检测软件的功能需要哪些 根据这几个规则用Python实现 首先捕获数据包将过滤规则设置为ARP包其他则丢弃接着进行分析ARP包分出正常主机和疑似异常主机将疑似异常主机的IP地址和MAC地址标为红色。 -检测应答报文时判断是否出现同一IP地址对应不同的MAC地址;是则可能遭受ARP攻击 - 检测请求报文时是否合法且是否出现不同IP地址对应同一个MAC地址;是则可
基于Linux的ARP攻击检测软件的功能需要以下几点:
- 捕获数据包并设置过滤规则为ARP包,丢弃其他数据包;
- 分析ARP包,将正常主机和疑似异常主机进行区分;
- 将疑似异常主机的IP地址和MAC地址标为红色;
- 检测应答报文,判断是否出现同一IP地址对应不同的MAC地址,如果是则可能遭受ARP攻击;
- 检测请求报文,判断是否合法且是否出现不同IP地址对应同一个MAC地址,如果是则可能遭受ARP攻击;
- 检测大量的ARP请求或响应包,判断是否为同一IP发出或者是同一MAC地址发出,如果是则可能遭受ARP攻击;
- 输出遭受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攻击,并且将所有信息保存在日志中
原文地址: http://www.cveoy.top/t/topic/fyQN 著作权归作者所有。请勿转载和采集!