Prüfen ob Netzwerk "steht"

T

Treito

Grünschnabel
Hallo,

ich hab da eigentlich ein ziemlich "simples" Problem, etwas schwer zu beschreiben.

Ich habe 2 PC's, die per Crossover-Kabel verbunden sind.
Rechner 1 liest Daten von Rechner 2 per wget.
Nun ist Rechner 2 nicht zwingend eingeschaltet, wenn Rechner 1 läuft. Solange Rechner 2 deaktiviert ist, bekommt Rechner 1 keine IP zugewiesen und "wget" braucht einfach zu lange zum abfragen.
Würgaround ist zwar einen Switch dazwischen zu schalten, da so das Netzwerkkabel gesteckt ist, aber ich würde lieber per Script abfragen, ob das Netzwerk steht.
Wie müsste ich da vorgehen?

Gruß,

Sven
 
Hallo

Entweder zu prüfst mit ping ADDRESSE ob die andere Kiste erreichbar ist, oder du wertest ifconfig aus ... oder ... oder

Gruß Wolfgang
 
.. oder oder oder du prüfst via mii-tool, ob die netzwerkkarte einen link hat... oder oder oder :)
 
Hallo,

danke erst einmal für die Antworten.
Ich bin aber noch nicht so fit in der Shell-Programmierung.
Ich bräuchte eine Prüfroutine (If-Anweisung), die auch möglichst fix geht.
Rechner 1 ist ein Multimedia-PC mit mythtv. Gleichzeitig ist er NFS-Server. Für den habe ich Skripte und kleine C++-Programme, dass er sich alleine ein- und ausschaltet.
Rechner 2 verbindet sich mit Rechner 1, mountet das NFS-Verzeichnis (NFS-Client) und speichert dann auf Rechner 1 eine Timerliste ab, damit Rechner 1 weiß, wann sich Rechner 2 einschaltet.
Rechner 1 fragt dann per Webinterface des Rechners 2 ab, ob er runterfahren darf. Dies geschieht per wget. Bloß ist Rechner 2 ausgeschaltet braucht wget viel zu lange @timeout.
Daher bräuchte ich im Skript eine If-Anweisung, die wget nur dann aufruft, wenn das Netzwerk "steht".
Wie setze ich sowas um?

Gruß,

Sven
 
So sollte es gehen:
Code:
if [ "$(mii-tool | grep eth0: | cut -c50-)" == "ok" ]; then
   echo "Verbindung besteht";
else
   echo "nix is";
fi
 
Danke sim, so ähnlich werde ich es versuchen, den cut-Befehl kannte ich zum Beispiel nicht. Aber ich denke, ich nehme dann ifconfig als Grundlage.
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Hmm, dieses mii-tool habe ich nicht (openSUSE 11.0).
ethtool erfordert root-Rechte, ifconfig lässt sich nicht so schön auswerten. Gibts noch Alternativen? Ansonsten Tendenz ethtool in die sudoers schmeissen, aber würde ich ungern machen,
 
Zuletzt bearbeitet:
Ja aber ping braucht Zeit, das Skript sollte aber möglichst schnell ausgeführt werden.
 
Ping kennt die Option Timeout.

Und minimal eine Sekunde sollte schon realistisch sein.
 
Hat ping denn irgendwelche Rückgabewerte? So der Aufbau von sim4000 ist rel. einfach mit der Auswertung, das könnte man bei ethtool quasi übernehmen. ping allerdings gibt ja mehrere Zeilen aus, das müsste man dann in eine Datei umleiten und die Datei dann auslesen, oder sehe ich das falsch?
 
nein, ich denke, dass Ping ein Rückgabewert hat. Also true oder false.
Somit sollte ein
Code:
if ping == true
    blaaa
else 
    blaaaa
end
gehen.


ciao
 
Aber sicher hat ping einen Rückgabewert ( $? -ne 0 );
Code:
$ ping -w1 -c1 -q wwww.google.com>/dev/null 2>/dev/null && echo ok||echo not ok
not ok
$ ping -w1 -c1 -q www.google.com>/dev/null 2>/dev/null && echo ok||echo not ok
ok

Der Rest ist einfach
 
Ok, in bash bekomme ich die Abfrage nicht hin, aber die bräuchte ich eh in einem C++-Programm.
Danke für die Hilfe!
 
Öhm weil die Abfrage an sich ja in shell ist und ich auch gerne wissen würde, wie man sowas in Shell programmiert, dann könnte ich ggf. die C++-Programme durch Scripte ersetzen.

Nachtrag:
Was ist hier nun falsch?

Code:
#!/bin/bash
if [ "$(ping -c 1 -w 1 192.168.3.50)" ]; then
   echo "Verbindung besteht";
else
   echo "nix is";
fi
 
Zuletzt bearbeitet:
Dann versteh ich aber das nicht.
Ok, in bash bekomme ich die Abfrage nicht hin


Code:
ping -w1 -c1 -q <DESTINATION> >/dev/null 2>/dev/null
ERROR=$?

if [ $ERROR -eq 0 ]; then
echo "alles ok Netz vorhanden";
...
else
echo "Kein Netz"
...
fi

Wo ist das Problöem?

ifconfig -a zu filtern ist auch nicht die Magie.

Du kannst dir aber auch den Quellcode von ping ansehen und brauchbare Fragmente verwenden.

Wolfgang
 
Wo das Problem ist? Den Rückgabewert einer Variablen zuzuweisen und Vergleichsoperationen bei der if-Anweisung. (-eq kannte ich nicht). Bin halt Newbie @Shell-Programmierung.
Ich frage jetzt mal OT, gibts eine gute Online-Lektüre zur Shell-Programmierung?

ifconfig -a filtern? Wie soll das nun wieder gehen? Das Problem ist, dass das mehrere Zeilen ausspuckt und ein "grep eth0" mir eine Zeile zu wenig ausspuckt, interessant wäre da allerdings die folgende Zeile.

Nachtrag: Juhu, hab eine Übersicht gefunden, nun gehts:

Code:
#!/bin/bash
if ping -c 1 -w 1 192.168.3.35
then
   echo "Verbindung besteht";
else
   echo "nix is";
fi
 
Zuletzt bearbeitet:

Ähnliche Themen

opensuse11 kabelgebundenes netzwerk geht aber lädt keine seiten

[HowTo] TeamSpeak 2 - RC2 - Server (Deutsch/Englisch)

Zurück
Oben