Box-Info von trunk

Ich würde dafür plädieren, einige der Interfaces auszulassen (einfach weil sie in der GUI "sinnlos" oder ohne Relevanz sind):
lo (Loopback)
dsl (die AVM-IP 169.254.2.1 zu kennen hilft m.E. nicht wirklich)
ggf. auch die [noparse]<if>:x[/noparse] Adressen, das können aber auch sinnvolle IPs sein...

Jörg
 
@Gero013: Wenn du willst, mach es von mir aus mit awk. Ich persönlich habe eine Abneigung gegen awk und dein Vorschlag wird aus diesem Grund ziemlich einzige Stelle in box.info sein, wo awk verwendet wird.
Und jetzt fängt die gleiche Diskussion an, Gero013, wie bei meinen MACs damals: MaxMuster will z.B. da nicht die komplette Offenbarung von allen möglichen und unmöglichen Informationen sehen. Und er wird nicht der einzige sein. Das ist genau das, was ich vorher schon angesprochen hatte.
Außerdem finde ich die Methode an sich etwas übertrieben: Zunächst komplette Ausgabe von ifconfig zu zerlegen und dann noch es gegenüber /etc/hosts zu vergleichen, wo auch andere Hosts als nur die Box selbst stehen.
Aber wenn es funktioniert und alle zufrieden sind, dann könnt ihr von mir aus es in den trunk einfließen lassen. Ich habe nichts gegen.

MfG
 
Ich würde dafür plädieren, einige der Interfaces auszulassen (einfach weil sie in der GUI "sinnlos" oder ohne Relevanz sind):
lo (Loopback)...
Yepp, loopback macht nicht wirklich Sinn :)

... beim dsl-Interface bin ich aber schon völlig anderer Meinung.
Ich habe versuchsweise das dsl-Interface in die /etc/hosts aufgenommen und verwende den Namen im Script zur Erkennung von (externen) FTP-Verbindungen:
Code:
#!/bin/sh
file2check='/var/log/bftpd.log'
locledon='budget_reached'
locledoff='budget_notreached'
publedon='festnetz_mwi_set'
publedoff='festnetz_mwi_reset'
lochostname='fritz.box'
pubhostname='inder.nett'
chkconnect() {
sleep 1
local lconn=$(netstat | grep "$lochostname:21" | grep 'ESTABLISHED' | wc | awk '{ print $1; }')
local pconn=$(netstat | grep "$pubhostname:21" | grep 'ESTABLISHED' | wc | awk '{ print $1; }')
logger ftponline "connections: local [$lconn], public [$pconn]"
if [ "x$pconn" = "x0" ]; then
led-ctrl $publedoff
else
led-ctrl $publedon
fi
if [ "x$lconn" = "x0" ]; then
led-ctrl $locledoff
else
led-ctrl $locledon
fi
}
touch $file2check # ensure, that file exists
chkconnect
while inotifywait -qq -e modify $file2check; do
chkconnect
done
Das funzt wunderbar mit unterschiedlichen LEDs für interne und externe Verbindungen. Die Adresse hier hart zu kodieren würde ich als unprofessionell empfinden.

Wenn du willst, mach es von mir aus mit awk
Du, das ist mir so hoch wie breit ;)
Ich bin an der Ecke völlig leidenschaftslos. Ich habe weder gegen awk was, noch gegen sed - nur tue ich mich mit sed etwas schwerer, bzw. weiß manchmal einfach nur den Weg mit awk.
Nachdem funktionierende Alternativen aufkamen, ist des doch kein Problem, awk raus zu schmeißen :D
... also sowas kostet mich gerade mal ein Lächeln.

Außerdem finde ich die Methode an sich etwas übertrieben: Zunächst komplette Ausgabe von ifconfig zu zerlegen und dann noch es gegenüber /etc/hosts zu vergleichen, wo auch andere Hosts als nur die Box selbst stehen.
Vielleicht profitierst Du ja eines Tages selbst von der Ausgabe - wo Du doch so viele Boxen zu betreuen hast ;)

Gruß Gero
 
Zuletzt bearbeitet:
... Mädels ;-)
Manchmal finde ich es echt schwierig, wenn jeder sich gleich angegangen fühlt, wenn eine andere Meinung aufkommt. Lasst doch die Spitzen weg und diskutiert, was wohl sinnig ist, und was nicht :smlove:.
Wenn ich denke, es gibt keine sinnvolle Verwendung für XY und jemand zeigt mir was anderes, dann hat er halt vielleicht ja "Recht" (oder ich habe nicht an alles gedacht) oder ich habe mich unklar ausgedrückt oder.... Das wertet doch das ganze nicht ab.

@Gero: Das mit dem dsl hab ich noch nicht so ganz verstanden. Die IP des dsl setzt AVM doch m.W. immer fest auf die genannte IP, der "Aussagewert" das in der GUI zu wiederholen schien mir nicht allzu groß. Dass du für dein Skript die "hosts" Datei nutzt, ist doch von der GUI unabhängig, oder stehe ich da auf dem Schlauch?
Prinzipiell denke ich aber lieber eine Info mehr, als zu wenig.

Ansonsten könnte man ja für die Übersichtlichkeit durchaus auch einen "verbose-Level" für die Seite etablieren, oder Infos "ein-/ausblendbar" gestalten oder so.

@Hermann
Boxinfo ist klasse!
Und wenn eine Anregung kommt, das vielleicht sogar noch zu verbessern, ist das eine Anerkennung deiner Arbeit und keine Kritik, dass du das schlecht gemacht hättest.

Jörg
 
das in der GUI zu wiederholen schien mir nicht allzu groß
Yo - hast ja recht ;) - ich war nicht ganz so schnell :oops:

Und wenn eine Anregung kommt, das vielleicht sogar noch zu verbessern, ist das eine Anerkennung deiner Arbeit und keine Kritik, dass du das schlecht gemacht hättest.
Ganz genau! So sieht's aus
... gelegentlich lässt sich sogar ein goodie verbessern ;)

Habe Bild und patch (der jetzt localhost unterdrückt) aktualisiert.

Gruß Gero

P.S. die sed-Variante hat bei mir nicht zuverlässig getan, deshalb habe ich die awk-Variante gelassen.
 
@MaxMuster: Danke für die Einmischung. Mit dem verbose-Level könnte man sich sicherlich überlegen. Denn zuviel Information ist auch nicht immer gut. Von daher waren meine Zweifel, ob man denn wirklich alle Interfaces da braucht, die du auch geäußert hast.
@Gero013: Es ging mir nicht um Profit, sondern darum zu verstehen, wozu du solche extensive Methoden anwendest, um an diese Informationen zu kommen. Fritz!Boxen haben nicht allzugrosse Rechenleistung und befassen sich unter anderem mit viel mehr Aufgaben, als nur die Box-Info-Seite darzustellen. Daher kam meine Frage, die du so verstehen solltest: Gibt es nicht andere Wege, als hosts gegen ifconfig zu vergleichen?
Wenn man keine anderen Wege findet, dann machen wir es so, wie du es vorschlägst. Aber lass uns mal bitte hier wenigstens darüber diskutieren.

Edit: sed-Vorschlag scheint tatsächlich in die Hose zu gehen. Dann war das auch zeitmäßig ein Äpfel-Birnen-Vergleich. ich schaue mir die sed-Sequenz an.

MfG
 
Zuletzt bearbeitet:
P.S. die sed-Variante hat bei mir nicht zuverlässig getan, deshalb habe ich die awk-Variante gelassen.
Wenn es die oben genannte ist, ist das "klar" ;-) Du nutzt dort "$IP", das wird aber nur innerhalb vom awk-Zweig gesetzt. Richtig wäre aus meiner Sicht
Code:
#    hostname=$(sed -ne "/${IP//./\\.}"'[ \t]/s/^.*[ \t]//p' /etc/hosts)
hostname=$(sed -ne "/${addr//./\\.}"'[ \t]/s/^.*[ \t]//p' /etc/hosts)

Jörg
 
Ich könnte mir auch einen "Details" Link in dem Abschnitt Netzwerk vorstellen. Und nur da sieht man die komplette Ausgabe. Oder ist das dann schon wieder ein Klick zu weit?

MfG Oliver
 
Ich würde vorschlagen für die detaillierten Informationen lieber eine kleinere Schrift zu nehmen als Zusatzseiten.
sed-Sequenz funktioniert nicht nur wegen IP nicht, sondern sie behandelt schlecht Kommentare. Ich hatte versucht zu verstehen, was ihr da alles macht und stehe ehrlich gesagt auf dem Schlauch...
Sehe ich das richtig, dass diese Abschneidung von hinten (womit auch Kommentare mit sed nicht gehen) nur dem Ziel dient den ersten Namen "fritz.box" wegzulassen und nur den zweiten "mitnehmen"? Wenn es so ist, würde ich vorschlagen alle Hostnamen zu nehmen und sie dann mit \n zu trennen. Gero zeigt alles eher als Tabelle in html, sodass man damit keine Probleme haben dürfte. Somit würden wir uns wenigstens nicht selbst "bescheißen".
Noch ein anderer Vorschlag wäre aus ar7.cfg oder aus AVM-WebIF den Namen für dyndns auszulesen. Den Namen könnte man dann zum DSL-IF dazuschreiben. Dann wäre es wenigstens fair, allerdings ziemlich aufwendig und rechenintensiv.

MfG
 
Es ging mir nicht um Profit, ...
???

Hat das irgendwer behauptet? - Ich ganz sicher nicht.
Mir kam es nur so vor, als wärest Du etwas dünnhäutig, wenn Verbesserungsvorschläge zu Komponenten kommen, die Du geschrieben hast.
Wie Jörg schon treffend anmerkte: das hast Du nicht nötig!

... sondern darum zu verstehen, wozu du solche extensive Methoden anwendest, um an diese Informationen zu kommen. Fritz!Boxen haben nicht allzugrosse Rechenleistung und befassen sich unter anderem mit viel mehr Aufgaben, als nur die Box-Info-Seite darzustellen.
Puh - also jetzt reißt Du ein Thema an ...

Ich habe mich inzwischen an vielen Stellen gewundert, wie "gedankenlos" Platz verschwendet wird. Ja, mir ist bewusst, dass es eine Firmware ist und dass die Prozessorleistung begrenzt ist - allerdings sollte man auch hier die Kirche im Dorf lassen.
Wenn Du mal Seiten stoppst, die webcm multiquery verwenden, oder z.B. die Statusabfrage der Dienste - das ist das bisserl awk und gegreppe völlig vernachlässigbar. Ebenso ob für die Ermittlung jetzt 1 Prozess oder 2 verwendet werden, ist nichtmal genau messbar.

Deshalb sollte man schon überlegen, ob der Aufwand gerechtfertigt ist.
Wenn Du Dir das Thema "Platzverbrauch und Prozessorleistung" auf die Fahne schreiben willst - völlig ok, aber dann sollte die gesamte Firmware dahingehend überarbeitet werden. Da ist meines Erachtens viel Einsparpotential (aber auch extrem viel Zeitaufwand).

Ich habe mich an anderen cgi- und shell-Scripten orientiert und da awk auch ein link zu busybox ist, ist das allemal besser, als perl zu installieren (auch wenn letzteres mein persönlicher Favorit wäre).
Ich bin sicher kein shellscript Profi - ich bin pragmatisch und versuche Dinge hin zu bekommen - getreu der Devise: "first make it work, then optimize" - und über Verbesserungsvorschläge freue ich mich :)

Ich könnte mir auch einen "Details" Link in dem Abschnitt Netzwerk vorstellen.
Hm, also dafür ist es *imho* zu wenig Information. Dann lieber den verbose-level (oder security_level als verbose-level verwenden).

Noch ein anderer Vorschlag wäre aus ar7.cfg oder aus AVM-WebIF den Namen für dyndns auszulesen.
Vorschlag ist nicht schlecht, aber nicht allgemein gültig.
Wer z.B. inadyn einsetzt, hat in ar7.cfg den Namen nicht und AVM kennt den auch ned.

Gruß Gero
 
@Gero013: Ja, ich weiß, dass mit dyndns viel, viel schief laufen kann. Dann lassen wir es so.
Mit der Optimierung von Geschwindigkeit da gebe ich dir Unrecht. Als ich die Balken für die Anzeige von Partitionen angefangen hatte zu verbessern, dann war mir sehr schnell aufgefallen, dass die Ladezeiten von der entsprechenden Seite im WebIF inakzeptabel wurden. Und das lag unter anderem an den entsprechenden Abschnitten, wo awk verwendet wurde. Nachdem ich die Sachen überarbeitet hatte und teilweise mit read, teilweise mit sed ersetzt hatte, haben sich die Ladezeiten deutlich verbessert.
Und an AVM sollen wir uns nicht unbedingt messen, sondern versuchen besser zu werden, was wir bis jetzt mit unserem WebIF gut geschafft haben und zwar ohne die Rechenleistung zum JavaScript auszulagern. Daher bitte einfach darauf achten, wenn man programmiert. Ich komme leider aus der alten Generation, wo man noch in Assembler Programmiert hat, daher drehe ich jedes Byte zwei mal um, bevor ich was versuche zu programmieren. Zugegeben, auch das klappt nicht immer. Man sollte es aber wenigstens versuchen.

Aber zurück zu konkreten Fragen. Wozu nimmst du "x" für deine Vergleiche?
Code:
if [ "x$b" = "xLink" ];
Ist das so eine Art Schutz gegen leere Variablen? Das brauchst du doch nicht zu tun, wenn du schon "" verwendest.
Und was ist mit meiner Frage zu mehrfachen Hostnamen? Wollen wir sie alle mitnehmen oder nur den Letzten, wie jetzt?

MfG
 
Wozu nimmst du "x" für deine Vergleiche? Ist das so eine Art Schutz gegen leere Variablen? Das brauchst du doch nicht zu tun, wenn du schon "" verwendest.
Yo, das war noch für meine erste grep Variante - da bekam ich Fehler ohne die xes.
Hab's gerade ausprobiert, mit dem Sed-Konstrukt von MaxMuster funzt es auch ohne xe.

Und was ist mit meiner Frage zu mehrfachen Hostnamen? Wollen wir sie alle mitnehmen oder nur den Letzten, wie jetzt?
Yo, die Frage der Kommentare ist auch noch ungeklärt ;)
Ich für meinen Teil verschwende keinen Platz für Kommentare, schon garnicht in Konfigurationsdateien wie /etc/hosts und ich habe mir angewöhnt, dass der längste Name als erstes kommt - deshalb wäre mein bevorzugter Hostname der erste nach der Zahl.
Die jetzige Variante ist ein Zugeständnis an den Status Quo der Box.

Wenn ich mir allerdings netstat und Co anschaue, verwenden die auch den ersten Namen und nicht wie hostname den letzten. Vielleicht ist ja auch hostname "falsch" gepatcht?
Also falls jemand ein sed-Konstrukt posten könnte, mit dem man den ersten Hostnamen bekommt, würde ich mich sehr darüber freuen!

Dein Vorschlag, alle Hostnamen zu verwenden und sie mit Zeilenumbruch zu trennen würde einen zusätzlichen Verarbeitungsschritt bedeuten - wäre also entgegen dem, dass Du versuchst, die CPU möglichst wenig zu belasten ...

Wenn allerdings mehrere Hostnamen angezeigt werden sollen, ist der Hostname in der ersten Spalte falsch - dann sollte umgestellt werden.
Mach doch einfach mal einen Patch als Gegenvorschlag ;)

Gruß Gero

P.S. @MaxMuster:
Wie sieht denn die gepanschte Boxinfo bei Dir aus?
Wenn ich Deine sig richtig verstehe, dann hast Du die dsl-Schnittstelle garnicht aktiv. Hat die trotzdem ne Adresse und wird angezeigt?

P.P.S. Die Unterdrückung von ungewollten Anzeigen könnte man z.B. auch so konfigurierbar machen:
Code:
hideIF0="lo"
hideIF1="eth0:0"
hideIF2="wlan"

...

getNetworkInfo | while read ...
 [ "$i" = "$hideIF0" -o "$i" = "$hideIF1" -o "$i" = "$hideIF2" ] && continue;
...
Wenn man jetzt noch die Variablen hideIFx in eine Konfigurationsdatei auslagert, wäre das ganze per WebIF steuerbar ;)
 
Zuletzt bearbeitet:
@Gero013: Ich war schon gestern bei eine sed-Variante zu erstellen, die sogar genau das tut, was ich vorgeschlagen hatte, nämlich alle Hostnamen anzeigen. Das filtern von Kommentaren war damit auch relativ schnell erledigt gewesen. Allerdings bin ich auch kein richtiger Experte von sed, sondern stecke auch damit in den Anfangsphasen. Aus diesem Grund waren meine Varianten von grep/sed-Konstrukten etwas langsamer, als deine awk-Variante. Denn ich bevorzuge bei sed/grep eher mehrfache Instanzen, was wahrscheinlich auch Laufzeit kostet. Dafür wird aber alles sauber abgetrennt.
Zu deiner Filterung innerhalb von read-Schleife würde ich eher vorschlagen über die komplette ifconfig-Ausgabe zunächst mal grep laufen zu lassen, damit dein getNetworkInfo weniger zu kämpfen hat. Wie ich oben irgendwo gepostet hatte, hat meine 7170 schon ganz viele Interfaces, die ich nicht unbedingt in die Anzeige bringen würde.
Ich schaue mir heute deine Sachen genauer und poste vielleicht nachher hier meine Vorschläge, wenn ich dazu komme.

MfG
 
Aus diesem Grund waren meine Varianten von grep/sed-Konstrukten etwas langsamer, als deine awk-Variante. Denn ich bevorzuge bei sed/grep eher mehrfache Instanzen, was wahrscheinlich auch Laufzeit kostet.
*Lach* - also wenn Du den Fred nochmal zurück blätterst, wirst Du feststellen, dass ich genau wie Du gearbeitet habe. Die awk-Techniken kamen erst später dazu, weil mein Ermitteln der Hostnamen mit grep zu ungenau war.

Die schnelle und präzise awk-Variante stammt keinesfalls von mir, hat mich aber überzeugt, sodass ich sie gerne übernommen habe.
Im Nachhinein würde ich das Konstrukt schon als genial bezeichnen, denn ich brauchte nur 2 Buchstaben zu ändern, um den ersten Hostnamen (statt dem letzten) zu erhalten.
Damit hat sich das Problem der Kommentare schon von alleine erledigt :)

Zu deiner Filterung innerhalb von read-Schleife würde ich eher vorschlagen über die komplette ifconfig-Ausgabe zunächst mal grep laufen zu lassen, ...
dann schau doch einfach nochmal in box-info rein ;)
denn genau so mache ich es bereits :D
Du kannst es gerne ausprobieren, getNetworkInfo verarbeitet nur die Schnittstellen, die auch eine IP-Adresse haben.

Wie ich oben irgendwo gepostet hatte, hat meine 7170 schon ganz viele Interfaces, die ich nicht unbedingt in die Anzeige bringen würde.
Da wir vom coding nicht so weit auseinander zu liegen scheinen, würde ich vorschlagen, Du beschäftigst Dich lieber mit dem Filter der interfaces, anstatt ifconfig nomml neu zu verarbeiten.
Beim Filter lässt sich sicher noch einiges mehr erreichen.
Z.B. könnte man alle nicht gewollten Schnittstellen so schreiben, dass daraus ein Array geformt werden kann, welches dann in einer Schleife abgearbeitet würde.
Sicher fällt Dir da noch viel mehr ein.

Gruß Gero
 
Arrays scheinen unter busybox nicht zu fruchten. Zumindest hatte ich damit keine Erfolge gehabt.
Ich bin schon dabei an deinem Vorschlag etwas zu pfeilen. Mir gefällt rein vom Layout nicht, dass öffentliche und urloader-IP in einer Zeile stehen. Ich benutze die Standardbreite vom WebIF und da rutscht die IP schon runter. Außerdem ist die Urloader-IP an der Stelle deplatziert. Ich würde sie etwas tiefer nach unten legen vor den MAC-Adressen.
Ich würde oben eher versuchen zwei Zeilen zu spendieren: eine für öffentliche IP und eine für interne IP mit dem Namen. Und zwar so, wie es bei mir vorher war. Somit bedienen wir den Ottonormalverbraucher erstmal.
Danach kommt deine Tabelle mit Interfaces, bei der ich die Spalten umpositioniere, sodass die Interfaces an der ersten Stelle stehen. Die Schrift bei dieser tabelle würde ich kleiner machen, wie bei MAC-Adressen.
Eigentlich gehören die MAC-Adressen auch in deine Tabelle. Aber darüber würde ich nochmal nachdenken, ob wir sie auch noch hinein packen oder nicht. Denn momentan lese ich sie aus den AVM-Variablen. Man könnte sie aber natürlich auch über ifconfig ermitteln.
Wäre es ok?

MfG
 
Ich benutze die Standardbreite vom WebIF und da rutscht die IP schon runter.
???
Ich kann mich nicht entsinnen, an der "Standardbreite" was geändert zu haben.

Ich würde sie etwas tiefer nach unten legen vor den MAC-Adressen.
Wenn's Dir so besser gefällt, warum nicht?

eine für öffentliche IP und eine für interne IP mit dem Namen. Und zwar so, wie es bei mir vorher war.
Das klingt mir jetzt aber sehr nach Trotzkopf!
Wenn ich Dich daran erinnern darf: die interne Adresse, wie sie vorher war, war doch der Anlass für diesen Fred und all die Patches.

Die interne Adresse wird in "meiner" Tabelle auf jeden Fall angezeigt, egal wie die entsprechende Schnittstelle heißt.
Wieso also verdoppeln und dann da wieder rausfiltern?
Ist Dein "hostname -i" eine derart heilige Kuh ... ?

Sorry, aber das ist mir zuviel Kindergarten, sodass ich hier raus bin!

Gruß Gero
 
Sacht mal Jungs, was treibt ihr hier eigentlich?
 
'hostname -i' ist nicht die heilige Kuh, sondern funktioniert in 99% der Fälle. Ich würde sogar sagen, es sollte normalerweise funktionieren und wenn es nicht tut, dann ist etwas verkehrt am System und nicht an der Anzeige. Dein Fall war eher was Besonderes und gibt keinen Anlass dafür jetzt auf hostname vollständig zu verzichten. Die Tabelle ist zwar schön, sie würde ich allerdings als addon sehen und nicht als Ersatz. Und der Punkt, warum hostname nicht ging lag nicht an der box-info, sondern an deiner Sondereinstellung.
Ich will ja nicht deine Tabelle weghaben, obwohl ich persönlich sie als überflüssig sehe. Lass uns mal die Tabelle da anzeigen, um solche Fälle wie deiner zu detektieren. Box-info wird nicht die einzige Stelle in FREETZ sein, die hostname nutzt. Mit dieser Doppelanzeige nach meiner und deiner Art würden wir dem Benutzer seine Fehlersuche in solchen Fällen erleichtern.

Edit:
@Lars: Ich hatte mir Code von Gero013 genauer angeschaut und meine Kritikpunkte und Verbesserungsvorschläge hier kündig gemacht, wie ich es gerne realisieren würde. So mache ich immer, bevor ich hier etwas Fertiges poste. Seine Meinung dazu weiß ich nun. Ich mache es trotzdem weiter. Danach könnt ihr entscheiden, was euch besser gefällt.

MfG
 
@Ralf: Ich kenne mich mit awk sehr schlecht aus, so wie ich es aber verstanden hatte (und was man dabei standardmäßig tut) werden da die Sachen spaltenweise gelesen. Daher waren in der awk-Variante Kommentare besser behandelt als in sed-Variante. Bei sed-Variante kam immer das letzte Wort zum erscheinen (auch nach #). Daher hatte ich angemerkt, dass es bei sed-Variante nicht ging. Kommentare in hosts sind übrigens nichts Ungewöhnliches.

MfG
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.