diff --git a/find_max.cpp b/find_max.cpp new file mode 100644 index 0000000..92e716b --- /dev/null +++ b/find_max.cpp @@ -0,0 +1,47 @@ +#include +#include +#include +using namespace std; + +int main() { + setlocale(0, ""); + int n; + cout << "Введите размер массива n: "; + cin >> n; + + if (n <= 0) { + cout << "n должно быть положительным" << endl; + return 1; + } + + int *arr = new int[n]; + + srand(static_cast(time(0))); + for (int i = 0; i < n; ++i) { + arr[i] = rand() % 61 - 30; // значения в диапазоне [-30; 30] + } + + cout << "Array:\n"; + for (int i = 0; i < n; ++i) { + cout.width(4); + cout << arr[i]; + if ((i + 1) % 10 == 0) cout << endl; + } + if (n % 10 != 0) cout << endl; + + int maxValue = arr[0]; + int indexMax = 0; + for (int i = 1; i < n; ++i) { + if (arr[i] > maxValue) { + maxValue = arr[i]; + indexMax = i; + } + } + + cout << "max: " << maxValue << " index: " << indexMax << endl; + + delete[] arr; + return 0; +} + + diff --git a/funny_test.cpp b/funny_test.cpp new file mode 100644 index 0000000..d68ac42 --- /dev/null +++ b/funny_test.cpp @@ -0,0 +1,150 @@ +#include +using namespace std; + +int main() { + setlocale(0, ""); + int correct = 0; + int answer; + + cout << "=== ЖАРТiВЛИВИЙ ТЕСТ: ПЕРЕВiР СВОЇ МОЖЛИВОСТi ===" << endl; + cout << "Вiдповiдай на 7 питань. Удачi!" << endl << endl; + + // Question 1 + cout << "1) Професор лiг спати о 8 годинi, а встав о 9 годинi. Скiльки годин проспав професор?" << endl; + cout << "Твоя вiдповiдь: "; + cin >> answer; + switch (answer) { + case 1: + cout << "Правильно!" << endl; + correct++; + break; + default: + cout << "Неправильно! Правильна вiдповiдь: 1 година." << endl; + break; + } + cout << endl; + + // Question 2 + cout << "2) На двох руках десять пальцiв. Скiльки пальцiв на 10 руках?" << endl; + cout << "Твоя вiдповiдь: "; + cin >> answer; + switch (answer) { + case 50: + cout << "Правильно!" << endl; + correct++; + break; + default: + cout << "Неправильно! Правильна вiдповiдь: 50 пальцiв." << endl; + break; + } + cout << endl; + + + + // Question 3 + cout << "3) Скiльки цифр у дюжинi?" << endl; + cout << "Твоя вiдповiдь: "; + cin >> answer; + switch (answer) { + case 2: + cout << "Правильно!" << endl; + correct++; + break; + default: + cout << "Неправильно! Правильна вiдповiдь: 2 цифри (1 i 2)." << endl; + break; + } + cout << endl; + + // Question 4 + cout << "4) Скiльки потрiбно зробити розпилiв, щоб розпиляти колоду на 12 частин?" << endl; + cout << "Твоя вiдповiдь: "; + cin >> answer; + switch (answer) { + case 11: + cout << "Правильно!" << endl; + correct++; + break; + default: + cout << "Неправильно! Правильна вiдповiдь: 11 розпилiв." << endl; + break; + } + cout << endl; + + // Question 5 + cout << "5) Лiкар зробив три уколи в iнтервалi 30 хвилин. Скiльки часу вiн витратив?" << endl; + cout << "Твоя вiдповiдь: "; + cin >> answer; + switch (answer) { + case 30: + cout << "Правильно!" << endl; + correct++; + break; + default: + cout << "Неправильно! Правильна вiдповiдь: 30 хвилин." << endl; + break; + } + cout << endl; + + // Question 6 + cout << "6) Скiльки цифр 9 в iнтервалi 1-100?" << endl; + cout << "Твоя вiдповiдь: "; + cin >> answer; + switch (answer) { + case 1: + cout << "Правильно!" << endl; + correct++; + break; + default: + cout << "Неправильно! Правильна вiдповiдь: 1 (тiльки число 9)." << endl; + break; + } + cout << endl; + + // Question 7 + cout << "7) Пастух мав 30 овець. Усi, крiм однiєї, розбiглися. Скiльки овець лишилося?" << endl; + cout << "Твоя вiдповiдь: "; + cin >> answer; + switch (answer) { + case 1: + cout << "Правильно!" << endl; + correct++; + break; + default: + cout << "Неправильно! Правильна вiдповiдь: 1 вiвця." << endl; + break; + } + cout << endl; + + // Results + cout << "=== РЕЗУЛЬТАТИ ===" << endl; + cout << "Правильних вiдповiдей: " << correct << " з 7" << endl; + + switch (correct) { + case 7: + cout << "ГЕНIЙ!" << endl; + break; + case 6: + cout << "ЕРУДИТ!" << endl; + break; + case 5: + cout << "НОРМАЛЬНИЙ!" << endl; + break; + case 4: + cout << "ЗДIБНОСТI СЕРЕДНI!" << endl; + break; + case 3: + cout << "ЗДIБНОСТI НИЖЧЕ СЕРЕДНЬОГО!" << endl; + break; + case 2: + case 1: + case 0: + cout << "ВАМ ТРЕБА ВIДПОЧИТИ!" << endl; + break; + default: + cout << "Помилка в пiдрахунку!" << endl; + break; + } + + return 0; +} \ No newline at end of file diff --git a/lucky_number.cpp b/lucky_number.cpp new file mode 100644 index 0000000..319d331 --- /dev/null +++ b/lucky_number.cpp @@ -0,0 +1,40 @@ +#include +using namespace std; + +int main() { + int number; + + cout << "Enter a 6-digit number: "; + cin >> number; + + // Check if the number is 6-digit (from 100000 to 999999) + if (number < 100000 || number > 999999) { + cout << "Error! Please enter exactly a 6-digit number (from 100000 to 999999)" << endl; + return 1; + } + + // Extract digits separately + int digit1 = number / 100000; // first digit + int digit2 = (number / 10000) % 10; // second digit + int digit3 = (number / 1000) % 10; // third digit + int digit4 = (number / 100) % 10; // fourth digit + int digit5 = (number / 10) % 10; // fifth digit + int digit6 = number % 10; // sixth digit + + // Calculate sums + int sum_first_three = digit1 + digit2 + digit3; + int sum_last_three = digit4 + digit5 + digit6; + + // Check if lucky + if (sum_first_three == sum_last_three) { + cout << "Congratulations! Number " << number << " is lucky!" << endl; + cout << "Sum of first three digits: " << sum_first_three << endl; + cout << "Sum of last three digits: " << sum_last_three << endl; + } else { + cout << "Number " << number << " is not lucky." << endl; + cout << "Sum of first three digits: " << sum_first_three << endl; + cout << "Sum of last three digits: " << sum_last_three << endl; + } + + return 0; +} diff --git a/mult.cpp b/mult.cpp new file mode 100644 index 0000000..b884b03 --- /dev/null +++ b/mult.cpp @@ -0,0 +1,85 @@ +#include +#include +#include +using namespace std; + +int main() { + int l; + int q; + int c = 0; + + srand(time(0)); + + cout << "=== ПЕРЕВiРКА ТАБЛИЦi МНОЖЕННЯ ===" << endl; + cout << "Оберiть рiвень складностi:" << endl; + cout << "1) Легкий (1-5, 5 питань)" << endl; + cout << "2) Середнiй (1-10, 7 питань)" << endl; + cout << "3) Важкий (1-15, 10 питань)" << endl; + cout << "Введiть номер рiвня (1-3): "; + cin >> l; + + switch(l) { + case 1: + q = 5; + cout << "\n=== ЛЕГКИЙ РiВЕНЬ ===" << endl; + break; + case 2: + q = 7; + cout << "\n=== СЕРЕДНiЙ РiВЕНЬ ===" << endl; + break; + case 3: + q = 10; + cout << "\n=== ВАЖКИЙ РiВЕНЬ ===" << endl; + break; + default: + cout << "Невiрний вибiр!" << endl; + return 1; + } + + for (int i = 1; i <= q; i++) { + int a; + int b; + int ans; + int user; + + if (l == 1) { + a = rand() % 5 + 1; + b = rand() % 5 + 1; + } else if (l == 2) { + a = rand() % 10 + 1; + b = rand() % 10 + 1; + } else { + a = rand() % 15 + 1; + b = rand() % 15 + 1; + } + + ans = a * b; + + cout << "\nПитання " << i << "/" << q << ": " << a << " * " << b << " = "; + cin >> user; + + if (user == ans) { + cout << "Правильно! +1 бал" << endl; + c++; + } else { + cout << "Неправильно! Правильна вiдповiдь: " << ans << endl; + } + } + + cout << "\n=== РЕЗУЛЬТАТИ ===" << endl; + cout << "Правильних вiдповiдей: " << c << " з " << q << endl; + + double p = (double)c / q * 100; + + if (p >= 90) { + cout << "Оцiнка: ВiДМiННО! (5)" << endl; + } else if (p >= 80) { + cout << "Оцiнка: ДОБРЕ (4)" << endl; + } else if (p >= 70) { + cout << "Оцiнка: ЗАДОВiЛЬНО (3)" << endl; + } else { + cout << "Оцiнка: НЕЗАДОВiЛЬНО (2)" << endl; + } + + return 0; +} diff --git a/network1.sh b/network1.sh new file mode 100644 index 0000000..b632aae --- /dev/null +++ b/network1.sh @@ -0,0 +1,344 @@ +#!/bin/bash + +set -euo pipefail + +readonly IPT=iptables + +# ------------------------- Утилиты ------------------------- +require_root() { + if [[ ${EUID:-$(id -u)} -ne 0 ]]; then + echo "[!] Пожалуйста, запустите скрипт от имени root (sudo)." >&2 + exit 1 + fi +} + +ensure_dependencies() { + if ! command -v ${IPT} >/dev/null 2>&1; then + echo "[!] iptables не найден. Установите: apt update && apt install -y iptables" >&2 + exit 1 + fi + if ! command -v netfilter-persistent >/dev/null 2>&1; then + echo "[i] Устанавливаем iptables-persistent (без интерактивного режима)..." + DEBIAN_FRONTEND=noninteractive apt-get update >/dev/null 2>&1 || true + DEBIAN_FRONTEND=noninteractive apt-get install -y iptables-persistent netfilter-persistent >/dev/null 2>&1 || true + fi +} + +validate_port() { + local port="$1" + [[ "$port" =~ ^[0-9]+$ ]] || return 1 + (( port >= 1 && port <= 65535 )) +} + +validate_protocol() { + local proto="$1" + case "$proto" in + tcp|udp|both) return 0 ;; + *) return 1 ;; + esac +} + +validate_ip() { + local ip="$1" + # Принимаем IPv4 CIDR или одиночный IPv4 + if [[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$ ]]; then + IFS=/ read -r base _ <<<"$ip" + IFS=. read -r a b c d <<<"$base" + for o in "$a" "$b" "$c" "$d"; do + (( o >= 0 && o <= 255 )) || return 1 + done + return 0 + fi + return 1 +} + +# === Сохранение правил === +save_rules() { + echo "[+] Сохраняем правила..." + # Используем iptables-persistent для сохранения правил + netfilter-persistent save >/dev/null 2>&1 || true + echo "[+] Правила сохранены." +} + +# === Показать правила === +show_rules() { + echo "========== IPTABLES RULES ==========" + iptables -L -n -v --line-numbers + echo "========== DOCKER-USER RULES ==========" + if iptables -S DOCKER-USER >/dev/null 2>&1; then + iptables -L DOCKER-USER -n -v --line-numbers + else + echo "(chain DOCKER-USER not present)" + fi +} + +parse_port_rules() { + local chain="$1" + local action_filter="${2:-}" # ACCEPT or DROP + local src_filter="${3:-}" # -s IP + local rules + + rules=$(iptables -S "$chain" 2>/dev/null) + if [[ -z "$rules" ]]; then + return + fi + + echo "# Chain: $chain" + echo "# Protocol | Port | Action | Source IP" + echo "-------------------------------------------" + echo "$rules" | while read -r rule; do + local proto="-" port="-" action="-" src="-" + + [[ "$rule" =~ -p\ (tcp|udp) ]] && proto="${BASH_REMATCH[1]}" + [[ "$rule" =~ --dport\ ([0-9]+) ]] && port="${BASH_REMATCH[1]}" + [[ "$rule" =~ -j\ (ACCEPT|DROP) ]] && action="${BASH_REMATCH[1]}" + [[ "$rule" =~ -s\ ([0-9\./]+) ]] && src="${BASH_REMATCH[1]}" + + # Skip if no port rule or if action/src filter doesn't match + if [[ "$port" == "-" ]]; then continue; fi + if [[ -n "$action_filter" && "$action" != "$action_filter" ]]; then continue; fi + if [[ -n "$src_filter" && "$src" != "$src_filter" ]]; then continue; fi + + printf "%-10s | %-7s | %-6s | %s\n" "$proto" "$port" "$action" "$src" + done +} + +# === Показать открытые порты === +show_open_ports() { + echo "\n========== ОТКРЫТЫЕ ПОРТЫ (ACCEPT) ==========" + parse_port_rules INPUT ACCEPT + parse_port_rules DOCKER-USER ACCEPT + echo "=============================================" + echo "[i] Если порт открыт, но не работает, убедитесь, что служба запущена и слушает этот порт (например, командой 'ss -tulpn | grep ')." +} + +# === Показать закрытые порты (из DROP) === +show_closed_ports() { + echo "\n========== ЗАКРЫТЫЕ ПОРТЫ (DROP) ==========" + parse_port_rules INPUT DROP + parse_port_rules DOCKER-USER DROP + echo "===========================================" +} + +show_all_ports() { + echo "\n========== ВСЕ ПОРТОВЫЕ ПРАВИЛА ==========" + parse_port_rules INPUT + parse_port_rules DOCKER-USER + echo "==========================================" +} + +# Helper for 'Press Enter to continue...' +press_enter() { + read -rp $'Нажмите Enter, чтобы продолжить...' +} + +# === Блокировка IP === +block_ip() { + read -p "Введите IP для блокировки: " ip + if ! validate_ip "$ip"; then echo "[!] Неверный IP-адрес."; press_enter; return; fi + iptables -A INPUT -s "$ip" -j DROP + iptables -A DOCKER-USER -s "$ip" -j DROP + echo "[+] IP $ip заблокирован." + save_rules +} + +# === Разблокировка IP === +unblock_ip() { + read -p "Введите IP для разблокировки: " ip + if ! validate_ip "$ip"; then echo "[!] Неверный IP-адрес."; press_enter; return; fi + iptables -D INPUT -s "$ip" -j DROP 2>/dev/null + iptables -D DOCKER-USER -s "$ip" -j DROP 2>/dev/null + echo "[+] IP $ip разблокирован." + save_rules +} + +# === Ensure DOCKER-USER chain exists and hooked === +ensure_docker_user_chain() { + iptables -S DOCKER-USER >/dev/null 2>&1 || iptables -N DOCKER-USER + iptables -C FORWARD -j DOCKER-USER >/dev/null 2>&1 || iptables -I FORWARD -j DOCKER-USER +} + +# === Меню управления портами === +ports_menu() { + while true; do + cat </dev/null || true + else + ${IPT} -D "$chain" -p "$proto" --dport "$port" -s "$ip" -j "$action" 2>/dev/null || true + fi +} + +new_open_port() { + read -p "Введите номер порта: " port + if ! validate_port "$port"; then echo "[!] Неверный номер порта."; press_enter; return; fi + read -p "Протокол (tcp/udp/both): " proto + proto=$(echo "$proto" | tr '[:upper:]' '[:lower:]') + if ! validate_protocol "$proto"; then echo "[!] Неверный протокол."; press_enter; return; fi + read -p "Ограничить доступ по IP? (y/n): " limit + + limit=$(echo "$limit" | tr '[:upper:]' '[:lower:]') + + if [ "$proto" == "both" ]; then + protos=("tcp" "udp") + else + protos=("$proto") + fi + + for p in "${protos[@]}"; do + # Удаляем ВСЕ существующие правила для этого порта из внешних цепочек + # Удаляем правила ACCEPT + while iptables -D INPUT -p "$p" --dport "$port" -j ACCEPT 2>/dev/null; do :; done + while iptables -D DOCKER-USER -p "$p" --dport "$port" -j ACCEPT 2>/dev/null; do :; done + # Удаляем правила DROP + while iptables -D INPUT -p "$p" --dport "$port" -j DROP 2>/dev/null; do :; done + while iptables -D DOCKER-USER -p "$p" --dport "$port" -j DROP 2>/dev/null; do :; done + + if [ "$limit" == "y" ]; then + read -p "Введите IP-адреса (через пробел): " ips + for ip in $ips; do + if ! validate_ip "$ip"; then echo "[!] Пропускаем неверный IP: $ip"; continue; fi + iptables -I INPUT 1 -p "$p" --dport "$port" -s "$ip" -j ACCEPT + iptables -I DOCKER-USER 1 -p "$p" --dport "$port" -s "$ip" -j ACCEPT + done + else + iptables -I INPUT 1 -p "$p" --dport "$port" -j ACCEPT + iptables -I DOCKER-USER 1 -p "$p" --dport "$port" -j ACCEPT + fi + done + echo "[+] Порт $port открыт." + save_rules +} + +new_close_port() { + read -p "Введите номер порта: " port + if ! validate_port "$port"; then echo "[!] Неверный номер порта."; press_enter; return; fi + read -p "Протокол (tcp/udp/both): " proto + proto=$(echo "$proto" | tr '[:upper:]' '[:lower:]') + if ! validate_protocol "$proto"; then echo "[!] Неверный протокол."; press_enter; return; fi + + if [ "$proto" == "both" ]; then + protos=("tcp" "udp") + else + protos=("$proto") + fi + + for p in "${protos[@]}"; do + # Удаляем ВСЕ существующие правила для этого порта из внешних цепочек + # Удаляем правила ACCEPT + while iptables -D INPUT -p "$p" --dport "$port" -j ACCEPT 2>/dev/null; do :; done + while iptables -D DOCKER-USER -p "$p" --dport "$port" -j ACCEPT 2>/dev/null; do :; done + # Удаляем правила DROP + while iptables -D INPUT -p "$p" --dport "$port" -j DROP 2>/dev/null; do :; done + while iptables -D DOCKER-USER -p "$p" --dport "$port" -j DROP 2>/dev/null; do :; done + + # Добавляем новое правило DROP в НАЧАЛО внешних цепочек + iptables -I INPUT 1 -p "$p" --dport "$port" -j DROP + iptables -I DOCKER-USER 1 -p "$p" --dport "$port" -j DROP + done + echo "[+] Порт $port закрыт." + save_rules +} + +new_add_ip_to_port() { + read -p "Введите номер порта: " port + if ! validate_port "$port"; then echo "[!] Неверный номер порта."; press_enter; return; fi + read -p "Протокол (tcp/udp): " proto + proto=$(echo "$proto" | tr '[:upper:]' '[:lower:]') + if ! validate_protocol "$proto"; then echo "[!] Неверный протокол."; press_enter; return; fi + read -p "Введите IP-адреса (через пробел): " ips + + for ip in $ips; do + if ! validate_ip "$ip"; then echo "[!] Пропускаем неверный IP: $ip"; continue; fi + # Удаляем DROP для этого IP/порта из внешних цепочек + while iptables -D INPUT -p "$proto" --dport "$port" -s "$ip" -j DROP 2>/dev/null; do :; done + while iptables -D DOCKER-USER -p "$proto" --dport "$port" -s "$ip" -j DROP 2>/dev/null; do :; done + # Добавляем ACCEPT в начало внешних цепочек + iptables -I INPUT 1 -p "$proto" --dport "$port" -s "$ip" -j ACCEPT + iptables -I DOCKER-USER 1 -p "$proto" --dport "$port" -s "$ip" -j ACCEPT + echo "[+] Добавлен доступ для $ip на порт $port/$proto" + done + save_rules +} + +new_remove_ip_from_port() { + read -p "Введите номер порта: " port + if ! validate_port "$port"; then echo "[!] Неверный номер порта."; press_enter; return; fi + read -p "Протокол (tcp/udp): " proto + proto=$(echo "$proto" | tr '[:upper:]' '[:lower:]') + if ! validate_protocol "$proto"; then echo "[!] Неверный протокол."; press_enter; return; fi + read -p "Введите IP-адрес: " ip + if ! validate_ip "$ip"; then echo "[!] Неверный IP-адрес."; press_enter; return; fi + + # Удаляем ACCEPT для этого IP/порта из внешних цепочек + while iptables -D INPUT -p "$proto" --dport "$port" -s "$ip" -j ACCEPT 2>/dev/null; do :; done + while iptables -D DOCKER-USER -p "$proto" --dport "$port" -s "$ip" -j ACCEPT 2>/dev/null; do :; done + echo "[+] Убран доступ для $ip с порта $port/$proto" + save_rules +} + +require_root +ensure_dependencies +ensure_docker_user_chain + +main_menu