Bonjour à tous,
Je partage un script pour récupérer tous les sous-domaines d'un URL donné en argument, chaque sous-domaine est ping pour vérifer qu'il est bien up :
Je partage un script pour récupérer tous les sous-domaines d'un URL donné en argument, chaque sous-domaine est ping pour vérifer qu'il est bien up :
Code:
#!/bin/sh # # commandes utilisées : wget, sed, grep, sort, uniq, wc, host, ping # # Script testé pour : GNU bash, version 4.3.46(1)-release (x86_64-unknown-linux-gnu) # Vérification du bon usage du programme if [[ $# != 1 ]] then echo "Usage $0 <url>" exit 1 fi # Téléchargement de la page, récupération des liens http et https, formatage puis filtrage. liens_http="wget -q -O- $1 | grep -o 'http://[^!w+\"]*.$1' | sed 's/^http:\/\///' | sort | uniq" liens_https="wget -q -O- $1 | grep -o 'https://[^!w+\"]*.$1' | sed 's/^https:\/\///' | sort | uniq" # Exécution des commandes (http) echo "[INFO] Récupération des liens http" sous_domaines_http=$(eval $liens_http) # Calcul du nombre de lien(s) http trouvé(s) nb_liens_http="wget -q -O- $1 | grep -o 'http://[^!w+\"]*.$1' | sed 's/^http:\/\///' | sort | uniq | wc -l" R_nb_liens_http=$(eval $nb_liens_http) echo "[INFO] $R_nb_liens_http lien(s) HTTP trouvé(s)" # Exécution des commandes (https) echo "[INFO] Récupération des liens https" sous_domaines_https=$(eval $liens_https) # Calcul du nombre de lien(s) http trouvé(s) nb_liens_https="wget -q -O- $1 | grep -o 'https://[^!w+\"]*.$1' | sed 's/^https:\/\///' | sort | uniq | wc -l" R_nb_liens_https=$(eval $nb_liens_https) echo "[INFO] $R_nb_liens_https lien(s) HTTPS trouvé(s)" # ========================================================== # TODO Suppression des doublons http/https sous_domaines_both=$sous_domaines_http$sous_domaines_https # echo "${sous_domaines_both}" # ========================================================== # Lecture des domaines, translation domaine --> ip et ping pour vérifier l'état du domaine while read -r line do echo "[*] IP liée(s) $line : " host="host $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'" # regex pour identifier les IP R_host=$(eval $host) while read -r ip do if [ -n "$ip" ] # Test de la présence d'IP lors de l'appel à host then ping="ping -c 2 $1 | grep bytes\ from" R_ping=$(eval $ping) echo -n "- $ip " if [[ -n "$R_ping" ]] then echo -en "\e[92m [ONLINE]\e[0m" # Si réponse au ping, on affiche online else echo -en "\e[91m [OFFLINE]\e[0m" # Si aucune réponse, on affiche offline fi echo "" else echo "aucune(s) IP trouvée(s)" fi done <<< "$R_host" #lecture de la variable ligne/ligne echo "" done <<< "$sous_domaines_both" # Lecture de la variable ligne/ligne
Commentaire