Donnerstag, 22. Juni 2017

monit bei einem HTTP-Fehler keinen Alarm absetzen lassen

In der Standardkonfiguration meldet monit einen Alarm, wenn ein HTTP-Check eines Web-Servers eine HTTP-Response grösser/gleich 400 zurück gibt:

If not used, the http protocol test will fail if the status code returned is greater than or equal to 400. You can override this behaviour by using the status qualifier.

Quelle: Monit Version 5.23.0 — HTTP

Was aber, wenn eine HTTP-Response mit einem solchen Code das korrekte Funktionieren eines Web-Servers signalisiert und deshalb keinen Alarm generieren soll? Es gibt Abhilfe:

...
check host web.server.strasse.emeidi.local with address 10.10.10.10
if failed
   port 80
   protocol http
   request "/non/existent.php"
   status = 404
then alert
...

Quelle: Monit monitor http status with 404 page

Mittels des Keywords status = 000 gibt man an, was der tatsächlich erwartete Wert ist.

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 22. Juni 2017

Wenn Embedded Linux-Geräte kein HTTP HEAD verstehen

Netzwerkgeräte in meinem Intranet überwache ich mit der quelloffenen Software monit. Seit ich einen meiner monit-Server auf Debian Stretch upgegradet habe, häuften sich „Geister“-Fehlermeldungen — immer in Bezug auf Checks, welche die Verfügbarkeit von Web-Oberflächen abfragen. Dies in folgender Form:

...
check host web.server.strasse.emeidi.local with address 10.10.10.10
    if failed port 80 protocol http for 10 cycles then alert
...

Mit dem Upgrade auf Debian Stretch wird auch monit von Version 5.9-1+deb8u1 auf Version 5.20.0-6 aktualisiert.

Ich wartete also den Moment ab, in welchem ich per E-Mail die Fehlermeldung erhielt, loggte mich per SSH auf den Server ein und führte zu Debugging-Zwecken eine Abfrage aus — die Idee war, auf dem selben Server die Abfrage zu simulieren, die monit gegen das entfernte System laufen lässt:

$ wget --server-response "http://10.10.10.10/"
--2017-06-22 22:05:25--  http://10.10.10.10/
Verbindungsaufbau zu 10.10.10.10:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 
  HTTP/1.1 200 OK
  Server: Router Webserver
  Connection: close
  Content-Type: text/html
  WWW-Authenticate: Basic realm="TP-LINK Wireless Dual Band Gigabit Router WDR3600"
Länge: nicht spezifiziert [text/html]
Wird in »index.html« gespeichert.

index.html                   [ <=>                              ]   7,66K  --.-KB/s    in 0,01s   

2017-06-22 22:05:25 (754 KB/s) - »index.html« gespeichert [7841]

Dies funktioniert problemlos. Was Cheibs?

Als ich mir die Dokumentation zu monit genauer anschaute, realisierte ich eine feine, aber entscheidende Option:

PROTO(COL) HTTP
     [USERNAME "string"]
     [PASSWORD "string"]
     [REQUEST "string"]
     [METHOD <GET|HEAD>]
     [STATUS operator number]
     [CHECKSUM checksum]
     [HTTP HEADERS list of headers]
     [CONTENT < "=" | "!=" > STRING]

Quelle: Monit Version 5.23.0 — HTTP

Mit [METHOD ] entscheidet man, ob man einen normalen HTTP-Request („GET“) versendet, oder aber nur einen „HEAD“-Request, der nur nach dem Header einer Web-Site frägt. Das spitzfindige an der Sache:

METHOD set the HTTP request method. If not specified, Monit prefers the HTTP HEAD request method to save bandwidth, unless a response content or response checksum is tested. As some webservers may not support the HEAD method, one may want to set the method explicitly.

Dann lass uns das doch mal so simulieren. wget verfügt über die entsprechende Option --spider, die HEAD-Requests versendet:

$ wget --spider --server-response "http://10.10.10.10/"
Spider-Modus eingeschaltet. Es wird geprüft, ob die Datei auf dem Server existiert.
--2017-06-22 22:04:36--  http://10.10.10.10/
Verbindungsaufbau zu 10.10.10.10:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 
  HTTP/1.1 501 Not Implemented
  Server: Router Webserver
  Connection: close
  WWW-Authenticate: Basic realm="TP-LINK Wireless Dual Band Gigabit Router WDR3600"
  Content-Type: text/html
--2017-06-22 22:04:37--  (Versuch: 2)  http://10.10.10.10/
Verbindungsaufbau zu 10.10.10.10:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 
  HTTP/1.1 200 OK
  Server: Router Webserver
  Connection: close
  Content-Type: text/html
  WWW-Authenticate: Basic realm="TP-LINK Wireless Dual Band Gigabit Router WDR3600"
Länge: nicht spezifiziert [text/html]
Datei auf dem Server existiert und könnte weitere Verweise enthalten,
aber Rekursion ist abgeschaltet -- kein Download.

Via: Wget HEAD request?

Et voilà, das war das Problem: Der Embedded Web Server auf dem zu überwachenden Gerät hat Probleme, wenn aus dem nichts ein HEAD-Request kommt. Beim zweiten Anlauf dann ist die Web-Seite offenbar gerendert und der HEAD-Request kann beantwortet werden.

monit scheint nun aber offenbar so programmiert zu sein, dass nach dem ersten Versuch und einer Antwort mit Fehlern kein zweiter Versuch lanciert wird. Deshalb auch die sporadischen Fehlermeldungen.

Wie löst man das Dilemma? Ich wandelte den Test folgendermassen um:

...
check host web.server.strasse.emeidi.local  with address 10.10.10.10
    if failed
	port 80
	protocol http
	with content = "Willkommen"
	for 10 cycles
    then alert
...

Die Anweisung with content = "Zeichenkette" forciert monit, einen GET-Request abzusetzen und keinen HEAD (da nur beim GET-Request ein HTTP-Body mitgeliefert wird). Und schwup, Problem gelöst.

Erweitert

Übrigens: Wem die Ausgabe von wget noch nicht ausreicht, da sie zu wenig geschwätzig ist, kann auch die Debug-Option verwenden:

$ wget --debug --spider --server-response "http://10.10.10.10/"
Setting --spider (spider) to 1
Setting --server-response (serverresponse) to 1
DEBUG output created by Wget 1.19.1 on darwin15.6.0.

Reading HSTS entries from /Users/user/.wget-hsts
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
Spider-Modus eingeschaltet. Es wird geprüft, ob die Datei auf dem Server existiert.
--2017-06-22 22:02:44--  http://10.10.10.10/
Verbindungsaufbau zu 10.10.10.10:80 … verbunden.
Created socket 4.
Releasing 0x00007ff99bc231e0 (new refcount 0).
Deleting unused 0x00007ff99bc231e0.

---request begin---
HEAD / HTTP/1.1
User-Agent: Wget/1.19.1 (darwin15.6.0)
Accept: */*
Accept-Encoding: identity
Host: 10.10.10.10
Connection: Keep-Alive

---request end---
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 
---response begin---
HTTP/1.1 501 Not Implemented
Server: Router Webserver
Connection: close
WWW-Authenticate: Basic realm="TP-LINK Wireless Dual Band Gigabit Router WDR3600"
Content-Type: text/html

---response end---

  HTTP/1.1 501 Not Implemented
  Server: Router Webserver
  Connection: close
  WWW-Authenticate: Basic realm="TP-LINK Wireless Dual Band Gigabit Router WDR3600"
  Content-Type: text/html
Closed fd 4
--2017-06-22 22:02:48--  (Versuch: 2)  http://10.10.10.10/
Verbindungsaufbau zu 10.10.10.10:80 … verbunden.
Created socket 4.
Releasing 0x00007ff99bc23110 (new refcount 0).
Deleting unused 0x00007ff99bc23110.

---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.19.1 (darwin15.6.0)
Accept: */*
Accept-Encoding: identity
Host: 10.10.10.10
Connection: Keep-Alive

---request end---
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 
---response begin---
HTTP/1.1 200 OK
Server: Router Webserver
Connection: close
Content-Type: text/html
WWW-Authenticate: Basic realm="TP-LINK Wireless Dual Band Gigabit Router WDR3600"

---response end---

  HTTP/1.1 200 OK
  Server: Router Webserver
  Connection: close
  Content-Type: text/html
  WWW-Authenticate: Basic realm="TP-LINK Wireless Dual Band Gigabit Router WDR3600"
Länge: nicht spezifiziert [text/html]
Closed fd 4
Datei auf dem Server existiert und könnte weitere Verweise enthalten,
aber Rekursion ist abgeschaltet -- kein Download.

Via: What headers are automatically send by wget?

Sackgassen

Initial befürchtete ich, dass der Web-Server des Zielsystems sich am User-Agent des Requests verschluckt. Doch dies war eine falsche Vermutung. Nichtdestotrotz könnte man monit so konfigurieren, dass es einen alternativen User-Agent sendet:


‚User-Agent‘ header can not be set via ‚http headers‘ array

Und noch ein anderes Beispiel: Trying to configure monit to use https protocol but it sticks with http

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Freitag, 16. Juni 2017

Icon zum PDF-Export in Word aktivieren

Auf der Arbeit bevorzuge ich es, PDFs anstelle von Word-Dateien zu versenden.

Damit das ohne langes herumhangeln in Menus funktioniert, habe ich mir in der Quick Access Toolbar einen Button platziert, der dies auf Knopfdruck bewerkstelligt.

Vorgehen:

  1. Rechtsklick auf Quick Access Toolbar
  2. Customize
  3. Choose commands from: All Commands
  4. Publish as PDF or XPS
  5. Klick auf „Add > >“
  6. OK

Quelle: save file as a .pdf shortcut for Word 2013

image-7357

image-7358

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Freitag, 16. Juni 2017

iPhone-Halterung von Oral-B Genius 8000 hält nicht mehr

Seit dem 8. November 2016 steht in unserem Haushalt eine elektrische Zahnbürste namens Oral-B Genius 8000S White.

Das Ding hat Bluetooth integriert und schwatzt während dem Zähneputzen mit meinem Smartphone. Das Smartphone wiederum ist an einer Halterung mit Saugnapf an der Badezimmerwand angebracht und überwacht mit laufender Front-Kamera, wo im Mund sich die Zahnbürste gerade befindet. Die App stellt dann sicher, dass ich jeden der sechs Zahnbereiche ausreichend lange putze.

Es scheint zu nützen — beim letzten Besuch bei der Dentalhygiene konnte ich meinen Karies-Anteil von über 20 Prozent auf 16 Prozent senken (Zahlen ohne Gewähr). Selbstverständlich ist das keine wissenschaftliche Feststellung, andere Faktoren könnten eventuell auch zu diesem Resultat beigetragen haben. Wir werden über die nächsten Besuche hinweg sehen, ob der Trend anhält.

Wie dem auch sei, seit der Rückkehr aus Island haftet der Saugnapf der Halterung nicht mehr sauber an der Wand. Mein iPhone ist deswegen bereits mehrmals aus ein Meter fünfzig Höhe auf den Plattenboden im Badezimmer gedonnert — glücklicherweise ohne bleibende Schäden für das Telefon. Der Badezimmerteppich hat den Aufprall jeweils abgedämpft.

Im Netz habe ich mich schlau gemacht darüber, wie man einen Saugnapf wieder haftbarer macht. Ohne Erfolg! Probiert habe ich bisher:

Die Suche nach einer permanenten Lösung geht weiter …

Tags: , , , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 21. Mai 2017

Packlisten für Island

Unsere erste Reise nach Island steht vor der Tür, weshalb wir heute nicht das schöne Wetter in der Schweiz genossen haben, sondern primär unsere Koffern gepackt haben.

Geholfen haben uns einige Web-Seiten und YouTube-Videos, welche man eigentlich auf folgende Empfehlung komprimieren kann: Schichten, Schichten, Schichten. Und vielleicht auch noch: Baumwolle (bspw. Jeans) sind böse, da sie viel zu lange brauchen, um zu trocknen.

Zurück zum Schichtprinzip. Unser Vorteil: Als wanderaffiner Schweizer hat man die Funktionsbekleidung längst im Haus und man muss sie somit nur noch in den Koffer packen.

Das einzige, was mir wirklich fehlt: Regenhosen. Ich dachte ich hätte solche das letzte Mal getragen als ich mich das letzte Mal mit dem Velo von zu Hause in die Sek Neuenegg gemacht habe. Falsch gedacht.

Web-Seiten

Videos

Tags: , , ,
Labels: Reisen

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 21. Mai 2017

Beste iOS-App für Offline-Karten

Da ForeverMap 2 nicht mehr weiterentwickelt wird, bin ich für die bevorstehende Island-Reise auf Galileo Pro gewechselt.

Tags: , , , , ,
Labels: Reisen

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 14. Mai 2017

Factory Reset eines Netgear WNDR3700v2, auf dem DD-WRT installiert ist

Momentan läuft bei uns gerade eine massive Aufräumaktion und ich „verschutte“ viele von uns nicht mehr benötigte Dinge auf Tutti.

Unter anderem ein Netgear WNDR3700v2 (802.11n), welcher bis letztes Wochenende in Betrieb war und auf dem DD-WRT lief (DD-WRT kommt mir für kritische Infrastruktur nicht mehr ins Haus — Gefrickel).

Das Ziel war klar: DD-WRT vom Router löschen, das neueste offizielle Firmware des Herstellers installieren und das Gerät danach verkaufen. Doch das ist gar nicht sooo einfach.

Die Anleitung WNDR3700: Restore Factory Firmware in Five Easy Steps wollte bei mir eben gerade nicht so „easy“ klappen.

Folgendermassen habe ich es dann doch hingekriegt:

Das erste Problem war das betätigen des Reset-Buttons des Gerätes. Ich konnte den gewünschten blinkenden Zustand nie herrichten. Deshalb musste eine andere Lösung her — und die ist in diesem Post zum Thread beschrieben:

ssh or telnet to the router
enter the following command at the shell prompt (this effectively deletes the OS causing the router to go in to recovery mode on the next reboot/power cycle):

mtd erase linux

you should see a message similar to:

Unlocking linux ...
Erasing linux ...

wait until you are returned back to the shell prompt
power cycle the router
allow the router to finish booting (the Power LED will be lit solid for 10-15 seconds)
there after the Power LED should be flashing

Quelle:Anton Wan

Trotz Reset-Versuchen trug mein Router immer noch die IP, die ich konfiguriert hatte (und nicht 192.168.1.1). Mit dem Befehl mtd erase linux konnte ich das Gerät tatsächlich platt machen. Ein Neustart resultierte aber weiterhin nicht in den beschriebenen blinkenden Lichtern.

Stattdessen landete das Gerät wie in einem Thread auf der offiziellen Netgear-Web-Site beschriebenen in einem Reboot-Loop:

The power light is constant amber. Every 14th second, all the LAN ports blink amber, the and power light is turns off for half a second.

Quelle: Is my WNDR3700 bricked?

Letzte Hilfe: Router ausschalten, mit einem spitzen Gegenstand den Factory Reset-Knopf drücken, das Gerät starten und den spitzen Gegenstand gesteckt halten. Und zwar lange — bei mir dauerte es ganze 38 Sekunden, doch dann war das Power LED endlich wie gewünscht am blinken.

Auf meinem MacBook Air (mit der statischen IP 192.168.1.2) führte ich dann auf der Kommandozeile im Ordner mit der Firmware-Datei folgende Befehle aus:

$ tftp
tftp> mode binary
tftp> connect 192.168.1.1
tftp> put WNDR3700v2_WNDR37AVv2-V1.0.1.14.img
Sent 7078081 bytes in 4.3 seconds
tftp> quit

Ganz wichtig ist nun, den Router einfach mal werkeln zu lassen. Das kann einige Minuten dauern. Doch danach ist das Ding wieder im ursprünglichen Werkszustand.

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 14. Mai 2017

Anrufer werden auf dem iPhone namentlich identifiziert, ohne dass local.ch oder search.ch installiert sind

Gestern erzählte mir meine Frau von einer „neuen“ Funktion, die ihr iPhone besitze: Erhalte sie Anrufe von Firmen, die nachweislich nicht in ihrem Adressbuch erfasst sind, zeige das iPhone im Anruffenster trotzdem bereits den Firmennamen an (konkret die Planzer Transport AG und die Societe de Navigation).

Ich glaubte ihr das nicht und machte mich auf ihrem iPhone auf die Suche nach einer Schweizerischen Applikation, welche die Telefonnummern bei einem eingehenden Anruf über das Internet nachschlägt. Doch tatsächlich, Fehlanzeige: Ich konnte keine solche App entdecken (am entferntesten kam höchstens noch die Applikation der Schweizerischen Post in Frage, aber ich hatte noch nie von dieser Funktionalität in Bezug auf diese App gelesen).

Darauf begann ich, im Netz nachzuforschen. Allgemein bekannt ist, dass die Apps von search.ch und local.ch eine solche Funktionalität mitbringen, wobei meistens aber dieses eine Feature zum Blockieren von Callcenter-Anrufen prominent besprochen wird. Diese Apps waren aber nicht installiert (bei mir mittlerweile local.ch).

Schlussendlich fand ich aber dann doch die (vermutete) Lösung des Rätsels: „Swisscom Advanced Calling“.

Swisscom hat ihr 4G/LTE-Datennetz in der Schweiz und dem Fürstentum Liechtenstein für die IP-Telefonie (Voice over LTE-Technologie) fit gemacht. VoLTE sorgt bei Kunden mit entsprechendem Smartphone für ein noch besseres Sprach- und Telefonie-Erlebnis. Ein weiterer Meilenstein ist WiFi Calling, das nebst Surfen auch Telefonieren über jeden beliebigen WLAN Zugang möglich macht.

Namensanzeige

Die Namen von Personen und Firmen, die ihre Nummer in das öffentliche Telefonbuch eingetragen haben, werden bei einem ankommenden oder verpassten Anruf auf dem Gerät angezeigt.

Quelle: Advanced Calling Telefonie auf höchstem Niveau erleben.

Tags: , , , , , ,
Labels: Schweiz

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 14. Mai 2017

iPhone zeigt Landing Page eines WLAN-Gästeportals nicht an

Am Mittwoch nahm ich beruflich im Hotel Mövenpick in Egerkingen an einem Workshop teil. Abgesehen vom kalten Duschwasser (das Hotel war in der Nacht vom Mittwoch auf den Donnerstag restlos ausgebucht) ein sehr angenehmer Aufenthalt!

Ein Arbeitskollege hatte aber anfänglich mit dem Gästeportal des kostenlosen WLAN zu kämpfen. Obwohl er sich jeweils mit dem WLAN verband, zeigte sein iPhone die sogenannte „Landing Page“ des Gästeportals nicht an. So war es ihm nicht möglich, sich mit Vornamen, Nachnamen und E-Mail-Adresse zu registrieren und den Internetzugang freizuschalten.

Mit meinem iPhone klappte die Registrierung problemlos, wobei sich das Telefon sowieso die meiste Zeit im Swisscom-WLAN einbuchte. Der Kollege war aus Wien und kam deshalb nicht in den Genuss von WLAN-Roaming seines Mobilfunkanbieters.

Doch wie löst man ein solches Problem? Ein kurze Google-Suche später die Erkenntnis:

Load the Authentication / Login Page manually

To load the login page, you have to get the router gate IP. You can get router gateway IP address from Wi-Fi details screen. To get router IP, go to iPhone Settings > Wi-Fi > tap on “i” of selected Wi-Fi network > Next Screen DHCP Tab > Router IP.

Now copy this router IP Address and type into your browser address area and enter to load the page.

Your browser will load the Wi-Fi provider’s authentication page, fill out the necessary details on this page before submitting.

Once you submit and the provider authenticates your connection, then you can start to enjoy the free Wi-Fi.

Quelle: How to Solve Wi-Fi Login Page not Loading Issue in iPhone & Connect Wi-Fi HotSpot

Diesen Trick kannte ich zugegebenermassen selber noch nicht: Man surfe einfach die IP des Gateways an (diese Informationen hat das iPhone vom DHCP-Server erhalten), und die Landing Page erscheint. Genau so funktionierte es auch bei dieser WLAN-Infrastruktur. Nett!

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 13. Mai 2017

Wein aus dem kalifornischen Napa Valley

Vor einigen Jahren erfuhr ich im Gespräch mit einem damaligen Arbeitskollegen vom Gerücht, das Weine aus dem Napa Valley nicht zwingend aus Trauben hergestellt würden, die vor Ort gewachsen sind. Diese Vermischung mit Trauben anderer Herkunft müsse so nicht deklariert werden, da die USA kein AOC kennen würden …

Bestätigen konnte ich diese Vermutung nie, aber auch nie widerlegen.

Über Ostern 2017 war ich wieder einmal in Kalifornien und besuchte dabei auch das Napa Valley und einige der dortigen Wineries — zum ersten Mal die Rutherford Hill Winery, gefolgt von einem köstlichen Mittagessen in der benachbarten Auberge du Soleil mit einer Flasche Pinot Noir Carneros von Merryvale (der für Schweizer bekannt klingende Familienname von René Schlatter, der auf der Etikette vermerkt ist, lässt richtig vermuten: Herr Schlatter ist tatsächlich Schweizerischer Abstammung). Anschliessend weiter zu Frog’s Leap (da war ich mit Stephanie bereits einmal). Die Krönung dann bei Robert Mondavi in Oakville, wo ich nun bereits vier mal an einer Besichtigung teilgenommen habe.

Doch erst bei diesem Mal fiel mir bei den einführenden Erläuterungen im Besammlungsraum die Bemerkung unseres Tour Guides auf: Nur 4 Prozent der kalifornischen Weinproduktion erfolge im Napa Valley selber. Stünde auf einer Flasche Wein „Napa Valley“, müssen die Trauben auch im fünf mal dreissig Meilen langen Tal gewachsen sein. Steht sogar ein konkreter Ort auf der Flasche, müssen die Trauben aus dieser spezifischen Gemeinde des Tals stammen, bspw. Oakville (bei Mondavi).

Wahrscheinlich hatte mein Walliser-Kollege eine solche Erläuterung der Spur nach gehört und erzählte die Geschichte nach seinem Verständnis der Sitiattion.

In der Folge achtete ich mich viel aufmerksamer auf die Etiketten der Weine, bspw. bei Whole Foods, aber auch heute gerade in der Mondovino-Broschüre.

Während der Laie nur auf den Weinproduzenten schaut („Robert Mondavi“, „Behringer“) verpasst nur allzu schnell, dass auf den Weinetiketten plötzlich nur „California“ steht. Gemäss den Ausführungen des Tour Guides könnten die Trauben aus dem ganzen Staat Kalifornien stammen.

Tun sie wohl auch, denn auf der Fahrt der Küste entlang von Los Angeles nach San Francisco fielen uns Hektaren um Hektaren an Weinreben auf. Von hier kommen dann wohl die restlichen 96 Prozent der kalifornischen Weinproduktion und werden auch von den grossen Namen verwendet, um günstigere Weine herzustellen.

Ob das nun Kundenverarsche ist oder übliches Geschäftsgebahren muss jeder selber entscheiden. Wie üblich mit dem Portemonnaie.

Tags: , , , , , , , ,
Labels: Reisen

Keine Kommentare | neuen Kommentar verfassen