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
ARP 攻击检测与防护软件 - Python 实现

原文地址: https://www.cveoy.top/t/topic/jnkL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录