--- - name: Netzwerk Scan ARP + NMAP CSV hosts: localhost gather_facts: false vars: dns_server: - "192.168.1.230" lokales_netz: - "192.168.1.0/24" entfernte_netze: - "9.99.0.0/24" - "9.99.10.0/24" - "9.99.20.0/24" - "9.99.30.0/24" - "9.99.40.0/24" - "9.99.50.0/24" - "9.99.60.0/24" - "9.99.70.0/24" csv_datei: "/mnt/scripte/NETWORK-SCAN/netzwerk_scan_combined.csv" tasks: #################################################### # ARP Scan lokales Netzwerk #################################################### - name: ARP Scan lokales Netz ansible.builtin.command: cmd: "sudo arp-scan {{ item }}" loop: "{{ lokales_netz }}" register: arp_ergebnis - name: ARP Daten sammeln ansible.builtin.set_fact: hosts_liste: "{{ hosts_liste | default([]) + [ { 'ip': item.split()[0], 'mac': item.split()[1], 'hersteller': item.split()[2:] | join(' ') } ] }}" loop: "{{ arp_ergebnis.results | map(attribute='stdout_lines') | flatten }}" when: - item.split() | length >= 2 - item.split()[0] is match('^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$') #################################################### # NMAP Scan entfernte Netzwerke #################################################### - name: NMAP Scan entfernte Netze ansible.builtin.command: cmd: "nmap -sn {{ item }}" loop: "{{ entfernte_netze }}" register: nmap_ergebnis - name: NMAP IPs hinzufügen ansible.builtin.set_fact: hosts_liste: "{{ hosts_liste | default([]) + [ { 'ip': item | regex_replace('.*for ', ''), 'mac': 'unbekannt', 'hersteller': 'unbekannt' } ] }}" loop: >- {{ nmap_ergebnis.results | map(attribute='stdout_lines') | flatten }} when: - "'Nmap scan report for' in item" #################################################### # Hostnamen suchen #################################################### - name: Hostnamen über zentralen DNS abfragen ansible.builtin.shell: cmd: "dig @{{ dns_server }} -x {{ item.ip }} +short | sed 's/\\.$//'" loop: "{{ hosts_liste }}" register: hostname_ergebnis changed_when: false failed_when: false #################################################### # CSV schreiben #################################################### - name: CSV erstellen ansible.builtin.copy: dest: "{{ csv_datei }}" content: | IP : HOSTNAME : MAC ADRESSE : HERSTELLER {% for host in hosts_liste %} {{ host.ip }} : {{ hostname_ergebnis.results[loop.index0].stdout | trim | default('unbekannt', true) }} : {{ host.mac }} : {{ host.hersteller }} {% endfor %} - name: Ergebnis anzeigen ansible.builtin.debug: msg: "Scan fertig: {{ csv_datei }}"