基于Linux的ARP攻击检测与防护软件
基于Linux的ARP攻击检测与防护软件
本文介绍一款基于Linux的ARP攻击检测与防护软件,该软件使用Python语言编写,旨在帮助用户实时监测和防御ARP攻击,并提供友好的可视化界面。
功能特点
- 多种ARP攻击检测: 能够检测多种ARP攻击类型,例如ARP欺骗、ARP泛洪等。
- 实时攻击信息输出: 一旦检测到ARP攻击,软件会立即输出攻击类型、攻击源IP和MAC地址等信息。
- 局域网IP/MAC地址扫描: 可以扫描和记录局域网内所有活动主机的IP地址和MAC地址,帮助用户了解网络拓扑结构。
- 可视化界面: 软件提供简洁直观的中文可视化界面,方便用户操作和查看信息。
- 日志记录: 所有检测结果和扫描信息都会被记录到日志文件中,方便用户事后分析。
Python代码实现
以下是用Python实现该软件基本功能的代码:
import os
import sys
import time
import threading
import subprocess
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QTextEdit, QGridLayout, QVBoxLayout
# 定义常量
ARP_CACHE_FILE = '/proc/net/arp'
LOG_FILE = 'arp_protect.log'
# 定义ARP攻击检测函数
def arp_check():
arp_cache = {}
with open(ARP_CACHE_FILE, 'r') as f:
lines = f.readlines()
for line in lines[1:]:
parts = line.split()
if len(parts) == 6:
ip = parts[0]
mac = parts[3]
arp_cache[ip] = mac
while True:
new_arp_cache = {}
with open(ARP_CACHE_FILE, 'r') as f:
lines = f.readlines()
for line in lines[1:]:
parts = line.split()
if len(parts) == 6:
ip = parts[0]
mac = parts[3]
new_arp_cache[ip] = mac
for ip in new_arp_cache:
if ip not in arp_cache or new_arp_cache[ip] != arp_cache[ip]:
log('检测到ARP攻击: ' + ip + ' -> ' + new_arp_cache[ip])
arp_cache = new_arp_cache
time.sleep(1)
# 定义局域网扫描函数
def scan_network():
network = '.'.join(os.popen('hostname -I').read().split('.')[0:3])
for i in range(1, 256):
ip = network + '.' + str(i)
t = threading.Thread(target=ping_host, args=(ip,))
t.start()
log('网络扫描完成。')
# 定义ping主机函数
def ping_host(ip):
result = subprocess.call(['ping', '-c', '1', '-W', '1', ip], stdout=subprocess.DEVNULL)
if result == 0:
mac = get_mac_address(ip)
log('发现主机: ' + ip + ' -> ' + mac)
# 定义获取MAC地址函数
def get_mac_address(ip):
output = os.popen('arp ' + ip).read()
parts = output.split()
if len(parts) == 5:
return parts[3]
else:
return '00:00:00:00:00:00'
# 定义日志函数
def log(msg):
with open(LOG_FILE, 'a') as f:
f.write(time.strftime('%Y-%m-%d %H:%M:%S') + ' ' + msg + '
')
print(msg)
# 定义可视化界面类
class ARPProtect(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('ARP 防护软件')
self.resize(600, 400)
self.lblStatus = QLabel('状态: 未启动')
self.btnStart = QPushButton('启动')
self.btnStop = QPushButton('停止')
self.btnScan = QPushButton('扫描网络')
self.btnClear = QPushButton('清空日志')
self.txtLog = QTextEdit()
gridLayout = QGridLayout()
gridLayout.addWidget(self.lblStatus, 0, 0)
gridLayout.addWidget(self.btnStart, 0, 1)
gridLayout.addWidget(self.btnStop, 0, 2)
gridLayout.addWidget(self.btnScan, 0, 3)
gridLayout.addWidget(self.btnClear, 0, 4)
gridLayout.addWidget(self.txtLog, 1, 0, 1, 5)
vboxLayout = QVBoxLayout()
vboxLayout.addLayout(gridLayout)
self.setLayout(vboxLayout)
self.btnStart.clicked.connect(self.start)
self.btnStop.clicked.connect(self.stop)
self.btnScan.clicked.connect(self.scan)
self.btnClear.clicked.connect(self.clear)
def start(self):
self.lblStatus.setText('状态: 运行中')
self.thread = threading.Thread(target=arp_check)
self.thread.start()
def stop(self):
self.lblStatus.setText('状态: 已停止')
self.thread.stop()
def scan(self):
self.lblStatus.setText('状态: 扫描网络中')
self.thread = threading.Thread(target=scan_network)
self.thread.start()
def clear(self):
self.txtLog.clear()
# 定义主函数
if __name__ == '__main__':
app = QApplication(sys.argv)
arp_protect = ARPProtect()
arp_protect.show()
sys.exit(app.exec_())
总结
这款基于Linux的ARP攻击检测与防护软件可以帮助用户有效地监测和防御ARP攻击,提高网络安全性。同时,该软件易于使用和扩展,用户可以根据自身需求进行修改和完善。
原文地址: https://www.cveoy.top/t/topic/jmiQ 著作权归作者所有。请勿转载和采集!