基于Linux的ARP攻击检测与防护软件设计与实现
基于Linux的ARP攻击检测与防护软件设计与实现
本项目旨在设计并实现一款基于Linux的ARP攻击检测与防护软件,软件包含用户登录注册功能,并提供友好的交互界面。软件能够扫描局域网内的活动主机,记录其IP地址和MAC地址,并能识别ARP欺骗攻击,记录攻击源的IP地址和MAC地址,将所有记录保存在数据库中。
软件功能
- 用户登录与注册
- 局域网活动主机扫描
- ARP欺骗攻击检测
- 攻击源记录
- 记录数据存储到数据库
技术实现
由于题目中的要求比较复杂,需要使用多个模块来实现各种功能,因此我们需要使用一些第三方库来完成这个项目,包括:
- Flask: 用于搭建Web应用程序的框架
- Scapy: 用于网络数据包的捕获、发送和分析
- SQLAlchemy: 用于操作数据库
代码实现
下面是一个简单的后端代码,包括登录、注册、ARP欺骗攻击检测和记录活动主机的功能:
from flask import Flask, render_template, request, redirect, url_for
from scapy.all import *
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# 创建Flask应用程序
app = Flask(__name__)
# 创建数据库引擎和会话
engine = create_engine('sqlite:///arp_attack.db')
Session = sessionmaker(bind=engine)
Base = declarative_base()
# 定义数据库模型
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(50), unique=True)
password = Column(String(50))
class Host(Base):
__tablename__ = 'hosts'
id = Column(Integer, primary_key=True)
ip_address = Column(String(15), unique=True)
mac_address = Column(String(17))
class Attack(Base):
__tablename__ = 'attacks'
id = Column(Integer, primary_key=True)
attack_type = Column(String(50))
source_ip = Column(String(15))
source_mac = Column(String(17))
# 创建数据库表格
Base.metadata.create_all(engine)
# 定义登录页面
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# 获取表单数据
username = request.form['username']
password = request.form['password']
# 查询用户是否存在
session = Session()
user = session.query(User).filter_by(username=username, password=password).first()
if user:
# 登录成功,跳转到主页
return redirect(url_for('index'))
else:
# 登录失败,返回错误信息
return render_template('login.html', error='用户名或密码错误')
else:
# 显示登录页面
return render_template('login.html', error='')
# 定义注册页面
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
# 获取表单数据
username = request.form['username']
password = request.form['password']
# 添加用户到数据库
session = Session()
user = User(username=username, password=password)
session.add(user)
session.commit()
# 注册成功,跳转到登录页面
return redirect(url_for('login'))
else:
# 显示注册页面
return render_template('register.html')
# 定义主页
@app.route('/')
def index():
# 获取局域网内的活动主机
hosts = {}
ans, unans = srp(Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst='192.168.1.0/24'), timeout=2, verbose=False)
for s, r in ans:
hosts[r[ARP].psrc] = r[Ether].src
# 显示主页
return render_template('index.html', hosts=hosts)
# 定义ARP欺骗攻击检测页面
@app.route('/arp_attack')
def arp_attack():
# 检测ARP欺骗攻击
source_ip = ''
source_mac = ''
arp_packets = sniff(filter='arp', count=10, timeout=5)
for packet in arp_packets:
if packet[ARP].op == 2:
if source_ip == '':
source_ip = packet[ARP].psrc
source_mac = packet[ARP].hwsrc
else:
if source_ip != packet[ARP].psrc and source_mac != packet[ARP].hwsrc:
# 记录攻击源到数据库
session = Session()
attack = Attack(attack_type='ARP欺骗攻击', source_ip=packet[ARP].psrc, source_mac=packet[ARP].hwsrc)
session.add(attack)
session.commit()
# 显示攻击类型和攻击源
return render_template('arp_attack.html', attack_type='ARP欺骗攻击', source_ip=packet[ARP].psrc, source_mac=packet[ARP].hwsrc)
# 没有检测到ARP欺骗攻击
return render_template('arp_attack.html', attack_type='', source_ip='', source_mac='')
if __name__ == '__main__':
app.run(debug=True)
后续改进
- 可以添加更多类型的攻击检测,例如ICMP Flood攻击、TCP SYN Flood攻击等
- 可以将数据记录到更强大的数据库中,例如MySQL或PostgreSQL
- 可以添加图形化界面,方便用户查看攻击记录和配置软件
- 可以添加报警机制,在检测到攻击时及时通知用户
原文地址: https://www.cveoy.top/t/topic/jnPJ 著作权归作者所有。请勿转载和采集!