Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...
Gehen Sie zu Seite 1, 2  Weiter
 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Software
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Ray
Gast





BeitragVerfasst am: 28. Nov 2002 19:40   Titel: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

Hallo Leute,

da man an meinem Router (Netgear RP 614) an den LEDs nicht erkennen kann, ob er noch online ist, möchte ich für mein SuSE 8.1 ein ähnliches Tool wie routercontrol für Windows, um den augenblicklichen Modus (Off- oder Online) festzustellen.
Gibt es soetwas auch für Linux?

Danke für Euer Feedback!

Ciao
Ray
 

ratte
Gast





BeitragVerfasst am: 28. Nov 2002 21:08   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

ich habe auch einen netgear, aelteres modell.

dem kann man sagen, dass der die (Routing Information Protocol, RFC1058 and RFC 1389) RIP Direction auf Both (default) setzt. damit hast du alle 30 sec. RIP-infos auf der NIC, die an dem router angeschlossen ist.
mit tcpdump kann man sich dass ansehen, und wenn der router offline ist, steht da 0.0.0.0 ansonsten eine andere IP.
-> das kann man vielleicht rausgreppen und mit ledblink zusammen auf dem linux rechner entsprechend blinken lassen.

alternativ kann man vielleicht auch bei dir die seite per script holen:

wget --http-user=<name> --http-passwd=<spasswort> http://<ip>/<page>

und das mit

lynx -force_html -dump <page> > /tmp/file als ASCII text pumpen und parsen.

n bisserl scripten (des admins liebste taetigkeit neben quake3) musste schon selbst.

ratte
 

ratte
Gast





BeitragVerfasst am: 29. Nov 2002 2:00   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

es hat mir doch keine ruhe gelassen.

ich habe also ein script entwickelt, das die online-tatsache ueberprueft.

features:

-kann in boot-up startscripten oder in der $HOME/.bash_login automatisch aufgerufen werden.

-onlinestatus: scroll taste ist an

-ofllinestatus: scroll taste ist aus

-scroll-led ueber alle 8 consolen mit/ohne licht an und ohne scroll-funktion (!)

der online/offline-status wird geprueft, indem vom netgear-router die info-seite ueber Wlan und LLan aufgerufen wird. bei meinem geraet wird als erstes die Wlan IP, di. die oeffentliche IP, also die, die man durch die einwahl beim ISP bekommen hat, ausgegeben. darauf basiert das script.
ist der download nicht erfolgreich, wird automatisch offline-status angenommen, zb. wenn die NIC zum router runtergefahren wird oder andere gruende die verbindung zum router bzw. das downloaden der seite verhindern.

eingebaut ist ein timeout von einer minute zwischen den downloads.

und hier ist das script:

code:

#!/bin/sh
#
# script for bootup or $HOME/.bash_login scripts,
# to automagically highlight the scroll led over
# all 8 ttys if we are online with our netgear-
# router, else downlight them.
#
# STATIC keeps the script running, simulating it
# as a deamon (is listed at ps).
# TEMPFILE is needed to pass information and
# automatically deleted. If powerdown or else,
# del /tmp/*file
# ROUTER, USER, PASS and PAGE are netgear dependend
# information.
# ! important ! don't screw up lines of the code,
# because it breaks the logic.
#
# has to be started with & to put it into background,
# else it blocks the console

STATIC="/bin/sh"
TEMPFILE=/tmp/$$file
ROUTER=<netgear-ip>
USER="<netgear-user>"
PASS="<netgear-password>"
PAGE=<netgears webpage we need>

while [ -e $STATIC ]; do
/usr/bin/wget -q --output-document=$TEMPFILE \
--http-user=$USER --http-passwd=$PASS --tries=2 \
http://$ROUTER/$PAGE && \
/usr/bin/lynx -force_html -dump $TEMPFILE | \
grep -a -B 1 -m 1 "IP A" | grep -v 0.0.0.0 1>/dev/null 2>&1
if [ $? == 0 ]
then INITTY=/dev/tty[1-8]
for tty in $INITTY; do
/usr/bin/setleds -L +scroll < $tty
done
elif [ $? == 1 ]
then INITTY=/dev/tty[1-8]
for tty in $INITTY; do
/usr/bin/setleds -L -scroll < $tty
done
fi
/bin/rm $TEMPFILE
/bin/sleep 1m
done




den code in ein file pumpen, die <platzhalter> mit echten informationen ersetzen, mit `chmod +x` ausfuehrbar machen und im gewuenschten script mit

scriptname &

einplegen.

um sicherzugehen, dass das scroll-led wieder ausgeschaltet wird, wenn linux runtergefahren wird, kann man zb. folgendes in bootdown script unterbringen:

# aktuelle ip aus
INITTY=/dev/tty[1-8]
for tty in $INITTY; do
/usr/bin/setleds -L -scroll < $tty
done


ratte
 

Ray
Gast





BeitragVerfasst am: 29. Nov 2002 10:12   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

WOW! Vielen Dank! Werde das Ganze gleich mal ausprobieren ...

Ciao
Ray
 

ratte
Gast





BeitragVerfasst am: 29. Nov 2002 14:39   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

dummerweise ist mir da ein fehler passiert.

grep -v negiert den match nicht so, wie ich es erwartet habe.

daher kommt hier eine neue version:

code:

#!/bin/sh
#
# script for bootup or $HOME/.bash_login scripts,
# to automagically highlight the scroll led over
# all 8 ttys if we are online with our netgear-
# router, elso downlight them.
#
# STATIC keeps the script running, simulating it
# as a deamon (is listed at ps).
# TEMPFILE is needed to pass information and
# automatically deleted. If powerdown or else,
# del /tmp/*file
# ROUTER, USER, PASS and PAGE are netgear dependend
# information.
#
# this script runs endless, therefore it must be killed
# to stop it.


# user config

STATIC="/bin/sh"
TEMPFILE=/tmp/$$file
ROUTER=<netgear-ip>
USER="<netgear-user>"
PASS="<netgear-spasswort>"
PAGE=<netgear-page>
SLEEPER=1m

# no need to make changes from here on

# subfunctions

online ()
{
INITTY=/dev/tty[1-8]
for tty in $INITTY; do
/usr/bin/setleds -L +scroll < $tty
done
}

offline ()
{
INITTY=/dev/tty[1-8]
for tty in $INITTY; do
/usr/bin/setleds -L -scroll < $tty
done

}

# main

while [ -e $STATIC ]; do

sleep $SLEEPER

offline
/usr/bin/wget -q --output-document=$TEMPFILE \
--http-user=$USER --http-passwd=$PASS --tries=3 \
http://$ROUTER/$PAGE || continue

/usr/bin/lynx -force_html -dump $TEMPFILE | \
grep -a -B 1 -m 1 "IP A" | grep 0.0.0.0 1>/dev/null 2>&1
if [ $? = 0 ]; then
offline
else
online
fi

rm $TEMPFILE
done

 

Jochen
Gast





BeitragVerfasst am: 29. Nov 2002 14:47   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

@ratte: Ein "grep 0.0.0.0" sucht nach einer Zeichenkette, aus 4 Nullen mit beliebigen Zeichen dazwischen besteht. Das könnte auch der Grund für Dein Problem mit dem -v gewesen sein. Mach besser ein
grep '0\.0\.0\.0'
So gilt dann tatsächlich nur "0.0.0.0" als Treffer.

Jochen
 

ratte
Gast





BeitragVerfasst am: 29. Nov 2002 15:41   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

wohl war, jedoch kann da nichts passieren, da keine ip adresse mit fuehrenden nullen notiert wird bzw. das erste byte eine null sein kann.

natuerlich ist das "richtiger" und du hast vollkommen recht, ich aber auch :)

ratte
 

Jochen
Gast





BeitragVerfasst am: 29. Nov 2002 18:27   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

Nu je, Du hast den unbestrittenen Vorteil, den Output des Netgear-Routers zu kennen. Aber was, wenn ab dem nächsten Firmware-Update auch die Zahl übertragener Bytes mit ausgegeben werden? Beispielsweise 20304050 Bytes?

Aber schon OK, ich pack meinen Oberlehrer jetzt auch wieder weg. Ist halt nur defensive Programmierung, weil ich mit der offensiven schon hinreichend schlechte Erfahrungen gemacht habe...

Jochen
 

Jochen
Gast





BeitragVerfasst am: 29. Nov 2002 18:29   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

Nu je, Du hast den unbestrittenen Vorteil, den Output des Netgear-Routers zu kennen. Aber was, wenn ab dem nächsten Firmware-Update auch die Zahl übertragener Bytes mit ausgegeben werden? Beispielsweise 20304050 Bytes?

Aber schon OK, ich pack meinen Oberlehrer jetzt auch wieder weg. Ist halt nur defensive Programmierung, weil ich mit der offensiven schon hinreichend schlechte Erfahrungen gemacht habe...

Jochen
 

ratte
Gast





BeitragVerfasst am: 29. Nov 2002 19:47   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

Mit der http loesung war ich nicht so richtig zufrieden, deshalb habe ich mich an die zweite loesung rangemacht. Schliesslich erzeugt man mit der http loesung zusaetzlichen verkehr auf der leitung und stresst die cpu des routers, der besseres zu tun hat, naemlich zu routen. ausserdem hat die (kurze) praxis gezeigt, dass nicht jeder http-request mit wget von erfolg gekroent ist, warum auch immer.

also das router protokoll untersuchen ist die guenstigere loesung.
die ist uebrigens RFC konform und sprengt auch bei firmware-upgrades die programmlogik nicht, aussser das RIP-1 protokoll wird begraben Sad aber alles ist vergaenglich...

also, die aufgabe war, innerhalb des zeitrahmens von 30 sekunden (und etwas mehr) die routerinformationen aus dem verkehr auf dem interface rauszugreppen.

zeitkritische programmierung in bash, das war eine interessante herausforderung, da man tcpdump nicht sagen kann, horche mal 30 sekunden auf das interface.

das script ist dokumentiert, der interessierte leser kann nachvollziehen, wie ich das geschafft habe.

neuland war auch, aus einer information nicht zeilenweise auszulesen, sondern nur teile der zeile. in perl waere das mit regular expressions ja ein klacks gewesen, in bash musste ich mich an sed mit versuch und irrtum herantasten.
sed-profis koennen ja vielleicht mal kommentieren, wieso das ausschneiden der "actual internal ip" funktioniert und wie man's besser machen kann. rein logisch finde ich naemlich, dass die sed pattern die ip nicht treffen duerften, die praxis zeigte aber, dass sie's tun.

code:

#!/bin/sh

#
# script for bootup or $HOME/.bash_login scripts,
# to automagically highlight the scroll led over
# all 8 ttys if we are online with our netgear-
# router, elso downlight them.
# additionally, the online status is dumped to
# INFOFILE.
#
# STATIC keeps the script running, simulating it
# as a deamon (is listed at ps).
# TEMPFILE is needed to pass information and
# automatically deleted. If powerdown or else,
# del /tmp/onlinefile*
#
# you have to enable RIP with the direction "Both"
# or "Out Only" and the version RIP-1 to match
# against the scripts logic.
# RIP-1 sends router information every 30 seconds.
# a sample tcpdump:
#
# 18:46:06.374316 <netgear-ip>.route > <three bytes net>.255.route:\
# RIPv1-resp [items 2]: {0.0.0.0}(1) {<actual internal ip>}(1) [ttl 1]

STATIC="/bin/sh"
MYTTY=`/usr/bin/tty`
TEMPFILE="/tmp/onlinefile$$"
INFOFILE="/tmp/OnlineStatus"
TAKETIME="/bin/date"
NETWATCH="/usr/sbin/tcpdump"
NETWATCH_OPTION_1="-q -c 1 -p -s0 -i eth1 -n port 520 -w $TEMPFILE"
NETWATCH_OPTION_2="-r $TEMPFILE"
MATCH="port 520"

# subfunctions

online ()
{
INITTY=/dev/tty[1-8]
for tty in $INITTY; do
/usr/bin/setleds -L +scroll < $tty
done
echo online > $INFOFILE
}

offline ()
{
INITTY=/dev/tty[1-8]
for tty in $INITTY; do
/usr/bin/setleds -L -scroll < $tty
done
echo offline > $INFOFILE
}

# simulate deamon

while [ -e $STATIC ]; do

# get start- and endtime in seconds

NOW=`$TAKETIME +%s`
let THEN=$NOW+35

# send tcpdump into background

HIT=`$NETWATCH $NETWATCH_OPTION_1` &

# save tcpdumps PID to kill the process in case

MYPS=`ps ax | grep tcpdump | grep "$MATCH" `
MYPID=`echo $MYPS | sed -n -e "s/ .*//p"`

# time loop to not exceed 35 seconds

while [ $NOW -lt $THEN ]; do

NOW=`$TAKETIME +%s`
done

# in case of, kill tcpdump with no grace

killall -9 $MYPID

# read what we have recieved from tcpdump

HIT=`$NETWATCH $NETWATCH_OPTION_2`

# extract the second ip named "actual internal ip" above

ONLINE=`echo $HIT | sed -n -e "s/^.*{//p"| sed -n -e "s/}.*$//p"`

# test, if we recieved information at all

if [ $ONLINE ]; then

# second ip is 0.0.0.0 if the router is offline

if [ $ONLINE == "0.0.0.0" ]; then
offline
else
online
fi
else
offline
fi
rm $TEMPFILE
done



ratte
 

ratte
Gast





BeitragVerfasst am: 29. Nov 2002 20:47   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

ein kleinigkeit ist noch nachzureichen:

so, wie das script vorliegt, verbratet es zuviel cpu-zeit.

es muessen zwei zusaetzliche zeilen eingefuegt werden:

oben, bei der variablenvereinbarung:

SLEEPER="/bin/sleep"

in der mitte, bei der 35 sekunden zeitschleife in der while schleife eine zeile

$SLEEPER 1s

einfuegen, sodass

NOW=`$TAKETIME +%s`

in der zeile darunter ist.

ratte
 

Jochen
Gast





BeitragVerfasst am: 29. Nov 2002 22:10   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

Wie Du Dir sicher denken konntest, muss ich natürlich wieder eine Meinung dazu haben...

Wenn Du die PID des Hintergrundprozesses brauchst, gibt sie Dir die Shell in der Variablen $!. Und die Warteschleife ist m.E. gänzlich unnötig - warum sagst Du nicht direkt, dass die Shell 30 Sek. warten soll? Dementsprechend wäre meine Lösung so:
code:

HIT=`$NETWATCH $NETWATCH_OPTION_1` &
NETWATCH_PID=$! # Da immer nur die PID des zuletzt in den Hintergrund geschickten Prozesses gemerkt wird
sleep 35
kill $NETWATCH_PID >/dev/null 2>&1 # Nicht mit SIGKILL, tcpdump sollte hinter sich aufräumen dürfen


Ansonsten ein paar Kommentare:

Die Funktionen online() und offline() sind fast gleich, bis auf die Option zu setleds. Da Funktionen aber auch Parameter verstehen, würde ich hier ein bisschen vereinfachen. Nenne die Funktion "leds" und setze als erste Zeile
[ "$1" = "on" ] && SCROLL_OPTION=+scroll && SCROLL_OPTION=-scroll
Und setleds wird dann mit
setleds -L $SCROLL_OPTION <$tty
aufgerufen. Nutzen kannst Du die Funktion dann mit ""leds on" und "leds off".

Ach ja, apropos tty: Es ist deshalb Konvention, Variablennamen in der Shell gross zu schreiben, da UNIX-Programme per Konvention kleingeschriebene Namen haben. So kann man sie gut unterscheiden. Und da es ja auch ein Kommando "tty" gibt, sollte man den Namen hier vielleicht mal ändern.

Das Skript ist schön Bourne-Shell-konform. Wenn Du aber nun mal die bash verwendest, kannst Du auch deren Vorteile nutzen, wie z.B. lokale Variablen in Shellfunktionen (local INITTY=...).

Ein
trap 'rm -f $TEMPFILE; exit 32' 0
sorgt dafür, das Zwischendateien bei Abbruch des Skripts immer gelöscht werden.

Und zum sed sage ich später was, wenn ich nicht ganz so müde bin. Gute Nacht denne!

Jochen
 

rattengift
Gast





BeitragVerfasst am: 29. Nov 2002 23:10   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

> lokale Variablen in Shellfunktionen (local INITTY=...).

eeecht? das geht? werde ich sogleich verwenden (bin auch grade am skript-basteln). danke und gute nacht.
 

ratte
Gast





BeitragVerfasst am: 29. Nov 2002 23:13   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

ja Jochen, auf deine kritik war ich sogar gespannt, vielen dank fuer die lehrstunde.

mit deinen vorschlaegen bin ich einverstanden und habe sie in mein script auch eingepflegt und auch verstanden (wenn auch noch nicht gewusst).

die einfuegung der trap zeile konnte ich jedoch nicht sicherstellen bezueglich des orts (man bash is overwhelmed Smile
gleich nach den variablenvereinbarungen ist ok, oder?

ratte
 

rattengift
Gast





BeitragVerfasst am: 29. Nov 2002 23:47   Titel: Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...

@Jochen:
> [ "$1" = "on" ] && SCROLL_OPTION=+scroll && SCROLL_OPTION=-scroll

muss wohl heissen:
[ "$1" = "on" ] && SCROLL_OPTION=+scroll || SCROLL_OPTION=-scroll

@ratte:
soweit ich mich erinnere bevorzugst du ja die textconsole. aber wie ist das denn unter x/kde, etc mit setleds? was muss man da beachten? was muss ich zusätzlich tun, damit es klappt? ich könnte das für eine ähnliche anwendung auch grade gut gebrauchen.
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Software Alle Zeiten sind GMT + 1 Stunde
Gehen Sie zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy