基于Linux的Python实现ARP检测防护软件 - 防范ARP攻击,保护网络安全
基于Linux的Python实现ARP检测防护软件 - 防范ARP攻击,保护网络安全
本文介绍使用Python在Linux系统上实现一个ARP检测防护软件。该软件能够扫描局域网内活动主机,检测ARP攻击行为,并记录攻击源,提供可视化功能,有效保护网络安全。
软件功能
- 扫描局域网活动主机: 获取局域网内所有活动主机的MAC地址和IP地址。
- 检测ARP攻击: 实时监测网络数据包,识别并记录ARP攻击行为,包括攻击源的MAC地址和IP地址。
- ARP攻击防护: 通过发送伪造的ARP响应报文,阻止攻击者发送虚假ARP信息,有效防御ARP攻击。
- 可视化功能: 提供界面或日志记录,显示扫描结果、攻击记录等信息,方便用户查看和分析。
代码实现
该软件主要包含三个Python文件:
main.py: 主程序文件,负责调用扫描和防护功能。arp_scan.py: 负责扫描局域网活动主机,获取MAC地址和IP地址。arp_defense.py: 负责检测ARP攻击行为,并进行防护。
1. main.py
import arp_scan
import arp_defense
if __name__ == "__main__":
# 扫描局域网内活动主机的MAC地址、IP地址
arp_scan.scan()
# 启动ARP攻击检测和防护
arp_defense.defense()
2. arp_scan.py
import scapy.all as scapy
import threading
import time
# 定义局域网IP地址前缀
ip_prefix = "192.168.1."
# 定义全局变量,用于存储扫描结果
ip_mac_dict = {}
# 定义函数,用于扫描局域网内活动主机的MAC地址、IP地址
def scan():
global ip_mac_dict
ip_mac_dict = {}
threads = []
for i in range(1, 255):
ip = ip_prefix + str(i)
t = threading.Thread(target=scan_ip, args=(ip,))
threads.append(t)
t.start()
for t in threads:
t.join()
# 定义函数,用于扫描指定IP地址的MAC地址
def scan_ip(ip):
global ip_mac_dict
try:
arp_req = scapy.ARP(pdst=ip)
broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
arp_broadcast = broadcast/arp_req
res = scapy.srp(arp_broadcast, timeout=1, verbose=False)[0]
mac = res[0][1].hwsrc
ip_mac_dict[ip] = mac
except:
pass
time.sleep(0.1)
3. arp_defense.py
import scapy.all as scapy
import time
# 定义全局变量,用于存储ARP攻击源的MAC地址、IP地址
attack_dict = {}
# 定义函数,用于检测ARP攻击行为
def detect(packet):
# 判断是否为ARP请求或ARP响应报文
if packet.haslayer(scapy.ARP) and (packet[scapy.ARP].op == 1 or packet[scapy.ARP].op == 2):
# 获取源MAC地址、源IP地址、目的MAC地址、目的IP地址
src_mac = packet[scapy.Ether].src
src_ip = packet[scapy.ARP].psrc
dst_mac = packet[scapy.Ether].dst
dst_ip = packet[scapy.ARP].pdst
# 判断是否为ARP攻击行为
if src_mac != attack_dict.get(src_ip, ""):
# 记录ARP攻击源的MAC地址、IP地址
attack_dict[src_ip] = src_mac
# 打印提示信息
print("ARP attack detected:")
print("Source MAC: " + src_mac + ", Source IP: " + src_ip)
print("Destination MAC: " + dst_mac + ", Destination IP: " + dst_ip)
# 定义函数,用于防护ARP攻击行为
def protect(packet):
# 获取源MAC地址、源IP地址、目的MAC地址、目的IP地址
src_mac = packet[scapy.Ether].src
src_ip = packet[scapy.ARP].psrc
dst_mac = packet[scapy.Ether].dst
dst_ip = packet[scapy.ARP].pdst
# 判断是否为ARP攻击源
if src_ip in attack_dict:
# 获取正常主机的MAC地址
dst_mac = arp_scan.ip_mac_dict.get(dst_ip, "")
# 构建ARP响应报文
arp_resp = scapy.ARP(op=2, hwsrc=attack_dict[src_ip], psrc=src_ip, hwdst=dst_mac, pdst=dst_ip)
# 构建以太网帧
ether_resp = scapy.Ether(src=attack_dict[src_ip], dst=dst_mac)/arp_resp
# 发送ARP响应报文
scapy.sendp(ether_resp, verbose=False)
# 打印提示信息
print("ARP attack prevented:")
print("Source MAC: " + src_mac + ", Source IP: " + src_ip)
print("Destination MAC: " + dst_mac + ", Destination IP: " + dst_ip)
# 定义函数,用于启动ARP攻击检测和防护
def defense():
# 设置过滤器,只监听ARP请求和ARP响应报文
filter_str = "arp"
# 启动嗅探器,实时监听网络数据包
scapy.sniff(filter=filter_str, prn=detect, store=0)
# 启动防护机制,实时监听网络数据包
scapy.sniff(filter=filter_str, prn=protect, store=0)
使用方法
- 安装依赖库:
pip install scapy - 将代码保存到本地,并确保代码文件位于同一目录下。
- 运行主程序文件
main.py:python main.py
注意
- 该软件需要在Linux系统上运行,并且需要root权限。
- 软件仅提供基本功能,用户可以根据实际需求进行扩展和完善。
- ARP攻击防护机制只能阻止攻击者发送虚假ARP信息,无法完全阻止所有攻击。
总结
本文介绍了使用Python实现ARP检测防护软件的方法,帮助用户了解ARP攻击的原理和防护措施,提高网络安全意识,有效保护网络安全。
请注意: 本代码示例仅供学习和参考,实际应用中需要根据具体情况进行调整和完善。
原文地址: https://www.cveoy.top/t/topic/jk2f 著作权归作者所有。请勿转载和采集!