On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...
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
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
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 <i>ledblink</i> 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
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 <i>ledblink</i> 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
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:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/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
</font><hr></pre></blockquote>
den code in ein file pumpen, die <platzhalter> mit echten informationen ersetzen, mit `chmod +x` ausfuehrbar machen und im gewuenschten script mit
<b>scriptname &</b>
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
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:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/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
</font><hr></pre></blockquote>
den code in ein file pumpen, die <platzhalter> mit echten informationen ersetzen, mit `chmod +x` ausfuehrbar machen und im gewuenschten script mit
<b>scriptname &</b>
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
Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...
WOW! Vielen Dank! Werde das Ganze gleich mal ausprobieren ...
Ciao
Ray
Ciao
Ray
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:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/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
</font><hr></pre></blockquote>
grep -v negiert den match nicht so, wie ich es erwartet habe.
daher kommt hier eine neue version:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/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
</font><hr></pre></blockquote>
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 <pre>grep '0\<!--no-->.0\<!--no-->.0\<!--no-->.0'</pre>So gilt dann tatsächlich nur "0.0.0.0" als Treffer.
Jochen
Jochen
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
natuerlich ist das "richtiger" und du hast vollkommen recht, ich aber auch
ratte
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? <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Aber schon OK, ich pack meinen Oberlehrer jetzt auch wieder weg. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> Ist halt nur defensive Programmierung, weil ich mit der offensiven schon hinreichend schlechte Erfahrungen gemacht habe...
Jochen
Aber schon OK, ich pack meinen Oberlehrer jetzt auch wieder weg. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> Ist halt nur defensive Programmierung, weil ich mit der offensiven schon hinreichend schlechte Erfahrungen gemacht habe...
Jochen
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? <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Aber schon OK, ich pack meinen Oberlehrer jetzt auch wieder weg. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> Ist halt nur defensive Programmierung, weil ich mit der offensiven schon hinreichend schlechte Erfahrungen gemacht habe...
Jochen
Aber schon OK, ich pack meinen Oberlehrer jetzt auch wieder weg. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> Ist halt nur defensive Programmierung, weil ich mit der offensiven schon hinreichend schlechte Erfahrungen gemacht habe...
Jochen
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 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.
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/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
</font><hr></pre></blockquote>
ratte
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 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.
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/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
</font><hr></pre></blockquote>
ratte
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:
<b>SLEEPER="/bin/sleep"</b>
in der mitte, bei der 35 sekunden zeitschleife in der while schleife eine zeile
<b>$SLEEPER 1s</b>
einfuegen, sodass
<i>NOW=`$TAKETIME +%s`</i>
in der zeile darunter ist.
ratte
so, wie das script vorliegt, verbratet es zuviel cpu-zeit.
es muessen zwei zusaetzliche zeilen eingefuegt werden:
oben, bei der variablenvereinbarung:
<b>SLEEPER="/bin/sleep"</b>
in der mitte, bei der 35 sekunden zeitschleife in der while schleife eine zeile
<b>$SLEEPER 1s</b>
einfuegen, sodass
<i>NOW=`$TAKETIME +%s`</i>
in der zeile darunter ist.
ratte
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... <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
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:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
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
</font><hr></pre></blockquote>
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<pre>[ "$1" = "on" ] && SCROLL_OPTION=+scroll && SCROLL_OPTION=-scroll</pre>Und setleds wird dann mit<pre>setleds -L $SCROLL_OPTION <$tty</pre>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<pre>trap 'rm -f $TEMPFILE; exit 32' 0</pre> 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
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:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
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
</font><hr></pre></blockquote>
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<pre>[ "$1" = "on" ] && SCROLL_OPTION=+scroll && SCROLL_OPTION=-scroll</pre>Und setleds wird dann mit<pre>setleds -L $SCROLL_OPTION <$tty</pre>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<pre>trap 'rm -f $TEMPFILE; exit 32' 0</pre> 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
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.
eeecht? das geht? werde ich sogleich verwenden (bin auch grade am skript-basteln). danke und gute nacht.
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
gleich nach den variablenvereinbarungen ist ok, oder?
ratte
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
gleich nach den variablenvereinbarungen ist ok, oder?
ratte
Re: On-/Offline-Modus von DSL-Hardwarerouter per Software anzeigen lassen ...
@Jochen:
> <font face="Courier New">[ "$1" = "on" ] && SCROLL_OPTION=+scroll && SCROLL_OPTION=-scroll</font><!--fixed-->
muss wohl heissen:
<font face="Courier New">[ "$1" = "on" ] && SCROLL_OPTION=+scroll || SCROLL_OPTION=-scroll</font><!--fixed-->
@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.
> <font face="Courier New">[ "$1" = "on" ] && SCROLL_OPTION=+scroll && SCROLL_OPTION=-scroll</font><!--fixed-->
muss wohl heissen:
<font face="Courier New">[ "$1" = "on" ] && SCROLL_OPTION=+scroll || SCROLL_OPTION=-scroll</font><!--fixed-->
@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.