Sobes.tech
Junior — Senior
66

Брандмауэр с проверкой IP‑адресов

Task condition

Необходимо реализовать программу, имитирующую работу брандмауэра. Программа должна принимать набор правил, где каждое правило состоит из CIDR‑блока и действия ("ALLOW" или "DENY"). Основная функция должна проверять, разрешён ли заданный IP‑адрес согласно этим правилам, возвращая true для разрешённых и false для запрещённых. Также требуется корректно обрабатывать некорректные CIDR‑блоки и неизвестные действия.

package main

import (
  "fmt"
)

// Функция проверки разрешения IP-адреса
func IsAllowed(rules [][2]string, ip string) bool {
  // **Вставьте код проверки IP-адреса по правилам**
  return false
}

func main() {
    // **Пример входных данных:**
    // **Пример 1:**
    rules1 := [][2]string{
        {"192.168.1.0/24", "ALLOW"},
        {"10.0.0.0/16", "DENY"},
        {"8.8.8.8", "ALLOW"},
    }
    ip1 := "192.168.1.10" // ответ true

    // **Пример 2:**
    rules2 := [][2]string{
        {"192.168.1.0/24", "ALLOW"},
        {"10.0.0.0/16", "DENY"},
        {"8.8.8.8", "ALLOW"},
    }
    ip2 := "10.0.0.10" // ответ false

    // **Пример 3:**
    rules3 := [][2]string{
        {"192.168.1.0/24", "ALLOW"},
        {"10.0.0.0/16", "DENY"},
        {"8.8.8.8", "ALLOW"},
    }
    ip3 := "192.168.2.10" // ответ false

    processExample(rules1, ip1)
    processExample(rules2, ip2)
    processExample(rules3, ip3)
}

func processExample(rules [][2]string, ip string) {
    if IsAllowed(rules, ip) {
        fmt.Println("true")
    } else {
        fmt.Println("false")
    }
}