Задача на скрининге: Система фильтрации сетевого трафика
Вы разрабатываете систему фильтрации сетевого трафика для межсетевого экрана. Цель системы — фильтровать пакеты в зависимости от их типа и политики безопасности.
Каждый тип пакета обрабатывается по-разному:
- HTTP-пакеты — проверяются на наличие запрещенных URL.
- DNS-запросы — проверяются на запрещенные домены.
- ICMP-пакеты — блокируются, если исходят от запрещенных IP-адресов.
Задание:
- Спроектируйте и реализуйте систему фильтрации пакетов, используя подходящий паттерн проектирования.
- Реализуйте базовый интерфейс для обработки пакетов и обеспечьте его расширяемость для добавления новых типов пакетов.
- Создайте несколько классов, каждый из которых будет обрабатывать определённый тип пакета, применяя соответствующую логику фильтрации.
Ожидаемый результат:
- Наличие интерфейса или абстрактного класса для обработки пакетов.
- Классы, реализующие логику фильтрации для каждого типа пакета.
Пример:
# Входные данные
packets = [
{"type": "http", "url": "example.com"},
{"type": "dns", "domain": "blocked.com"},
{"type": "icmp", "src_ip": "192.168.1.1"}
]
# Ожидаемый результат
# HTTP-пакет с example.com - разрешен
# DNS-запрос к blocked.com - заблокирован
# ICMP-пакет от 192.168.1.1 - заблокирован
Задача на скрининге: Бинарное дерево (из изображения)
Дано бинарное дерево, значения в нем — числа. Нужно написать функцию, которая возвращает сумму всех узлов дерева, у которых нет потомков.
Например, для дерева
5
/
4 2
/ /
1 6 3
7
Результатом будет число 14 (1 + 6 + 7).
class Node(object):
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
def tree_sum(root: Node) -> int:
...
Вложения
