From 10c881dc5e5190a55ebdc899947c97efd8e8dead Mon Sep 17 00:00:00 2001 From: ogrechko Date: Wed, 10 Dec 2025 11:40:18 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20playbooks/scan=5Finventory.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- playbooks/scan_inventory.yml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/playbooks/scan_inventory.yml b/playbooks/scan_inventory.yml index 802a205..25644f2 100644 --- a/playbooks/scan_inventory.yml +++ b/playbooks/scan_inventory.yml @@ -1,9 +1,8 @@ --- -- name: "Сканирование сети (Rootless Mode - TCP Only)" +- name: "Сканирование сети (Rootless Mode - Fix Regex)" hosts: localhost connection: local gather_facts: no - # become: yes <--- УДАЛЕНО: Работаем без прав root vars: # --- SEMAPHORE API --- semaphore_url: "http://192.168.0.198:9999" @@ -36,7 +35,6 @@ tasks: # ---------------------------------------------------------------- # ШАГ 1: Поиск живых хостов - # Используем -sn (обычный пользователь сделает TCP ping, это ок) # ---------------------------------------------------------------- - name: Ping Sweep command: "nmap -sn -n --min-rate 1000 -T4 -oG - {{ subnets | join(' ') }}" @@ -54,13 +52,9 @@ # ---------------------------------------------------------------- # ШАГ 2: Сканирование портов (TCP Connect) - # Используем -sT (не требует root) вместо -sS/-sU # ---------------------------------------------------------------- - name: TCP Port Scan & Name Discovery shell: | - # Сканируем ключевые TCP порты: - # 22 (SSH/Linux), 445 (SMB/Windows), 8291 (Winbox/MikroTik), 9100 (JetDirect/Printer) - # --script smb-os-discovery пытается узнать имя Windows (работает по TCP, root не нужен) nmap -sT -p 22,445,8291,9100 \ --script smb-os-discovery \ -Pn -n -T4 {{ item }} @@ -69,19 +63,22 @@ changed_when: false # ---------------------------------------------------------------- - # ШАГ 3: Классификация (по открытым портам) + # ШАГ 3: Классификация (ИСПРАВЛЕНО) # ---------------------------------------------------------------- - - name: Анализ результатов + - name: Анализ результатов (Debug Mode) set_fact: classified_hosts: "{{ classified_hosts | default([]) + [ host_data ] }}" vars: out: "{{ item.stdout }}" ip: "{{ item.item }}" - # Пытаемся найти имя компьютера через SMB (для Windows) - smb_name: "{{ out | regex_search('Computer name: ([\\w-]+)', '\\1') | first | default('') }}" + # БЕЗОПАСНЫЙ ПОИСК ИМЕНИ: + # Используем regex_findall вместо search. + # Если ничего не найдено, вернется пустой список [], и default('') сработает корректно. + smb_matches: "{{ out | regex_findall('Computer name: ([\\w-]+)') }}" + smb_name: "{{ smb_matches | first | default('') }}" - # ЛОГИКА ОПРЕДЕЛЕНИЯ ТИПА (По открытым портам) + # ЛОГИКА ОПРЕДЕЛЕНИЯ ТИПА detected_type: >- {% if '445/tcp open' in out %}windows {% elif '8291/tcp open' in out %}mikrotik @@ -99,7 +96,7 @@ type: "{{ detected_type }}" name: "{{ final_name }}" loop: "{{ scan_results.results }}" - no_log: true + # no_log: true <--- УБРАЛИ, ЧТОБЫ ВИДЕТЬ ОШИБКУ, ЕСЛИ ОНА БУДЕТ # ---------------------------------------------------------------- # ШАГ 4: Группировка @@ -189,7 +186,7 @@ when: list_tik | length > 0 # ---------------------------------------------------------------- - # ШАГ 7: Отправка Принтеров (если нужны) + # ШАГ 7: Отправка Принтеров # ---------------------------------------------------------------- - block: - name: Генерация инвентаря Принтеров