#!/bin/bash # Couleurs pour les messages en console RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' # Pas de couleur # Vérifie si l'outil nmap est installé if ! command -v nmap &> /dev/null; then echo -e "${RED}❌ nmap n'est pas installé. Installez-le d'abord.\n try: apt install nmap ${NC}" exit 1 fi # Vérifie si le dossier de sortie existe, sinon le crée output_dir="/home/www-adm1n/rapports" mkdir -p "$output_dir" # Création d'un fichier HTML avec la date et l'heure courantes current_datetime=$(date +"%Y-%m-%d %H:%M:%S") output_file="$output_dir/scan_ports_$(date +"%Y-%m-%d_%H-%M-%S").html" temp_file="/tmp/nmap_scan_result.txt" # Récupère des informations système hostname=$(hostname) os_info=$(uname -srvmo) # Début du script avec message et emoji echo -e "${YELLOW}🔍 Démarrage du scan complet des ports...${NC}" # Création du fichier HTML avec thème sombre, style moderne, tri, encodage UTF-8 et adaptation mobile echo " 📊 Rapport de Scan Complet des Ports

📊 Rapport de Scan Complet des Ports 0

${current_datetime}

" > "$output_file" # Affiche une barre de progression simulée function progress_bar { for i in {1..10}; do echo -ne "${YELLOW}⏳ Progression : $((i * 10))% \r${NC}" sleep 0.3 done echo -ne '\n' } progress_bar # Exécution du scan de tous les ports TCP et UDP avec Nmap sans détection de version, enregistrement dans un fichier temporaire nmap -sS -sU -p- localhost > "$temp_file" # Vérification si le fichier temporaire a bien été créé et contient des données if [[ ! -s "$temp_file" ]]; then echo -e "${RED}❌ Erreur : Aucun résultat trouvé. Le scan nmap n'a pas produit de sortie.${NC}" exit 1 fi # Compteur de ports port_count=0 # Fonction pour attribuer une icône selon le service et le port function get_icon { service="$1" port_number="$2" if [[ $service == "docker" ]]; then echo "" elif [[ $service == "http" || $service == "https" || $service == "apache" ]]; then echo "" elif [[ $service == "mysql" ]]; then echo "" elif [[ $service == "ssh" ]]; then echo "" elif [[ $service == "smtp" ]]; then echo "" elif [[ $port_number -eq 80 || $port_number -eq 81 || $port_number -eq 8080 || $port_number -eq 443 || ( $port_number -ge 8060 && $port_number -le 8090 ) ]]; then echo "" elif [[ $service == "mysql" || $port_number -eq 3306 ]]; then echo "" # MySQL elif [[ $service == "rpcbind" || $port_number -eq 111 ]]; then echo "" # RPC services elif [[ $service == "netbios-ssn" || $service == "netbios-ns" || $service == "netbios-dgm" ]]; then echo "" # NetBIOS elif [[ $service == "microsoft-ds" || $port_number -eq 445 ]]; then echo "" # Microsoft Directory Services elif [[ $service == "nessus" || $port_number -eq 3001 ]]; then echo "" # Nessus elif [[ $service == "redis" || $port_number -eq 6379 ]]; then echo "" # Redis elif [[ $service == "memcache" || $port_number -eq 11211 ]]; then echo "" # Memcache elif [[ $service == "unot" || $port_number -eq 5055 ]]; then echo "" # Unot (générique pour services inconnus) elif [[ $service == "pharos" || $port_number -eq 4443 ]]; then echo "" # Pharos elif [[ $service == "llmnr" || $port_number -eq 5355 ]]; then echo "" # LLMNR (Link-Local Multicast) elif [[ $service == "tor-orport" || $port_number -eq 9001 ]]; then echo "" # Tor elif [[ $service == "sdr" || $port_number -eq 9010 ]]; then echo "" # SDR (Service Discovery Relay) elif [[ $service == "dhcpc" || $port_number -eq 68 ]]; then echo "" # DHCP client elif [[ $service == "unknown" ]]; then echo "" # Unknown service elif [[ $port_number -eq 443 || $port_number -eq 8443 || $service == "https-alt" ]]; then echo "" # HTTPS and secure ports else echo "" fi } # Lecture et analyse du fichier temporaire ligne par ligne while read -r line; do echo -e "${YELLOW}🔹 Ligne lue : $line${NC}" # Message de débogage # Filtre des lignes correspondant aux ports ouverts et extraction des informations if [[ $line =~ ^[0-9]+/(tcp|udp) ]]; then port=$(echo "$line" | awk '{print $1}') protocol=$(echo "$port" | awk -F'/' '{print $2}') port_number=$(echo "$port" | cut -d'/' -f1) status=$(echo "$line" | awk '{print $2}') service=$(echo "$line" | awk '{print $3}') icon=$(get_icon "$service" "$port_number") # Incrément du compteur de ports ((port_count++)) # Ajout des informations au fichier HTML echo "" >> "$output_file" fi done < "$temp_file" # Ajout du compteur dans la balise de la pastille echo "" >> "$output_file" # Finalisation du fichier HTML avec informations supplémentaires et lien vers le fichier généré echo "
Port Type Service Icone Statut
$port$protocol$service$icon$status
" >> "$output_file" # Suppression du fichier temporaire rm "$temp_file" # Confirmation de la création du fichier if [[ -f "$output_file" ]]; then echo -e "${GREEN}✅ Scan terminé. Rapport sauvegardé dans :${NC} $output_file" else echo -e "${RED}❌ Erreur : Impossible de créer le rapport.$NC" fi