Script FreeIP

S

shadeghost

Grünschnabel
Hallo zusammen,

Ich möchte ein shell-script schreiben, welches mir in einem IP-Bereich alle IP-Adressen checkt, ob sie erreichbar sind. Das ganze soll in eine Datei geschrieben werden und später im Browser mit html angezeigt werden. Je nachdem ob der Host erreichbar ist oder nicht, wird die Shell-Ausgabe im HTML grün oder rot angezeigt.

Ich habe ein bisschen rum probiert. Mir fehlt es aber an dem nötigen Know-How:

#!/bin/bash

# Script zum Prüfen welche IPs im Netz gebraucht werden und elche frei sind
# Autor: Remo Fritschi

echo "<html><head></head><body>" > FreeIP_Auswertung.html

for ((zahl=1;zahl<10;zahl++)) do
ping -c 1 -t 3 192.168.1.$zahl | grep "packet loss" > FreeIP_temp
export wert="cat FreeIP_temp"

if [ $wert = "1 packets transmitted, 0 packets received, 100% packet loss" ]; then
echo "<font color='green'>192.168.1.$zahl: is free</font><br>" >> FreeIP_Auswertung.html
else
echo "<font color='red'>192.168.1.$zahl: blocked</font><br>" >> FreeIP_Auswertung.html
fi
echo "" >> FreeIP_Auswertung.txt
done

echo "</body></html>" >> FreeIP_Auswertung.html

Bei diesem Script funktioniert die If-Abfrage nicht korrekt. Wie kann ich das Ping-Ergebnis eleganter ermitteln, damit ich es im If vergleichen kann? Ist es möglich das der Ping-Befehl nur true oder false ausgibt?
Ich denke da so an awk oder sed...
Könnt ihr mir weiterhelfen?

Vielen Dank zum voraus!
 
Hallo

Nur ein paar Tipps.
Du kannst mit ping auf den Returnwert testen.
$?= 0 -> erfolgreich
$? >0 Fehler
Damit sparst du dir das grep
Code:
ping -c1 -q $IP 2>& 1>/dev/null;
WERT=$?;

if [ $WERT -eq 0 ];
then
echo "$IP erfolgreich";
else
...
fi

Um die Ausgabe eines Command in eine Var zu speichern:
Code:
C=$(COMMAND);
# oder veraltet mit Backtick
C=`COMMAND`

Gruß Wolfgang
 
Das geht:

Code:
#!/bin/bash

HTML_FILE="./FreeIP_Auswertung.html"

echo "<html><head></head><body>" > ${HTML_FILE}

i=1
while [ ${i} -le 255 ]
do
	IP="10.0.0.$i"
	echo $IP
	RETURN=$(ping -c 1 -t 3 ${IP} > /dev/null; echo $?)
	if [ ${RETURN} = 1 ]
	then
		echo "<font color='green'>${IP}: is free</font><br>" >> ${HTML_FILE}
	else
		echo "<font color='red'>${IP}: blocked</font><br>" >> ${HTML_FILE}
	fi
	i=$(expr ${i} + 1)
done

echo "</body></html>" >> ${HTML_FILE}
 
Zuletzt bearbeitet:
Vielen Dank für eure schnelle Hilfe!
Ich habs nun mit folgendem Script hinbekommen:
Code:
#!/bin/bash

echo "<html><head></head><body>" > FreeIP_Auswertung.html;

for ((zahl=1;zahl<255;zahl++)) do
        ping -c1 -t3 -q 192.168.1.$zahl 2>& 1>/dev/null;
        WERT=$?;
        if [ $WERT -eq 0 ]; then
                echo "<font color='red'>192.168.1.$zahl: is blocked</font><br>" >> FreeIP_Auswertung.html
        else
                echo "<font color='green'>192.168.1.$zahl: is free</font><br>" >> FreeIP_Auswertung.html
        fi
done

echo "</body></html>" >> FreeIP_Auswertung.html
 
dauert das nicht etwas zu lange? nur ne idee aber wie wär es so?
Code:
#!/bin/bash

echo "<html><head></head><body>" > FreeIP_Auswertung.html

nmap -sP 192.168.0.1-255 | grep "appears" | awk '{print $2}' | while read line ;do
echo "<font color='red'>$line: is blocked</font><br>" >> FreeIP_Auswertung.html

done
echo "</body></html>" >> FreeIP_Auswertung.html
 
Zuletzt bearbeitet:
Hab letztens auch so en nettes Script geschrieben, um zu überprüfen welche PC's online sind. An dem siehste auch, wie langsam so etwas mit Ping ist ^^ Der Vorschlag von Ale-x läuft da wohl schneller.
Code:
#!/bin/bash

for i in $(cat ./iplist)
do
	suc=$(ping $i -c 1 -q -w 1 | grep received | cut -d " " -f4)
	if [ "$suc" = "1" ]
		then
		echo -e "$i		[\033[1;32monline\033[1;0m]"
		:
	else
		echo -e "$i		[\033[1;31moffline\033[1;0m]"
	fi
done
 

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

CentOS 5.8 –SQL Abfrage– HTML wird generiert und daraus müssen mehrere Mails versendet werden

Queue für copy Script

Gnome Classic Desktop: Home-Inhalt Icons ausblenden

Shell if-Abfrage mit equal or greater wirft Fehlermeldung unary operator expected

Zurück
Oben