基于Linux的ARP攻击检测防护软件的设计模块包括多种ARP攻击检测并且根据攻击类型输出信息扫描和记录局域网内活动主机的IP地址和MAC地址有一定的防御功能并且具有可视化界面将结果保存在日志中。python基本代码实现
由于ARP攻击是一种网络安全问题,设计一个完整的基于Linux的ARP攻击检测防护软件需要考虑多个因素,包括网络拓扑结构、攻击类型、防御策略等。以下是一个基本的Python代码实现,包括ARP攻击检测和IP/MAC地址扫描功能。
import os
import sys
import time
import socket
import struct
import fcntl
import threading
# 定义常量
ETHERNET_PROTOCOL_ARP = 0x0806
ARP_REQUEST = 1
ARP_REPLY = 2
# 定义全局变量
local_ip = ''
local_mac = ''
ip_mac_dict = {}
arp_dict = {}
# 获取本地IP地址和MAC地址
def get_local_ip_mac():
global local_ip, local_mac
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
local_ip = s.getsockname()[0]
s.close()
with open('/sys/class/net/eth0/address') as f:
local_mac = f.read().strip()
# 发送ARP请求
def send_arp_request(target_ip):
global local_ip, local_mac
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETHERNET_PROTOCOL_ARP))
s.bind(('eth0', ETHERNET_PROTOCOL_ARP))
target_mac = 'ff:ff:ff:ff:ff:ff'
arp_packet = struct.pack('!6s6sHHHBBH6s4s6s4s',
target_mac, local_mac, ETHERNET_PROTOCOL_ARP,
ARP_REQUEST, 0x0800, 0x06, 0x04, ARP_REQUEST,
local_mac, socket.inet_aton(local_ip),
target_mac, socket.inet_aton(target_ip))
s.send(arp_packet)
s.close()
# 处理ARP响应
def handle_arp_reply(packet):
global ip_mac_dict
source_mac = packet[6:12]
source_ip = socket.inet_ntoa(packet[28:32])
ip_mac_dict[source_ip] = source_mac
# 监听ARP包
def listen_arp_packet():
global arp_dict
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETHERNET_PROTOCOL_ARP))
s.bind(('eth0', ETHERNET_PROTOCOL_ARP))
while True:
packet = s.recvfrom(2048)[0]
if packet[12:14] == '\x08\x06':
arp_operation = struct.unpack('!HHBBH6s4s6s4s', packet[14:42])[3]
if arp_operation == ARP_REPLY:
handle_arp_reply(packet)
time.sleep(0.1)
# 扫描局域网内的IP和MAC地址
def scan_ip_mac():
global ip_mac_dict
for i in range(1, 255):
target_ip = '192.168.1.%d' % i
if target_ip != local_ip:
send_arp_request(target_ip)
time.sleep(5)
arp_dict = ip_mac_dict.copy()
ip_mac_dict.clear()
# 检测ARP攻击
def detect_arp_attack():
global arp_dict
while True:
for ip, mac in arp_dict.items():
if mac != ip_mac_dict.get(ip):
print('ARP SPOOFING ATTACK DETECTED: %s' % ip)
time.sleep(1)
# 主程序
if __name__ == '__main__':
get_local_ip_mac()
print('Local IP: %s' % local_ip)
print('Local MAC: %s' % local_mac)
t1 = threading.Thread(target=listen_arp_packet)
t2 = threading.Thread(target=detect_arp_attack)
t1.start()
t2.start()
while True:
scan_ip_mac()
``
原文地址: https://www.cveoy.top/t/topic/fjyh 著作权归作者所有。请勿转载和采集!