Shell Skript für Netzwerdurchlauf

M

moped

Grünschnabel
Hallo,
ich bin Praktikant und habe von meinem Chef folgende Aufgabe bekomen:
Wir haben ein LAN im Büro und einen Server, der die Verbindung ins Internet herstellt. Dieser DHCP Server ist zeitgesteuert, d.h. er läuft von morgens 7 bis abends 19.00 Uhr.

Mein Aufgabe ist es ein Skript zu schreiben, dass alle Hosts nacheinander pinged und wenn niemand mehr online ist automatisch den Server herunterfährt.

Ich selber habe leider keine Ahnung wie das geht. Es muss nur irgendwie in bash geschrieben sein.

Bitte helft mir. Bis Freitag muss das Skript fertig sein:help:

Danke
 
Und Du hast überhaupt keine Bash-Erfahrung? Warum sollte sowas ein Chef von Dir verlangen, wenn Du Dich da garnicht auskennst? Bei der Bewerbung geflunkert? ;)

Egal, DU könntest Dir http://www.selflinux.org/selflinux/html/bash_basic.html durchlesen, speziell die Themen if, for sowie Rückgabewert eines Prozesses. Wenn Du dann noch Fragen hast, stell sie ruhig. Ich will Dir nicht sofort ein fertiges Skript bauen, schliesslich sollst Du was dabei lernen :)

Und bis Freitag ist noch etwas Zeit...

Gruss, Xanti
 
Hi,
danke Xanti für deine schnelle Antwort.
Leider konnte ich in deinem Link nirgends etwas von Bedingungen (if then) lesen.
Könnntest du mir also bitte das fertige Skript hier posten.
Ich wäre dir überdankbar..................Biddddddddddddde:hilfe2:
 
moped schrieb:
Hi,
danke Xanti für deine schnelle Antwort.
Leider konnte ich in deinem Link nirgends etwas von Bedingungen (if then) lesen.
Könnntest du mir also bitte das fertige Skript hier posten.
Ich wäre dir überdankbar..................Biddddddddddddde:hilfe2:
Hallo

Wir sind hier keine Scriptfabrik!
Also bemüh dich bitte erstmal selbst.
Zu if then else in der bash findest du jede Menge unter man bash
Vom groben Überfliegen hat das noch niemand richtig gelernt.
Hier noch ein Link wo du mit der Nase darauf stößt.

Schau dir auch nochmal die Rückgabewerte von ping und dessen Optionen an.

Gruß Wolfgang
PS Bei konkreten Problemen helfen wir gerne weiter.
 
google.de
+ (suchbegriff) bash if
--------------
http://www.tuxhausen.de/kurs_bash_prog.html
===================================

vllt. hilft dir das ja weiter und xanti muß es dir doch nicht fertig machen.
hat nämlich recht,... lern-effekt is so am größten...
 
Sorry, falscher Link. Schau Dir mal http://www.linux-services.org/shell/ an.

Fertiges Skript gibts erstmal nicht. Schliesslich sind wir keine Skriptfabrik. :D
Ausserdem wäre Dir damit nicht geholfen. Was ist, wenn Dein Chef das Skript erklärt haben will oder Dich sofort mit der nächsten Skript-Aufgabe betraut.

Gruss, Xanti
 
sobald alle Rechner eine IP Adresse haben und nicht mehr neugestartet werden, muss der DHCP Server nicht mehr laufen, er kann dann auch einfach so beendet werden.
Die PC´s behalten dann trotzdem ihre IP
 
naja könnte ja sein das die kisten mal neugestartet werden. Weiß man ja nicht. Aber das ganze Script besteht am ende ja aus maximal 2 schleifen.
 
moped schrieb:
... Wir haben ein LAN im Büro und einen Server, der die Verbindung ins Internet herstellt. Dieser DHCP Server ist zeitgesteuert, d.h. er läuft von morgens 7 bis abends 19.00 Uhr.

Mein Aufgabe ist es ein Skript zu schreiben, dass alle Hosts nacheinander pinged und wenn niemand mehr online ist automatisch den Server herunterfährt. ...

duerfte wohl darum gehen, nicht um die ips. :oldman
 
Das geht mit einer Schleife.
Ganz grobe Vorgehensweise als Tipp zur Selbsthilfe. ;)
  1. IP Pool holen
  2. Ping absetzen
  3. Wenn erfolgreich Flag-Variable setzen und raus
  4. Am Ende Flagvariable testen und entsprechend runterfahren

Gruß Wolfgang
 
Danke Wolfgang für deine "grobe" Anleitung.

Ich habe mal angefangen zu coden, jedoch funktioniert es nicht so ganz.

Mein Anfang sieht schon mal gut aus :))

#!/bin/sh

Weiter bin ich bis jetzt nicht gekommen.........

Außerdem habe ich das PRoblem, dass ich das Skript unter Windows schreiben muss, es aber später unter Linux läuft.

Erklärt es mir bitte schrittweise, wie ich vorgehenm muss (Editor, Prog zum Audführen,etc.)


Danke:brav:
 
moped schrieb:
Danke Wolfgang für deine "grobe" Anleitung.

Ich habe mal angefangen zu coden, jedoch funktioniert es nicht so ganz.

Mein Anfang sieht schon mal gut aus :))

#!/bin/sh

Weiter bin ich bis jetzt nicht gekommen.........

Hmm, weit ist das wirklich nicht. Egal.

moped schrieb:
Außerdem habe ich das PRoblem, dass ich das Skript unter Windows schreiben muss, es aber später unter Linux läuft.

Erklärt es mir bitte schrittweise, wie ich vorgehenm muss (Editor, Prog zum Audführen,etc.)

Wenn Du unter Windows editierst, brauchst Du ja keinen Editor-Vorschlag. Du musst beim Übertragen auf den Linux-Rechner beachten, dass Windows die Zeilen mit carriage return + line feed umbricht, Linux dagegen nur mit carriage return. Also dieses line feed muss raus. Dies passiert automatisch, wenn Du z.B. beim ftp den ASCII-Mode aktivierst.

Bez. Programm zum Ausführen: Shell-Skripte benötigen zum Ausführen eine Shell. Welche, gibst Du in der shebang (#!/bin/sh) an. Weiterhin solltest Du (auf dem linux-Rechner in der Konsole) man chmod eingeben und dies durchlesen.

Zum Schluss gibts noch ein Code-Schnipsel, der eventuell hilft:

Code:
ip=123.456.789.0
if ping -c 1 -t 100 ip;then
  echo $ip antwortet nicht
else
  echo $ip antwortet
fi

Damit's nicht zu einfach wird, habe ich einige Fehler eingebaut. Viel Spass beim Suchen ;)
 
Zuletzt bearbeitet:
also, das is ganz einfach:
1. morgens zur arbeit gehen (ich gehe davon aus, dass du das mit dem aufstehen drauf hast ;))
2. audienz beim cheffe erbetteln
3. die worte "cheffe, ich kanns nicht, bitte erklärs mir" in richtung cheffe sprechen
4. weiteres vorgehen von cheffe abwarten und ggf. seinen anweisungen folge leisten.

;)

edit: nein, xanti war schneller ^^
 
Danke Xanti für deine Aantwort.

Also die Theorie ist mir jetzt klar.

Das Programm musss folgende Punkte abarbeiten:

1. IP von Rechnern pingen (IP mit Endung 1-254, in einer Endlosschleife)

2.Variable einführen, die angibt wie viele PCs geantwortet haben.

3.Bedingung einführen, if variable=0 nach 2 Durchgängen, Befehl shutdown zum Server

Das ist mir alles klar.,

Die Schwieriggkeit besteht darin, dies in Programmiersprache zu übersetzen.

Ich bemühe mich ja....

Also fangen wir mal mit Punkt 1 an.

Wie programmier ich das er alle IPs von 1-254 pinged, und das in einer Endlosschleife?

Ich hoffe auf sinnvolle antworten.
 
zu 2.: Da es eine 0-1-Beziehung ist, musst Du nicht die Anzahl der antworteten Rechner ermitteln. Es reicht, wenn Du eine Variable nutzt (initialisiert mit 0), die im Fall, dass irgendein Rechner antwortet, auf 1 gesetzt wird.

Eine Endlosschleife:

Code:
while true; do
 bla
done

Die ips kann man mit seq erzeugen. Dieses nutze ich selber nicht, da es (bei mir) erst installiert werden muss ;)

Womöglich eher verbreitet ist printf:

Code:
net=123.456.789
i=0
while [ $((++i)) -le 254 ]; do
  ip=$net.$(printf '%03d' $i)
done

edit: Eine Endlosschleife ist nicht ratsam. Günstiger wäre es, das Skript per cron in regelmässigen Abständen aufzurufen.
 
Zuletzt bearbeitet:
Also von einer endlosschleife würde ich auch abraten, da du damit unnötig traffic generierst den dein cheff sicherlich nicht komisch finden wird :devil:
ein cron-job ist da wirklich die beste lösung ... in welchen abständen .... mhhh wäre am besten zu testen ;) und muss es wirklich 1-254 sein? kuck mal beim dhcp ob er wirklich der gesammte bereich eingestellt ist ... eigentlich konfiguriert man einen dhcp ip-range mit so vielen wie man benötigt und nicht gleich die gesammte range, da ja die server eine feste ip haben sollten und wenn der dhcp die auch noch an nen client vergiebt autsch sag ich dann nur ;)
PS.: wenn du 1-254 durchscannst und der server(der ja runtergefahren werden soll) ja warscheinlich mit in der range is dann kanste dir die pingerei auch gleich spaaren *fg*
 
Zuletzt bearbeitet:
geil :)

ich verfolg den beitrag mal, ich liebe praktikanten *g*

sag deinem chef, er soll die ne shell geben auf der du testen kannst, bis auf den shutdown-befehl kannst du ja alles in dein script einbauen, ist doch echt nichts großes.
 
naja, zur not wenn er wirklich inner windows-kiste arbeitet und das dort erstellt,.. kann er da auch mit cygwin testen ;-)
 
Zurück
Oben