Archiv verlassen und diese Seite im Standarddesign anzeigen : ifconfig auswerten und das ergebnis in eine mysql schubsen
meinereinerseiner
18-10-2002, 08:17
hallo,
ich möchte die Ausgabe von ifconfig was den traffic betrifft in eine mysql db schubsen.
ifconfig ppp0 | tail -n 2 | head -1
RX bytes:47454509 (45.2 Mb) TX bytes:16778851 (16.0 Mb)
ich bräuchte da die werte die in den klammern stehen, ohne das [leer]MB !??
der tom
TommeS73
18-10-2002, 11:59
ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/\(([0-9\.]+).*?\).*\(([0-9\.]+).*/; print "RX = $1\nTX = $2\n" '
mfg
Thomas
meinereinerseiner
18-10-2002, 16:28
danke für die schnelle antwort.
hab nur grad festgestellt, das es nicht wirklich clever ist den wert in den klammern
zu nehmen, da da ja auchmal nur kb stehen können, ist ja dann besser wenn
ich mit den bytes arbeiten würde - muss mir sie dann im php ja nur entsprechend
zurecht rechnen.
wie bekomme ich die raus und wie kann ich damit im shell script weiter arbeiten,
sprich wie bekomme ich die perl variablen in die bash - über export?
der tom
HI Thomas,
es wäre noch ganz gut, wenn da noch eine Einheit wäre. Es ist ja ein Unterschieb, ob 2,8 MB oder 2,8 GB Traffic hast
ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/\(([0-9\.]+)(.*?)\).*\(([0-9\.]+)(.*?)\).*/; print "RX = $1 $2\nTX = $3 $4\n" '
Richtig nobel wäre das dann noch, wenn man die Werte in Byte umrechnen würde.
by, blackm
Oder man nimmt gleich die Werte vor den Klammern *g*...
ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "RX = $1\nTX = $2\n" '
by, blackm
Die Variablen werden hier ausgegeben und du kannst die Ausgabe abfangen
VAR_RX_BYTES=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/; \
$RX+=$1; $TX+=$2;} print "$RX" ')
VAR_TX_BYTES=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/; \
$RX+=$1; $TX+=$2;} print "$TX" ')
meinereinerseiner
18-10-2002, 18:17
hi,
habs - danke für die schnelle hilfe - hab bei der ganzen sache nochwas entdeckt:
das script:
ifconfig ppp0
RX_BYTES_1=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/; $RX+=$1; $TX+=$2;} print "$RX" ')
TX_BYTES_1=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/; $RX+=$1; $TX+=$2;} print "$TX" ')
RX_BYTES_2=$(ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "$1" ')
TX_BYTES_2=$(ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "$2" ')
echo ${RX_BYTES_1}
echo ${TX_BYTES_1}
echo ${RX_BYTES_2}
echo ${TX_BYTES_2}
bringt folgende Ausgabe:
evil:/ # ./loger_test.sh
ppp0 Link encap:Point-to-Point Protocol
inet addr:217.231.158.137 P-t-P:217.5.98.177 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:2077814 errors:0 dropped:0 overruns:0 frame:0
TX packets:1707497 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:1642188898 (1566.1 Mb) TX bytes:358904400 (342.2 Mb)
3284377796
717808880
1642189352
358904486
irgendwie sind die ersten beiden Zeilen das doppelte des eigentlichen wertes??
der tom
Kleiner Fehler meinerseits, die Korrektur:
> ifconfig ppp0
> RX_BYTES_1=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/ and \
$RX+=$1 and $TX+=$2;} print "$RX" ')
> TX_BYTES_1=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/ and \
$RX+=$1 and $TX+=$2;} print "$TX" ')
meinereinerseiner
30-10-2002, 18:28
so - nun rennts wie's soll - falls es jemanden interessiert, hier das fertige script:
#!/bin/sh
#
#
# traffic_db.sh
#
if [ ! "$(/sbin/ifconfig | grep ppp0)" == "" ]; then
a_IP=`netstat -rn | egrep ^0.0.0.0 | sed -e "s,.* ,,g" | xargs /sbin/ifconfig | grep "inet.addr" | sed -e "s,.*addr:,," -e "s, .*,,"`
a_RX_BYTES=$(/sbin/ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "$1" ')
a_TX_BYTES=$(/sbin/ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "$2" ')
a_date=`date +%Y.%m.%d-%k:%M:%S`
a_jahr=`date +%Y`
a_monat=`date +%m`
a_tag=`date +%d`
a_zeit=`date +%k:%M:%S`
a_unixtime=`date +%s`
o_RX_BYTES=`cat /var/log/traffic/traffic.tmp | grep "o_RX_BYTES" | cut -c12-`
o_TX_BYTES=`cat /var/log/traffic/traffic.tmp | grep "o_TX_BYTES" | cut -c12-`
o_IP=`cat /var/log/traffic/traffic.tmp | grep "o_IP" | cut -c6-`
if [ "$o_IP" = "$a_IP" ]; then
data_rx=`expr ${a_RX_BYTES} - ${o_RX_BYTES}`
data_tx=`expr ${a_TX_BYTES} - ${o_TX_BYTES}`
else
data_rx=${a_RX_BYTES}
data_tx=${a_TX_BYTES}
fi
echo "INSERT INTO ppp0 VALUES ('${a_unixtime}','${a_jahr}','${a_monat}','${a_tag }','$a_IP','${data_rx}','${data_tx}','${a_RX_BYTES }','${a_TX_BYTES}','${a_zeit}');" > /var/log/traffic/trafficdb.tmp
mysql -u root -pgeheim --database=traffic < /var/log/traffic/trafficdb.tmp
rm -f /var/log/traffic/trafficdb.tmp
echo o_RX_BYTES=${a_RX_BYTES} > /var/log/traffic/traffic.tmp
echo o_TX_BYTES=${a_TX_BYTES} >> /var/log/traffic/traffic.tmp
echo o_IP=${a_IP} >> /var/log/traffic/traffic.tmp
else
echo "ppp0 nicht Aktiv!"
fi
exit 0
ist sicherlich an manchen stellen verbesserungswürdig, aber es tut - danke an die die mir geholfen haben
der tom
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.