Обновить playbooks/scan_inventory.yml

This commit is contained in:
2025-12-10 11:40:18 +00:00
parent 2cae218bdb
commit 10c881dc5e

View File

@@ -1,9 +1,8 @@
--- ---
- name: "Сканирование сети (Rootless Mode - TCP Only)" - name: "Сканирование сети (Rootless Mode - Fix Regex)"
hosts: localhost hosts: localhost
connection: local connection: local
gather_facts: no gather_facts: no
# become: yes <--- УДАЛЕНО: Работаем без прав root
vars: vars:
# --- SEMAPHORE API --- # --- SEMAPHORE API ---
semaphore_url: "http://192.168.0.198:9999" semaphore_url: "http://192.168.0.198:9999"
@@ -36,7 +35,6 @@
tasks: tasks:
# ---------------------------------------------------------------- # ----------------------------------------------------------------
# ШАГ 1: Поиск живых хостов # ШАГ 1: Поиск живых хостов
# Используем -sn (обычный пользователь сделает TCP ping, это ок)
# ---------------------------------------------------------------- # ----------------------------------------------------------------
- name: Ping Sweep - name: Ping Sweep
command: "nmap -sn -n --min-rate 1000 -T4 -oG - {{ subnets | join(' ') }}" command: "nmap -sn -n --min-rate 1000 -T4 -oG - {{ subnets | join(' ') }}"
@@ -54,13 +52,9 @@
# ---------------------------------------------------------------- # ----------------------------------------------------------------
# ШАГ 2: Сканирование портов (TCP Connect) # ШАГ 2: Сканирование портов (TCP Connect)
# Используем -sT (не требует root) вместо -sS/-sU
# ---------------------------------------------------------------- # ----------------------------------------------------------------
- name: TCP Port Scan & Name Discovery - name: TCP Port Scan & Name Discovery
shell: | 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 \ nmap -sT -p 22,445,8291,9100 \
--script smb-os-discovery \ --script smb-os-discovery \
-Pn -n -T4 {{ item }} -Pn -n -T4 {{ item }}
@@ -69,19 +63,22 @@
changed_when: false changed_when: false
# ---------------------------------------------------------------- # ----------------------------------------------------------------
# ШАГ 3: Классификация (по открытым портам) # ШАГ 3: Классификация (ИСПРАВЛЕНО)
# ---------------------------------------------------------------- # ----------------------------------------------------------------
- name: Анализ результатов - name: Анализ результатов (Debug Mode)
set_fact: set_fact:
classified_hosts: "{{ classified_hosts | default([]) + [ host_data ] }}" classified_hosts: "{{ classified_hosts | default([]) + [ host_data ] }}"
vars: vars:
out: "{{ item.stdout }}" out: "{{ item.stdout }}"
ip: "{{ item.item }}" 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: >- detected_type: >-
{% if '445/tcp open' in out %}windows {% if '445/tcp open' in out %}windows
{% elif '8291/tcp open' in out %}mikrotik {% elif '8291/tcp open' in out %}mikrotik
@@ -99,7 +96,7 @@
type: "{{ detected_type }}" type: "{{ detected_type }}"
name: "{{ final_name }}" name: "{{ final_name }}"
loop: "{{ scan_results.results }}" loop: "{{ scan_results.results }}"
no_log: true # no_log: true <--- УБРАЛИ, ЧТОБЫ ВИДЕТЬ ОШИБКУ, ЕСЛИ ОНА БУДЕТ
# ---------------------------------------------------------------- # ----------------------------------------------------------------
# ШАГ 4: Группировка # ШАГ 4: Группировка
@@ -189,7 +186,7 @@
when: list_tik | length > 0 when: list_tik | length > 0
# ---------------------------------------------------------------- # ----------------------------------------------------------------
# ШАГ 7: Отправка Принтеров (если нужны) # ШАГ 7: Отправка Принтеров
# ---------------------------------------------------------------- # ----------------------------------------------------------------
- block: - block:
- name: Генерация инвентаря Принтеров - name: Генерация инвентаря Принтеров