ARP 攻击检测与防护软件 - Python 实现
ARP 攻击检测与防护软件 - Python 实现
本软件使用 Python 和 Scapy 库,可以检测常见的网络攻击,如 ICMP Flood、TCP 攻击和 ARP 欺骗。
功能:
- 检测 ICMP Flood 攻击
- 检测 TCP 攻击
- 检测 ARP 欺骗攻击
- 扫描活动主机
- 记录攻击源的 IP 地址和 MAC 地址
代码:
from scapy.all import *
import tkinter as tk
from scapy.layers.l2 import ARP
def icmp_flood_detect():
result.delete('1.0', tk.END) # 清空文本框
# 过滤 ICMP Echo 请求流量
filter_str = 'icmp and icmp[0] == 8'
# 设置抓包超时时间
timeout = 10
# 开始抓包
pkts = sniff(filter=filter_str, timeout=timeout)
# 判断是否有大量 ICMP Echo 请求流入
if len(pkts) > 100:
result.insert(tk.END, '检测到 ICMP Flood 攻击!\n')
else:
result.insert(tk.END, '没有遭受 ICMP Flood 攻击。\n')
def tcp_attack_detect():
result.delete('1.0', tk.END) # 清空文本框
# 过滤 TCP SYN 请求流量
filter_str = 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'
# 设置抓包超时时间
timeout = 10
# 开始抓包
pkts = sniff(filter=filter_str, timeout=timeout)
# 判断是否有大量 TCP SYN 请求流入
if len(pkts) > 100:
result.insert(tk.END, '检测到 TCP 攻击!\n')
else:
result.insert(tk.END, '没有遭受 TCP 攻击。\n')
def arp_attack_detect():
result.delete('1.0', tk.END) # 清空文本框
# 过滤 ARP 请求和响应流量
filter_str = 'arp'
# 设置抓包超时时间
timeout = 10
# 开始抓包
pkts = sniff(filter=filter_str, timeout=timeout)
# 记录活动主机的 IP 和 MAC 地址
arp_table = {}
for pkt in pkts:
if pkt[ARP].op == ARP.is_at:
arp_table[pkt[ARP].psrc] = pkt[ARP].hwsrc
# 判断是否存在多个 IP 地址对应同一个 MAC 地址的情况
mac_set = set(arp_table.values())
if len(mac_set) < len(arp_table):
result.insert(tk.END, '检测到 ARP 欺骗攻击!\n')
else:
result.insert(tk.END, '没有遭受 ARP 欺骗攻击。\n')
# 记录攻击源的 IP 和 MAC 地址,并保存到本地文件
attack_table = {}
for ip, mac in arp_table.items():
if list(arp_table.values()).count(mac) > 1:
attack_table[ip] = mac
with open('attack_table.txt', 'w') as f:
for ip, mac in attack_table.items():
f.write(ip + ' : ' + mac + '\n')
def scan_hosts():
result.delete('1.0', tk.END) # 清空文本框
# 过滤 ARP 请求和响应流量
filter_str = 'arp'
# 设置抓包超时时间
timeout = 10
# 开始抓包
pkts = sniff(filter=filter_str, timeout=timeout)
# 记录活动主机的 IP 和 MAC 地址,并保存到本地文件
arp_table = {}
for pkt in pkts:
if pkt[ARP].op == ARP.is_at:
arp_table[pkt[ARP].psrc] = pkt[ARP].hwsrc
with open('arp_table.txt', 'w') as f:
for ip, mac in arp_table.items():
f.write(ip + ' : ' + mac + '\n')
result.insert(tk.END, '扫描完毕,记录保存在 arp_table.txt 文件中。\n')
# 创建可视化界面
root = tk.Tk()
root.title('ARP 攻击检测与防护软件')
root.geometry('500x300')
# 创建按钮和文本框
icmp_btn = tk.Button(root, text='检测 ICMP Flood 攻击', command=icmp_flood_detect)
icmp_btn.pack(pady=10)
tcp_btn = tk.Button(root, text='检测 TCP 攻击', command=tcp_attack_detect)
tcp_btn.pack(pady=10)
ar
原文地址: https://www.cveoy.top/t/topic/jnkL 著作权归作者所有。请勿转载和采集!