PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ifconfig - Kollisionen und RX/TX Rate anzeigen



d4n13l
21.01.2005, 16:20
Hi,

also mein anliegen is folgendes...

ich will mit ipconfig ein tool schreiben, das mir die anzahl der kollisionen und die anzahl der übertragenen pakete anzeigt.

Anzahl der Kollsionen, TX Rate und RX Rate sollten dabei in variablen gepackt werden...

aber wie bekomm ich das hin?

beim ausführen von "ipconfig eth0" wird das ja alles ausgegeben, aber wie kann ich dafür sorgen, das auch nur das anzeigt wird, was ich will und dann auch noch in variablen geschrieben wird?

hoffe ihr könnt mir schnellmöglicht helfen, is echt wichtig...

dank im voraus

codc
21.01.2005, 16:28
Das einzige was mit da einfällt ist eine kombination aus ifconfig, grep, awk und sed die daten da rauszupulen. Bin aber mit awk und sed nicht so fit dass ich da so auf die schnelle etwas schreiben kann.

Für eine Firewall hab ich so etwas schon mal gesehen:
IF_INET_IP="`ifconfig $IF_INET | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"

holt aus ifconfig die dhcp-zugewiesene ip musst du vielleicht anpassen

d4n13l
21.01.2005, 16:52
hm auf jedenfall schonmal danke!

wäre aber schon gut wenn man es mit awk realisieren könnte...oder ist das garnicht möglich?

greetz
d4n13l

d4n13l
22.01.2005, 11:13
hm also ka aber oben der befehl klappt bei mir jedenfalls nich, oder ich führ den einfach falsch aus... :think:

hat denn sonst niemand ne ahnung? :hilfe2: :hilfe2:

is wirklich wichtig...


greetz

d4n13l

tr0nix
22.01.2005, 11:30
Doch ist mit AWK auch möglich. Jedoch komm ich gerade nicht dazu.

Hast du den Befehl unter root ausgeführt? Manche Informationen kriegt man nur als root raus (jedenfalls bei Solaris -> nur als root sieht man die MAC Addi).

codc
22.01.2005, 13:10
Bei mir tut es das auch nicht sofort aber nach 10 Min hatte ich es dann.


[root@trillian root]# IF_INET=ppp0
[root@trillian root]# IF_INET_IP="`ifconfig $IF_INET | grep "inet Adresse:" | awk '{print $2}' | sed -e 's/.*://'`"
[root@trillian root]# echo $IF_INET_IP
62.214.XXX.XXX
[root@trillian root]#

Ohne wirklich der Skript-Guru zu sein. Man muss es halt an sein System anpassen. Und wenn ein Script es wirklich nicht tut dann mal auf fehlersuche gehen und nicht davon ausgehen das der Autor ein funktionsuntüchtiges Script abliefert.

Alles weitere wegen TX usw wirst wohl selber hinbekommen.

Kleiner Tip selber denken hilft. Hier wird dir keiner die zeigen wie man Scripte schreibt.

TenBaseT
22.01.2005, 15:58
Anfangs war hier mal ne awk Lösung angedacht. Da fühle ich mich ja direkt berufen. Also mache ich mich frisch ans Werk und schwupps die wupp, bin ich mal wieder auf die Sch....... gefallen. :think:

Das Script läuft soweit. Die Zuweisung in A ist noch OK. A ist ein Array. Wenn ich jetzt die entsprechenden Arrays auseinander dividieren will, dann bekomme ich Stress.
split(A[1],B,":")
printf("%-15s %12d\n", "Kollosionen", B[1])A[1] hat den Wert "RX_bytes:27248125". Ich hätte erwartet, dass nach dem split() B[1] die Anzahl der RX_bytes enthält. Ich sehe aber immer nur 0. Warum?

Vielleicht kann mir ja mal jemand auf die Sprünge helfen. Das Script heisst bei mir ifconfig.awk (sollte aber auch jeder andere Name eingesetzt werden können). Aufgerufen wird es mit [root@rosi my]# ifconfig eth1|awk -f ifconfig.awk

Und hier noch das ganze Script. (Warum darf man hier kein .awk attachen?)

// { setVariables() }


function setVariables() {
S = $0
sub("RX bytes", "RX_bytes", S)
sub("TX bytes", "TX_bytes", S)

if (match(S, "Kollisionen") > 0) {
split(S,A)
print A[1]
split(A[1],B,":")
printf("%-15s %12d\n", "Kollosionen", B[1])
print B[1]
print B[3]
}

if (match(S, "RX_bytes") > 0) {
split(S, A)
print A[1]
split(A[1],B,":")
printf("%-15s %12d\n", "RX Bytes", strtonum(B[1]))

split(A[4],B,":")
printf("%-15s %12d\n", "TX Bytes", strtonum(B[1]))
}
}

Hans

TenBaseT
22.01.2005, 16:13
Aua, sehe vor lauter Bäumen den Wald nicht mehr.

Das Script sucht die gewünschten Werte raus. Der Rest sollte ja jetzt wohl nur noch Formsache sein. Hier das ganze Script
// { setVariables() }


function setVariables() {
S = $0
sub("RX bytes", "RX_bytes", S)
sub("TX bytes", "TX_bytes", S)

if (match(S, "Kollisionen") > 0) {
split(S,A)
#Collisions
split(A[1],B,":")
printf("%-15s %12d\n", B[1], B[2])
}

if (match(S, "RX_bytes") > 0) {
split(S, A)
#RX_Bytes
split(A[1],B,":")
printf("%-15s %12d\n", B[1], strtonum(B[2]))

#TX_Bytes
split(A[4],B,":")
printf("%-15s %12d\n", B[1], strtonum(B[2]))
}
}Und so wird es angewendet
[root@rosi my]# ifconfig eth1|awk -f ifconfig.awk
Kollisionen 0
RX_bytes 27353257
TX_bytes 2563416
[root@rosi my]#

Hans

avaurus
22.01.2005, 19:55
macht euch das Leben nicht so schwer:

Datei: if.sh


#!/usr/bin/bash
/sbin/ifconfig $1 | sed 's/:/ /g' | grep 'collisions' | awk '{print("Kollisionen: "$2)}'
/sbin/ifconfig $1 | sed 's/:/ /g' | grep 'RX bytes' | awk '{print("RX bytes: "$3"\nTX bytes: "$8)}'


Aufzurufen mit
./if.sh eth0

Mfg.

TenBaseT
22.01.2005, 21:33
viele Wege führen nach Rom ...........

Hans

avaurus
22.01.2005, 21:49
ganz genau :).

d4n13l
23.01.2005, 10:46
okay vielen danke an euch alle!

@codc

sry aber bin noch neu hier im forum und auch noch etwas neu in der linuxwelt ;)
aber werd mich besser :)

also danke nochmal ;)

bye

TenBaseT
23.01.2005, 11:11
noch mals zum Thema viele Wege führen nach ............

Hätte man die Informationen nicht auch "leicher" aus /proc/net/??? generieren können?

Hans

avaurus
23.01.2005, 11:31
ist nicht einfacher als die Ausgabe von ifconfig zu parsen.

codc
23.01.2005, 12:45
@codc
sry aber bin noch neu hier im forum und auch noch etwas neu in der linuxwelt ;)
aber werd mich besser :)


Der Hinweis war nicht böse gemeint aber es ist so wenn jemand hier regelmässig durch das verweigern des eigenen denkens auffällt wird er jedenfalls von mir und ich denke auch von einer reihe anderer leute ignoriert. D.h. man schiesst sich selber ins Knie. Imho hat so ein Forum wie auch GPL was von nehmen und geben.

Jeder der hier anderen hilft hat eine ganze Weile seines Lebens damit zugebracht sich dieses Wissen an zueignen. Sollte man nie vergessen und diese Leute geben hier ihr wissen weiter ohne etwas davon zu haben ausser evtl. ein paar ASCII-Zeilen als danke schön wenn es hoch kommt.

Nix für ungut aber allles nur als Hinweis für die Zukunft.