PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einwahlzeiten, Traffic und Online-Zeit für eigenes Sript?



shusemann
13.06.04, 10:00
Hallo zusammen,

wenn ich mich mit meiner SuSE 9.1 in's Internet via DSL einwähle, so wird mir in die /var/log/messages reingeschrieben, wann die Einwahl erfolgt ist und ob alle Scripte erfolgreich ausgeführt wurde.
Wenn ich die Verbindung zum Internet trenne, dann wird dort auch die Connection-Time, sowie gesendete und empfangende Bytes geloggt.

Ich möchte diese Werte gerne für ein eigenes Log benutzen, um mal einen Überblick über meine Surfgewohnheiten zu bekommen.
Es soll also nach jedem auflegen ein Script ausführen, welches die Werte Connetion-Time, gesendete und empfangende Bytes weiterverarbeitet.
Ich dachte so daran, dann das Script durch /etc/ppp/ip-down.local aufgerufen wird oder so.

Möchte halt nur diese drei Werte und vielleicht noch die Einwahl-Zeit und die Abwahl-Zeit haben, die ich dann weiterverarbeiten kann.

Wäre echt super, wenn Ihr mir helfen könntet...

geronet
13.06.04, 10:39
Das hab ich schon lang:

/bin/online (ausführbar machen!)

#!/bin/sh
#
# description: logs online time and IP to "/var/log/online.log"

LOGFILE=/var/log/online

# See how we were called.
case "$1" in
start)
IP=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
echo "`date "+%x %T %s"` $IP" >> $LOGFILE

;;
stop)
# evaluate time in seconds
START=`tail -n 1 $LOGFILE | awk '{ print $3 }'`
STOP=`date +%s`
let TIME1=$STOP-$START

echo "`date "+%x %T %s"` $TIME1" >> $LOGFILE

;;
*)
echo "Usage: online {start|stop}"
exit 1
esac

exit 0

/etc/ppp/ip-up.local


#!/bin/bash

INTERFACE=$1
DEVICE=$2
SPEED=$3
LOCALIP=$4
REMOTEIP=$5

case "$INTERFACE" in
ppp0)
# log the connect
/bin/online start

usw.. blalbla

;;
ppp1)
;;
ippp0)
;;
ippp1)
;;
*)
;;
esac

exit 0

/etc/ppp/ip-down.local


#!/bin/bash

INTERFACE=$1
DEVICE=$2
SPEED=$3
LOCALIP=$4
REMOTEIP=$5

case "$INTERFACE" in
ppp0)

# log the disconnect
/bin/online stop

...usw...
;;
ppp1)
;;
ippp0)
;;
ippp1)
;;
ippp2)
;;
*)
;;
esac

exit 0

Danach sieht die /var/log/online so aus:


06/12/04 10:28:51 1087028931 83.129.230.83
06/12/04 23:13:05 1087074785 45854


Grün: Datum und Zeit wann die Verbindung gestartet wurde
Blau: Zeit in sek. seit 1.1.1970 des Verbindungsstarts
Rot: Zugewiesene IP-Adresse
Orange: Datum und Zeit der Trennung
Weiss: Zeit in sek. seit 1.1.1970 der Trennung
Schwarz: Verbindungszeit in Sekunden

Diese Textdatei kannst du dann einfach in eine Tabellenkalkulation reinwerfen,
den Traffic holt man sich über vnstat, mrtg oder ähnliches, das ist genauer.

Grüsse, Stefan
(jetzt hab ichs aber bunt gemacht ;) )

shusemann
13.06.04, 11:13
Schon mal vielen Dank!

Wie genau sind denn die Werte?
Wie genau sind die Werte in /var/log/messages?

Habe nur halt das Problem, dass an meinem Server kein grafische Oberfläche installiert ist (aus platzgründen) und ich einfach so im Auge behalten möchte, wie lange ich in Bereich meiner Volumen-Begrenzung liege.

Aber das mit der Zeit ist schon eine super sache!

Wie ich das so eigentlich vorhabe:
Eine SQL-Datenbank, in die ich eine Tagesstatistik erstelle. Dann mittels PHP-Seiten die SQL-DB auswerten, damit man schön sehen kann, wie lange man ungefähr im Monat online war und wie viel Traffic man verbraucht hat.
Um mich ein wenig mit der Shell-Programmierung auseinandersetzten zu können, möchte ich das nach Möglichkeit mal selber machen und nicht schon u.U. ein fertiges proggy nehmen.

geronet
13.06.04, 11:43
Genauer gehts wohl kaum, eine Sekunde hin oder her...

Du kannst gerne das Script erweitern und den Traffic noch reinbauen ;)

shusemann
13.06.04, 12:48
Wenn mir jetzt noch jemand sagt, wie ich den Traffic auswerten kann...

ChandlerBing
14.06.04, 09:42
Wenn mir jetzt noch jemand sagt, wie ich den Traffic auswerten kann...

Wie geronet schon sagte: z.B. vnstat

Idlemaster
15.06.04, 03:45
Wenn mir jetzt noch jemand sagt, wie ich den Traffic auswerten kann...

In /proc/net/dev findest du alles, was du brauchst :p
MfG
Idle

slime
15.06.04, 15:48
hi,
um das "ganz korrekt" zu machen reicht es einfach wenn du ein script für online und ein script für offline unter /etc/ppp/ip-up.d/ und /etc/ppp/ip-down.d/ ablegst.
diese sollten dann bei jeder einwahl/auswahl gestartet werden.
diesen scripten werden auch noch eine menge parameter übergeben, so z.B. das interface um das es sich dreht. wo genau die doku dazu zu finden ist kann ich dir leider nicht sagen. [in $PPP_IFACE steht das Interface, in $PPP_LOCAL deine IP-Addresse]

shusemann
17.06.04, 08:22
Das mit /proc/net/dev sieht ja schon super aus.
Ich bin aber leider nicht so der Shell-Programmierer. Hat da jemand ein Script, welches genau diese Werte zurück gibt? ich weiß zwar, dass ich mit

cat /proc/net/dev|grep ppp0
mir die ganze Zeile von ppp0 ausgeben lassen kann. Aber wie trenne ich dann den Rest?

Wäre echt super, wenn mir da noch jemand helfen könnte.

geronet
17.06.04, 11:15
So etwa:

cat /proc/net/dev | awk '/\ ppp0/ { print $2 } '

Die $2 ist die Stelle welche du ausgeben willst.

Grüsse, Stefan

Idlemaster
17.06.04, 11:44
Plain old C++ ;)
http://homepages.fh-giessen.de/~hg12779/traffic.cpp
MfG
Idle

shusemann
17.06.04, 18:33
Hm, soweit habe ich jetzt alles.
Aber:
Ich habe festgestellt, dass der Wert, den ich suche, nicht in /proc/net/dev zu finden ist. Dort wird immer hoch gezählt. Die Werte scheinen nicht auf 0 gesetzt zu werden. Ich möchte nach Möglichkeit den Traffic der Sitzung haben. Also den Traffic der entstanden ist, von der Einwahl ins Internet bis zu dem Zeitpunkt, wo mein Server auflegt.
Kann ich den Wert noch irgendwo abgreifen?

geronet
17.06.04, 18:44
Du kopierst einfach das Script oben mit der Einwahlzeit und änderst es dementsprechend für den Traffic um. Dann hast du die genaue Differenz für diese Verbindung.

shusemann
17.06.04, 19:58
Alles klar,

ich glaube, ich hab's jetzt:
An die ip-down.local ist laut >man pppd< die $CONNECT_TIME, $BYTES_SENT und $BYTES_RCVD verfügbar, die die von mir gesuchten Werte enthalten.

Mehr wollte ich eigentlich gar nicht. Diese schreibe ich jetzt in eine SQL. Von dortaus werden die Daten dann per PHP ausgewertet!

Trotzdem vielen Dank

winter
18.06.04, 14:11
moin.
also ich hab auch ma ne frage.

wenn ich das c prog benutze kann ich mir den traffic ausgeben, seitdem das interface hochgefahren wurde.
ich will das so machen, das er mir wenn das interface runtefährt den wert speichert, der bis dahin geladen/gesendet wurde.

so das ich dann in der logfile etwas wie
datum||up||down
habe.
wie kann ich das machen, so das der mir nur einmal den wert pro verbindung logt?

shusemann
19.06.04, 14:42
Ich befürchte, du musst den vorherigen Wert vom aktuellen Wert abziehen. Wenn der aktuelle Wert kleiner als der vorherige ist, ziehe 0 vom aktuellen ab.
Was besseres fällt mir auch nicht ein!

shusemann
20.06.04, 11:33
Mit diesem Script erreichst du glaube ich das, was du suchst:
$DATE gibt Datum und Uhrzeit zurück, wann die ip-down.local ausgeführt wurde.
$SEND2 enthält die gesendeten Bytes
$RCVD2 enthält die empfangeden Bytes
$CONNECT_TIME enthält die Online-Zeit in Sekunden

Durch diese Werte solltest du dann eigentlich alles haben, was du brauchst!




#BEGINN

# The date and time
DATE=$(date +"%d.%m.%Y %H:%M:%S")

# Write send and received bytes and onlientime into logfile
# Format: date time onlinetime [s] bytes send bytes received

# Read old data if exist and substract it if our PID hasn't changed since
# last time
if [ -f /var/tmp/ppp-usage ]; then
. /var/tmp/ppp-usage
PID2=$(cat /var/run/ppp0.pid)
if [ $PID2 -eq $PID1 ]; then
let SENT2=$BYTES_SENT-$SENT1
let RCVD2=$BYTES_RCVD-$RCVD1
else
SENT2=$BYTES_SENT
RCVD2=$BYTES_RCVD
fi
else
SENT2=$BYTES_SENT
RCVD2=$BYTES_RCVD
fi

# Write data to logfile
/bin/echo $DATE $CONNECT_TIME $SENT2 $RCVD2 >> /var/log/ppp-usage

# Write "old" data to tmp-file to substract it next time
/bin/echo "PID1=$(cat /var/run/ppp0.pid)" > /var/tmp/ppp-usage
/bin/echo "SENT1=$BYTES_SENT" >> /var/tmp/ppp-usage
/bin/echo "RCVD1=$BYTES_RCVD" >> /var/tmp/ppp-usage

#THE END