ifconfig - Kollisionen und RX/TX Rate anzeigen

d4n13l

d4n13l

ehm...ja...
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
 
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
 
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
 
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
 
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).
 
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.
 
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.
Code:
    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?)
Code:
// { 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
 
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
Code:
// { 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
Code:
[root@rosi my]# ifconfig eth1|awk -f ifconfig.awk
Kollisionen                0
RX_bytes            27353257
TX_bytes             2563416
[root@rosi my]#

Hans
 
macht euch das Leben nicht so schwer:

Datei: if.sh
Code:
#!/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
Code:
./if.sh eth0

Mfg.
 
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
 
noch mals zum Thema viele Wege führen nach ............

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

Hans
 
ist nicht einfacher als die Ausgabe von ifconfig zu parsen.
 
d4n13l schrieb:
@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.
 

Ähnliche Themen

SuSe 11 Wlan Problem

Modulfehler?

kismet/Wlan problem

Netzwerkpropleme allgemein in openSUSE 11 "achtung Newbie"

WLAN mit Ubuntu 8.10 und Ndiswrapper

Zurück
Oben