Radkarte von Johannes Formann

Mai 16th, 2016

osm_logoIch habe ja bereits einmal über OpenStreetMap als Fahrradkarte geschrieben. Seit mittlerweile mehreren Jahren verwende ich die hervorragenden, von Johnannes Formann bereitgestellte Radkarte auf Basis von OpenStreetMap. Leider bin ich erst sehr selten dazu gekommen, den großartigen “FixMe”-Layer zu berücksichtigen und neue Informationen nachzupflegen.

Flattr this!

Cisco Type 7 Passwörter entschlüsseln

Februar 11th, 2016

Relativ früh in meiner Laufbahn als Netzwerkadministrator habe ich erfahren, dass Passwörter auf Cisco-Routern manchmal reversibel gespeichert werden. Da es nicht immer praktikabel ist, auf einem entsprechenden Gerät einfach “no service password-encryption” einzugeben, gibt es diverse Skripte zur Umkehrung dieser Verschlüsselung. Damit ich nie wieder suchen muss lege ich ein Skript, von dem ich leider keine Ahnung habe wer der ursprüngliche Autor ist, hier ab:

#!/usr/bin/perl
use File::Copy;

############################################################################
# Vigenere translation table
############################################################################
@V=(0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41, 0x2c, 0x2e,
    0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44,
    0x48, 0x53, 0x55, 0x42, 0x73, 0x67, 0x76, 0x63, 0x61, 0x36, 0x39,
    0x38, 0x33, 0x34, 0x6e, 0x63, 0x78, 0x76, 0x39, 0x38, 0x37, 0x33,
    0x32, 0x35, 0x34, 0x6b, 0x3b, 0x66, 0x67, 0x38, 0x37);
############################################################################

############################################################################
# Usage guidelines
############################################################################
if ($ARGV[0] eq ""){
   print "This script reveals the IOS passwords obfuscated using the Vigenere algorithm.n";
   print "n";
   print "Usage guidelines:n";
   print " cdecrypt.pl 04480E051A33490E     # Reveals a single passwordn";
   print " cdecrypt.pl running-config.rcf   # Changes all passwords in a file to cleartextn";
   print "                                  # Original file stored with .bak extensionn";
}

############################################################################
# Process arguments and execute
############################################################################
if(open(F,"<$ARGV[0]")){    # If argument passed can be opened then convert a file
  open(FO,">cdcout.rcf") || die("Cannot open 'cdcout.rcf' for writing ($!)n");
  while(<F>){
    if (/(.*passwords)(7s)([0-9a-fA-F]{4,})/){     # Find password commands
      my $d=Decrypt($3);                             # Deobfuscate passwords
      s/(.*passwords)(7s)([0-9a-fA-F]{4,})/$1$d/;  # Remove '7' and add cleartext password
    }
    print FO $_;
  }
  close(F);
  close(FO);
  copy($ARGV[0],"$ARGV[0].bak")||die("Cannot copy '$ARGV[0]' to '$ARGV[0].bak'");
  copy("cdcout.rcf",$ARGV[0])||die("Cannot copy '$ARGV[0]' to '$ARGV[0].bak'");
  unlink "cdcout.rcf";
}else{                      # If argument passed cannot be opened it is a single password
  print Decrypt($ARGV[0]) . "n";
}

############################################################################
# Vigenere decryption/deobfuscation function
############################################################################
sub Decrypt{
  my $pw=shift(@_);                             # Retrieve input obfuscated password
  my $i=substr($pw,0,2);                        # Initial index into Vigenere translation table
  my $c=2;                                      # Initial pointer
  my $r="";                                     # Variable to hold cleartext password
  while ($c<length($pw)){                       # Process each pair of hex values
    $r.=chr(hex(substr($pw,$c,2))^$V[$i++]);    # Vigenere reverse translation
    $c+=2;                                      # Move pointer to next hex pair
    $i%=53;                                     # Vigenere table wrap around
  }                                             #
  return $r;                                    # Return cleartext password
}

Flattr this!

Garmin GPSMAP 62 startet nicht mehr

November 28th, 2015
2a70d1f3-b62f-4b4e-8beb-beace88d1389_l

Garmin GPSmap 62st

In letzter Zeit passiert es immer häufiger: Mein Garmin GPSMAP 62st bekommt neue Geocaching.com Pocket-Queries als GPX-Dateien aufgespielt, und stürzt beim folgenden Einschalten immer wieder ab.

Die Lösung war bisher immer, ihn nochmal im USB-Speicher-Modus zu starten. Klappt dies nicht mehr automatisch, kann man ihn so dazu zwingen: Während man auf die “Hoch”-Taste des Steuerkreuzes drückt das USB-Kabel einstecken, und warten bis das USB-Symbol angezeigt wird. Erst dann die Taste loslassen.

Nun kann man die zuletzt eingespielten Dateien entfernen, meist startet er danach wieder. Es liegt auch nicht an den Dateien, die man nach der Wiederbelebung einfach nochmal hinlegen kann. Meine Vermutung geht in Richtung einer internen, korrupten Datenbankdatei.

Manchmal reicht es sogar schon, ihn einmal ohne die Micro-SD-Karte zu starten, auf der meine GPX-Dateien immer liegen.

Einmal half aber nichts von alledem. Ich fürchtete schon, dass mein Garmin das Zeitliche gesegnet hätte. Bevor ich ihn komplett zurückgesetzt habe fand ich aber per WebUpdate eine neue Firmware-Version, die ich per oben beschriebenem Zwangs-Massenspeicher-Modus installieren konnte. Danach startete er, als wäre nichts gewesen.

Flattr this!

Mac Mini Neustart nach Stromausfall

Oktober 8th, 2015

Ich war kürzlich in der Situation, dass ich meinen MacMini, der zu Hause als Videorecorder mit EyeTV läuft, neustarten wollte. Der Tuner hatte sich (mal wieder…) aufgehängt.

Da ich aus der Ferne den Rechner samt Tuner stromlos schalten kann, dachte ich hier auf der sicheren Seite zu sein. Also fuhr ich den Mac per ScreenSharing sauber herunter, schaltete den Strom aus und danach wieder ein. Vorher prüfte ich natürlich, ob die entsprechende Option aktiviert ist.

Restart after Powerloss

Restart after Powerloss

Leider startete der Rechner nicht wieder. Eine Recherche ergab, dass alles korrekt konfiguriert ist. Eine Kontrolle per Shell bestätigte, dass autorestart aktiviert war:

$ pmset -g
Active Profiles:
AC Power		-1*
Currently in use:
 hibernatemode        0
 womp                 1
 networkoversleep     0
 sleep                0 (sleep prevented by screensharingd)
 Sleep On Power Button 1
 ttyskeepawake        1
 hibernatefile        /var/vm/sleepimage
 autorestart          1
 disksleep            10
 displaysleep         0

Eine weitere Suche im Internet brachte mir dann eine Erklärung. Der Neustart nach Stromausfall funktioniert nur, wenn der Rechner nicht sauber heruntergefahren wurde. Will man dennoch den Rechner herunterfahren, und dann per Reset neu starten, muss man dies per halt -u machen. Dann fährt er zwar herunter, schaltet aber erst nach 5 Minuten hart aus. Dies ist für den sauberen Shutdown mit einer USV gedacht, und funktioniert tatsächlich.

Flattr this!

Meine zwölf besten Photos aus 2014

Januar 12th, 2015

Auch dieses Jahr habe ich meine Photos des vergangenen Jahres nochmal Revue passieren lassen und die besten ausgesucht. Um meine Bilder besser präsentieren zu können habe ich mir allerdings das auf Photos spezialisiertes CMS (Content Management System) Koken auf einer anderen Domain installiert. Ab sofort gibt es also unter HAL.de in unregelmäßigen Abständen Photos von mir zu sehen. Fangt am besten mit meinen Best of 2014 an.

Flattr this!

E-Mails einer Mailbox neu zustellen

März 22nd, 2014

©Rosa Rotkraut / photocase.com

©Rosa Rotkraut / photocase.com

Zwischendurch mal ein kleiner Tipp, wie man E-Mails, die in einer Mailbox im mbox-Format gelandet sind, wieder einem Mailserver zuführen kann.

nach Empfänger in der eMail
formail -s sendmail -t < mailbox
an eine bestimmte Adresse
formail -s sendmail recipient@example.com < mailbox

Flattr this!

Wie ich mir die Zukunft vorstelle…

März 17th, 2014

In letzter Zeit gibt es immer mehr sogenannte SmartWatches, die als Zubehör zum Telefon (Smartphone) fungieren sollen. Dies hat mich daran erinnert, dass ich schon in den 90ern eine Vision hatte, wie die Zukunft der Informationstechnologie aussehen könnte.

Es begann mit einem Palm III

© knallgrün / photocase.com

© knallgrün / photocase.com

Damals besaß ich meinen ersten PDA (Personal Digital Assistant), einen Palm III. Für mich als Oberstufenschüler war das ein seltsames Gefühl, ein so teures Gerät quasi täglich mit mir herumzuschleppen. Trotz seiner im Rückblick ziemlich eingeschränkten Kommunikations­fähigkeit war es faszinierend – mein digitales Adressbuch, topaktuell wenn ich daran gedacht hatte ihn mit meinem PC zu synchronisieren. Dazu noch die Möglichkeit, Notizen, meinen Kalender, und diverse kleinere Programme auch unterwegs zu nutzen.

Ergänzt wurde das ganze durch eine Armbanduhr, eine Timex DataLink. Diese Uhr hatte mein Vater von einer USA-Reise mitgebracht, auch sie konnte man mit dem PC synchronisieren – Kabellos. Man musste nur die entsprechende Software starten, die Uhr in den Synchronisationsmodus schalten, und vor den Bildschirm halten. Dann blitzten Linienmuster auf, in denen alle Informationen kodiert waren, die von der Uhr per Photodiode erfasst wurden.

Einziges Manko war, dass der PC zu Hause immer noch der Dreh- und Angelpunkt der Information war. Es gab keine Möglichkeit, im Palm etwas einzutragen, und später unterwegs per Armbanduhr auf die Information zuzugreifen, es sei denn man hatte zwischendurch synchronisiert. Mobiles Internet und Daten in der Cloud waren damals noch Utopie, und auch heute würde ich gerne ohne auskommen.

Die Vision

Daraus erwuchs mit der Zeit folgende Idee: Der Palm war ein hervorragendes Anzeige- und Eingabegerät. Der PC war noch ein bisschen besser für solche Zwecke geeignet. Die Uhr eignete sich nur zum rudimentären anzeigen, aber alle benötigten einen Speicherplatz für meine Informationen.

Aber wieso brauchte jedes Gerät einen eigenen Speicherplatz? Konnte man das nicht optimieren, um das ewige hin-und-hersynchronisieren zu vermeiden? Ich stellte mir vor, die Armbanduhr hätte ausreichend Speicher, um meine Daten aufzunehmen. Sie hätte ich immer dabei, und könnte zumindest die Daten anzeigen, eine Telefonnummer nachschlagen, was vor dem Handyzeitalter durchaus mal vorkam, wenn man z.B. bei Freunden telefonieren wollte, oder eine der damals noch zahlreichen Telefonzellen benutzen musste. Sie könnte mich an Termine erinnern, und meine Notizen anzeigen.

Sollte ich gerade auch meinen Palm zur Hand haben, könnte dieser auf die Daten der Armbanduhr zugreifen, sie anzeigen und mir ermöglichen sie zu bearbeiten. Um das Display zu betreiben, hätte der Palm eine eigene Stromversorgung, wäre diese erschöpft fiele halt ein Eingabegerät weg.

Am PC könnte ich ebenso auf diese Daten zugreifen, vielleicht sogar die Uhr als Datenträger verwenden, anstatt immer eine 3,5″-Diskette in der Jackentasche dabeizuhaben.

Umsetzung heute

© kallejipp / photocase.com

© kallejipp / photocase.com

Mittlerweile könnte man noch einen Schritt weiter gehen – Smartphones könnten diesem kleinen mobilen Datenspeicher als Brücke zum Handynetz dienen, da ihre größere Akkukapazität und bessere Antennen hierfür deutlich besser geeignet sind als eine Armbanduhr.

Die Verbindung könnte per Bluetooth erfolgen, zusätzlich könnte man mit der Cloud synchronisieren. Die Armbanduhr könnte als Authentifizierungsmerkmal benutzt werden, per NFC als Zahlungsmittel dienen oder als RFID-Transponder beim CarSharing das Fahrzeug öffnen.

Unter diesen Umständen könnte ich mir vorstellen, wieder eine Armbanduhr zu tragen. Dies habe ich mir damals abgewöhnt, weil mir der Palm und später mein Handy als Taschenuhr vollkommen ausgereicht hat. Aber eine sogenannte SmartWatch, die verblödet, sobald das Telefon ausser Reichweite ist, kann ich mir nicht vorstellen.

Flattr this!

Meine zwölf besten Photos aus 2013

Januar 9th, 2014

Auch dieses Jahr möchte ich wieder die Zeit nutzen um einen Blick auf das vergangene Jahr zu werfen und eine Auswahl meiner Photos des Jahres zu machen.

Flattr this!

Rewrite-Rules für GET-Parameter

Juli 15th, 2013

(c) BastianDietz / photocase.comManchmal steht man vor dem Problem, dass eine Website auf ein neues oder anderes Content Management System (z.B. Joomla! oder WordPress) umgestellt wird, man aber die alten URLs per Redirect auf die neuen umleiten möchte, z.B. um weiterhin per Google gefunden zu werden.

Intuitiv würde man dann Rewrite-Regeln wie die folgenden schreiben:

RewriteRule ^start/$ /start.html [R=301,L]
RewriteRule ^index.php?page=imprint$ /imprint.html [R=301,L]

Die erste Regel funktioniert auch problemlos, die  zweite allerdings nicht, weil die Parameter eines Requests nicht an der Stelle mit ausgewertet werden. Daher muss man anstelle dieser Regel mit einer Bedingung vorweg arbeiten:

RewriteCond %{QUERY_STRING} ^page=imprint$
RewriteRule ^index.php$ /imprint.html? [R=301,L]

Flattr this!

HTTP mit Redirect auf Kommandozeile

Juni 8th, 2013

Ich habe vor längerer Zeit mal beschrieben, wie man per Telnet oder Netcat einen HTTP-Request ausführen kann. Noch besser geht dies mit dem Perl-Tool lwp-request. Unter Linux findet man die Befehle GET und HEAD, aufgrund der fehlenden Case-Sensitivität gibt es diese nicht unter MacOS X. Behelfen kann man sich mit diesen beiden Alias-Definitionen:

alias GET='lwp-request -m GET'
alias HEAD='lwp-request -m HEAD'

Dann hat man die Möglichkeit, eine Seite abzurufen:

$ GET http://www.example.com

Will man die Header einer Antwort überprüfen ist das HEAD-Kommando nützlich:

$ HEAD http://www.example.com
200 OK
Connection: close
Date: Sat, 08 Jun 2013 11:19:20 GMT
Accept-Ranges: bytes
ETag: "780602-4f6-4db31b2978ec0"
Server: ECS (iad/1984)
Content-Length: 1270
Content-Type: text/html; charset=UTF-8
Last-Modified: Thu, 25 Apr 2013 16:13:23 GMT
Client-Date: Sat, 08 Jun 2013 11:19:21 GMT
Client-Peer: 93.184.216.119:80
Client-Response-Num: 1
X-Cache: HIT

Will man allerdings auch sehen, ob eine Weiterleitung korrekt funktioniert und ob es ein permanenter Redirect ist, benötigt man den Parameter -S:

$ HEAD -S http://www.example.com
HEAD http://www.example.com
302 Found
HEAD http://example.iana.org
200 OK
Connection: close
Date: Sat, 08 Jun 2013 11:20:09 GMT
Accept-Ranges: bytes
ETag: "780602-4f6-4db31b2978ec0"
Server: ECS (iad/1984)
Content-Length: 1270
Content-Type: text/html; charset=UTF-8
Last-Modified: Thu, 25 Apr 2013 16:13:23 GMT
Client-Date: Sat, 08 Jun 2013 11:20:10 GMT
Client-Peer: 93.184.216.119:80
Client-Response-Num: 1
X-Cache: HIT

Flattr this!