PDA

Bekijk de volledige versie : HowTo Online/Offline Ping.sh Netzwerkstatus Shell-Script + WebGui



WLAN-Fan
18-02-2008, 16:43
Hi,

so wieder ein Projekt was ich angehen möchte. :-)
Um was gehte es?

Anwendung:
Ermitteln ob ein Rechner oder ein anderes Netzwerkgerät erreichbar (online) ist oder nicht (offliner). Zum Beispiel ist der Netzwwerkdrucker eingeschaltet oder haben die Kidis den PC noch an usw. Das muß jeder dann für sich festlegen :cool: .

Funktionsweise:
Das ping.sh Shell-Script "pingt" z.B. 10 LAN-Geräte im Netzwerk an.
Es macht immer z.B. 4 Pings und schreibt nach 4 Pings das Ergebnis als Prozentwert (0%, 25%, 50%, 100% Verluste) in eine ping.txt Datei für jede IP.
So könnte die ping.txt Datei dann aussehen:

192.168.0.1 0%
192.168.0.50 25%
192.168.0.200 50%
192.168.0.201 50%
192.168.0.202 0%
Ein zweites status.sh Shell-Script liest die Daten für jede IP aus der ping.txt.
Und generiert eine status.html oder eine status.asp oder eine status.php.
Für jede IP eine Zeile und dahinter dann einen farbigen Punkt:
IP: 192.168.0.1 0% Verlust == grüne Punkt (Router)
IP: 192.168.0.50 25% Verlust == gelbe Punkt
IP: 192.168.0.200 50% Verlust == orange Punkt (LAN-Camera)
IP: 192.168.0.201 100% Verlust == rote Punkt (Netzwerkdrucker)
IP: 192.168.0.202 0% Verlust == grüne Punkt (Router)

Frage:
Was passiert wenn gerade das ping.sh in die Datei schreibt
und
das status.sh die html generieren will?

Was passiert wenn ein Netzwerkgerät folgende Antwort bringt:

z.B. bei “Antwort von 192.168.1.1: Zielhost nicht erreichbar”

Ansatz:
In Forum hier habe ich in diesem Thread Utility to check if In ternet is OK (http://www.wl500g.info/showthread.php?t=1459&highlight=ping.sh) folgendes gefunden, was als Ansatz sicher verwendbar ist:
ping.sh
#!/bin/sh
# ping script
#
# '#' -> testurl reachable
# '@' -> testurl not reachable, url is reachable
# '-' -> neither testurl, nor url is reachable
#
# testurl is a server from which you want to determine reachablility
testurl="www.hetnet.nl"
# url is a server located in your ISP domain and serves as a connection check
url="www.planet.nl"
# create file containing date
filename=`date +/tmp/ping/ping%m%d`
minute=`date +%M`
# start each hour on a new line
if [ $minute -eq 0 ]
then
echo >> $filename;
echo -n `date +%H:%M` >> $filename;
fi
if ping -c 2 $testurl
then
echo -n '#' >>$filename;
else
if ping -c 2 $url
then
echo -n '@' >>$filename;
else
echo -n '-' >>$filename;
fi
fi

gen_ping.awk
BEGIN
{i=0;
}
{
pingname=$1;
i++;
}
END {
n=i;
print "Content-type: text/html";
print "<HTML>";
print "<title>Ping statistics</title>";
print "<body bgcolor=\"#aaaaee\">";
print "<h1>Ping statistics </h1>";
print "<p>Choose date for statistics:";
print "<p><FORM ACTION = \"ping.cgi\"";
print "METHOD = GET> <SELECT NAME=day >";
for (i=0; i<n; i++)
print "<Option> " pingname[i] ;
print "</SELECT>";
print "<INPUT TYPE=SUBMIT value=\"Show\" >";
print "</FORM>";
print "</HTML>";
print "<p>";
print "<font color=\"blue\" size=\"2\">";
print "Ping statistics (c) 2004 by SOdB";
print "</font>";
}
[I]ping.cgi
#!/bin/sh
# cgi script to generate HTML page for ping statistics
#
AWK="/tmp/harddisk/busybox awk"
ls -1 /tmp/ping/ping* | grep ping[0-9][0-9][0-9][0-9] | $AWK -f gen_ping.awk


Warum heisst die Datei *.awk? Hat das eine Besondere Bedeutung unter Linux?

Vorschläge:
Wie würdet ihr das Shell-Script erweitern / ändern um das umzusetzten?

Gruß WLAN-Fan.

PS:
Es gibt auch große Netzwerk und Server Status Projekte:
Nagios:
Wächter der Netze - Überwachung mit Nagios (http://www.linux-professionell.net/praxis/article20070519001.aspx)
WikiPedia - Nagios (http://de.wikipedia.org/wiki/Nagios)
Nagios-Wiki (deutsch) (http://www.nagios-wiki.de/nagios/doku/start)

Zabbix:
Zabbix.com (http://www.zabbix.com/screenshots_11_maps.php)
Installing ZABBIX on Asus Wl-500gd and other mipsel HW (http://www.zabbix.com/doku/doku.php?id=contrib:installmipsel)
Open Source Server Monitoring Server- und Client-Überwachung mit Zabbix 1.4.2 (http://www.tecchannel.de/server/linux/1737808/index2.html)
Server- und Client-Überwachung mit Zabbix 1.4.2, Teil 2: Frontend (http://www.tecchannel.de/server/linux/1737818/)

WLAN-Fan
18-02-2008, 17:37
Hi,

habe noch das Programm fping gefunden eventeull ist das sogar besser geeigne:
Quelle: http://linuxwiki.de/fping

Fping kann verwendet werden, um eine Liste von Hosts oder ein Netz anzupingen. Beispiele:

fping 172.16.1.4 172.16.1.2 (Die Liste kann auch von einer Datei kommen.)
fping -c 1 -g 172.16.1.0/24 (Hier braucht man den Count!)
Der Output geht auf Standard-Error. Um ihn auszuwerten, kann man z.B. so vorgehen:

fping -c 1 -g 72.16.1.0/24 2> /tmp/fping

cat /tmp/fping | grep alive
Damit bekommt man alle Rechner im Netz, die auf Ping antworten.

Gruß WLAN-Fan.