Résultats script bash

Fermé
kanshot Messages postés 1 Date d'inscription mercredi 25 septembre 2013 Statut Membre Dernière intervention 25 septembre 2013 - 25 sept. 2013 à 22:35
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 27 sept. 2013 à 00:09
Bonjour, je suis débutant en bash et on me demande de réaliser un bash qui doit récupérer les sous domaines d' un site web ainsi que de réaliser un ping sur chaque sous domaines.
Mon script ne fonctionne pas complétement car il retourne des off pour les premiers résultats puis il retourne bien les sous domaines avec les pings.
Merci d'avance pour votre aide
voici mon script :

#!/bin/sh

echo -n "entrer le domaine:"
read dom
set $dom

echo "sous dommaine appartenant a" $dom


wget -q $dom

dom2="$(echo $dom | sed 's/www\.//')" $dom

cat index.html | grep -o "[a-z][a-z]*\."$dom2 | sort -u > domains.txt # recup toutes les @ qui se termine par des lettre . $dom2 dans le txt
cat domains.txt #affiche le resultat
rm index.html #supp index.html

# Ping des sous domaines

for i in $(cat domains.txt)
do
echo "test du domaine " $i >>domains.txt
for j in $(host $i | grep -o "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*")
do
echo -n "ping $j " >>domains.txt
if [ "$(ping -c1 $j | grep '100% packet loss')" == "" ]
then
echo on >>domains.txt

else
echo off
fi

done
done
cat domains.txt



1 réponse

mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
27 sept. 2013 à 00:09
Personnellement j'aurais écrit un truc dans ce genre (en supposant que l'on cherche google.fr dans le fichier index.html), ici dans un shell :

for domain in $(grep -o "[a-zA-Z0-9]*\.google\.fr" index.html  | sort | uniq); do (ping -c2 $domain | grep -q " 0\% packet loss" || echo "$domain is unreachable"); done

... ou dans un script dans ce genre :

#!/bin/bash

# Example:
# $1 = "www.google.fr"
# url = "google\.fr"
# $2 = page = "index.html"

url=$(echo "$1" | sed -e "s/\./\\\\./g")
page=$2

pattern=$(echo $url | sed -e "s/[^.]*\.\(.*\)/\1/" | sed -e "s/\./\\\\./g")

for domain in $(grep -o "$pattern" "$page" | sort | uniq)
do
ping -c2 $domain | grep -q " 0\% packet loss" || echo "$domain is unreachable"
done

exit 0

Bonne chance
1