SSH Angriffe verhindern und verwirren

Ein leidiges Thema für alle Linux Server Besitzer: wie wehre ich sinnvoll SSH Angriffe auf Port 22 ab?
Grundsätzlich sollte die SSH Konfiguration root-Anmeldungen verbieten. Dafür die /etc/ssh/sshd_config ändern:

Port 1337

(Ändert den Standardport 22 auf 1337)

und

PermitRootLogin no

(verbietet root Login)

und

AllowUsers Keinroot

(Erlaubt nur Anmeldungen vom User „Keinroot“)
Keinroot ist ein User ohne priviligierte Rechte. Zum Anlegen in der Bash eingeben:

useradd Keinroot

Anschließend den SSH-Daemon neustarten:

/etc/init.d/ssh restart

Möchte man seine Angreifer noch ein wenig verwirren, das folgendes Script an einem beliebigen Ort anlegen und ausführbar machen:

touch nc-flood.sh
chmod +x nc-flood.sh

Und die Datei mit folgendem Inhalt füllen:

#!/bin/bash
while :
do
cat /dev/urandom | netcat -l -p 22 > /dev/null
done

Um das Script im Hintergrund laufen zu lassen, folgenden Befehl ausführen:

nohup ./nc-flood.sh &

Prüfen ob das Script läuft:

ps -aux | grep netcat

Verbindet sich nun ein Client auf den Port 22, wird er mit Zufallszahlen überschüttet. Das sollte man nur machen wenn der Server eine Trafficflat hat.

§246 StGB

Alles wird teurer, größer, länger usw. Nur das StGB nicht:

Wer eine fremde bewegliche Sache, die er in Besitz oder Gewahrsam hat, sich rechtswidrig zueignet, wird wegen Unterschlagung mit Gefängniß bis zu drei Jahren und, wenn die Sache ihm anvertraut ist, mit Gefängniß bis zu fünf Jahren bestraft.
Sind mildernde Umstände vorhanden, so kann auf Geldstrafe bis zu dreihundert Thalern erkannt werden.
Der Versuch ist strafbar.

§. 246 Strafgesetzbuch für das Deutsche Reich (1871)

dagegen steht:

(1) Wer eine fremde bewegliche Sache sich oder einem Dritten rechtswidrig zueignet, wird mit Freiheitsstrafe bis zu drei Jahren oder mit Geldstrafe bestraft, wenn die Tat nicht in anderen Vorschriften mit schwererer Strafe bedroht ist.

§246 Abs.1 StGb (aktuell, also von 2011)

Daher folgende (nicht ganz ernst gemeinte) Überlegung:

die Lebenserwartung eines neugeborenen Jungen betrug 1871/81: 35,6 Jahre
die Lebenserwartung eines neugeborenen Mädchen betrug 1871/81: 38,5 Jahre

die o.g. Straftat büßte also zu der damaligen Zeit bei Männern ca. 8,4%, bei Frauen 7,8% Lebenszeit ein.

die Lebenserwartung eines neugeborenen Jungen betrug 2001/03: 75,6 Jahre
die Lebenserwartung eines neugeborenen Mädchen betrug 2001/03: 81,3 Jahre

die o.g. Straftat büßt in der Neuzeit also bei Männern nur noch ca. 3,97% bei Frauen 3,7% Lebenszeit ein.

Bezieht man den gebüßten Anteil der Lebenszeit beim Erlaß des Gesetzes auf die heutige Zeit, muss ein Mann also ca. 6,35 Jahre und eine Frau 6,34 Jahre büßen.
Da unser Grundgesetz allerdings sagt, dass Frauen und Männer gleichberechtigt sind (Art. 3, Satz 2), kann man sich auf 6,3 Jahre oder glatt 6 Jahre einigen. Dies entspricht einer Verdopplung der sonst üblichen Haftzeit.

Ich gebe zu, dass der Vergleich gewaltig hinkt. Zumal sich die Lebenserwartung auf Neugeborene bezieht. Da eine Verurteilung nach §246 StGB aber erst mit Eintritt der Volljährigkeit geschieht, muss für eine ernsthafte Berechnung andere Werte hinzugezogen werden. Vorallem deshalb da neben dem Anstieg der „generellen“ Lebenserwartung auch die Säuglingssterblichkeit drastisch gesunken ist.

Hierzu einen sehr interessanten Artikel:
http://www.flegel-g.de/wahrheit-luege.html

Leuchtkasten reloaded

Für einen Leuchtkasten á la Rembrandt nehme man…

1. einen Leuchtkasten, vorzugsweise gebraucht (hier in den Maßen 120 x 80cm):



2. sieben neue warmweiße Leuchtröhren mit sieben neuen elektronischen Schnellstartern.
(leider ohne Bild)

3. ein schönes Bild:

Hier: Rembrandts „die Nachtwache“, geplottet auf 120×80 cm lichtdurchlässiger Folie.

4. Ergebnis:

Dr. Martens ORIGINAL vs. Dr. Martens VINTAGE (updated: 30.11.2010)

Seit Dr. Martens wieder Schuhe in England herstellen, kann man sie auch ohne moralische Bedenken wieder kaufen. Anbei ein paar Impressionen aus dem Vergleich: alt gegen neu; ORIGINAL gegen VINTAGE. Beide Stiefelpaare wurden in England hergestellt: einmal vor dem Outsourcing nach China (≤2003) und einmal danach (≥2007).

(Bilder anklicken zum Vergrößern – pro Bild zwischen 300 und 700 kB!)

(ORIGINAL: Datum der Herstellung unbekannt, auf jeden Fall vor 2003.)

(VINTAGE: Herstellung wahrscheinlich zwischen 2009 und 2010)

(ORIGINAL: das klassische abflachen der Tips nach langem Gebrauch)

(VINTAGE: zwei Wochen getragen, also fast neu)

(ORIGINAL: Ein Schuhmacher erklärte mir einmal, dass Ösen nur dann ausfransen wenn das Werkzeug stumpf wird.)

(VINTAGE: Auch hier sind die Ösen ausgefranst.)

(ORIGINAL links; VINTAGE rechts: die Innennaht ist nahezu identisch. Lediglich die brüchige Umrandung fehlt bei der Neuauflage.)

(ORIGINAL links; VINTAGE rechts: das Profil hat sich verändert. Die Gummimischung im alten Schuh ist inzwischen so hart, dass das „Bouncing Soles“ keine Bedeutung mehr hat. Man beachte auch das „The Original“ auf der alten Schuhsohle.)

(VINTAGE: „MADE IN ENGLAND“. Der Schriftzug fehlt auf der chinesischen Variante.)

(VINTAGE: eine stabile Naht verhindert, dass sich der Schuh an dieser sehr stark belasteten Stelle auflöst.)

(VINTAGE: eine ebenfalls sehr stark beanspruchte Stelle. Alle Dr. Martens die ich bis jetzt besaß sind mir am Knick früher oder später aufgegangen. Da die Nahtlöcher aber ausreichend groß dimensioniert sind, kann man sie einfach von Hand nachnähen wenn der Faden dort reißt.)

Fazit: meiner Meinung nach, handelt es sich bei den VINTAGE Dr. Martens um eine gute Kopie, aber kein Original. Letztendlich bemängele ich nicht die Verarbeitung, sondern die Qualität des Leders. Es wirkt auf mich viel brüchigiger und vielleicht sogar „billiger“ als das, das vor Jahren verarbeitet wurde. Die Punzierung, also die kleinen Poren auf dem Leder lässt es einfach ungewohnt erscheinen. Das sieht man gut auf dem Ösenbild: während das alte Leder richtig speckig und zäh aussieht, was es auch ist und auch schon beim Kauf der ORIGINAL war, könnte man meinen, dass das neue Leder ausgetrocknet und brüchig sei. Prophylaktisch habe ich deshalb die VINTAGE sehr gut eingefettet, und das auch häufiger als ich es sonst bei Lederschuhen machen. Und siehe da: das Fersenleder ist trotzdem nach knapp zwei Monaten gebrochen (ein Bild davon folgt).
Das macht die VINTAGE nicht zu schlechten Schuhen, vielleicht habe ich auch nur ein Montagspaar erwischt, aber man sollte sich überlegen ob die „Good ol‘ Docs“ wirklich noch so „good ol‚“ sind.

Sollten Leser dieses Artikels andere oder ähnliche Erfahrungen mit den VINTAGEs gemacht haben, so bitte ich diese in die Kommentaren einzutragen.

Nachtrag vom 21.11.2010:

Das defekte Fersenleder.

Nachtrag vom 30.11.2010:
Die Schuhe fette ich mit ganz normalem handelsüblichen Lederfett, das allerdings Bienenwachs enthält. Gerade im Winter schont Wachs das Leder, welches sonst Salz und übermäßig Feuchtigkeit aufnimmt.
Zur Fersenlederreparatur verweise ich auf „Fresh Shoes“ Schuhmachermeister Manfred Meyer aus Stuttgart. Er hatte mir vor einem halben Jahr ein Fersenleder in meinen Coyote Cowboyboots erneuert. Ich hatte ihm die Boots geschickt, weil ich hier in Mönchengladbach keinen Schuster gefunden habe, der sich an Schlangenlederstiefeln versuchen wollte. (O-Ton: „dazu fehlt mir die Maschine!“ – gemeint war eine Sattlernähmaschine).
Natürlich gibt es inzwischen massig Online-Schuster, sogar bei eBay, wohl unterscheiden sie sich heftig im Preis. Der erste, den ich anschrieb, machte mir für die Reparatur einen Kostenvoranschlag von über 200€, weil er die Stiefel zerlegen wollte. Herr Meyer hat mir letztendlich die Stiefel inkl. neuer Absätze und Versand für 40€ repariert. 18€ davon für das Fersenfutter.

XBMC Erweiterung des Webinterfaces um Hotkeys

Um die wichtigsten Aktionen auf dem XBMC über das Webinterface auszuführen, muss die Datei am Ende des Artikels heruntergeladen und in das Verzeichnis: /E/XBMC/web entpackt werden. Gegebenenfalls die alte default.asp sichern!

Die modifizierte default.asp erweitert um folgende Tastaturkürzel („Hotkeys“):

  • ↑  = Item Up
  • ↓ = Item Down
  • ← = Item Left
  • → = Item Right
  • Space = Return to previous menu
  • Return = Play/select current item
  • + = Volume Up
  • – = Volume Down

(Siehe dazu Zeile 079 – 131; 136-137)

Leider wird bei der Lautstärkeregelung der initiale Lautstärkewert nicht übernommen. Das heißt, dass der Lautstärkepegel zuerst automatisch auf 50% abgesenkt bzw. angehoben wird. +/- verändert ihn anschließend um jeweils 5%.

DOWNLOAD: Modifizierte default.asp v1.0.0

Der Quelltext:


<%
    if (isset("Action")) {
        if (Action == "UnqueMusicplaylist") {
            var ItemCount;
            var z;
            ItemCount = xbmcCommand("catalog","items");
            for (z = 0;  z < ItemCount;  z = z + 1) {
                // dirty workaround, cause unque, + z won't work
                xbmcCommand("navigate", Action);
                xbmcCommand("catalog","unque");
            }
            Action = "musicplaylist";          
        }
        xbmcCommand("navigate", Action);
    }
    
    if (isset("command")) {
        // execute a few commands before listing the contents
        if (command == "select") {
            xbmcCommand("catalog", "select," + item);
        } else if (command == "unque") {
            xbmcCommand("catalog", "unque," + item);
        }
    }

    var navigatorstate;
    var BannerClass;
    var InfoClass;
    var BackgroundClass;
    var ItemFileClass;
    navigatorstate = xbmcCommand("navigatorstate");

    if (isset("DisplayConfiguration")) {
        BannerClass = "SiteBannerConfiguration";
        InfoClass = "SiteInfoConfiguration";
        BackgroundClass = "SiteBackgroundConfiguration";
    } else if (navigatorstate == "pictures") {
        BannerClass = "SiteBannerMyPictures";
        InfoClass = "SiteInfoMyPictures";
        BackgroundClass = "SiteBackgroundMyPictures";
        ItemFileClass = "ItemFileMyPictures";
    } else if (navigatorstate == "music") {
        BannerClass = "SiteBannerMyMusic";
        InfoClass = "SiteInfoMyMusic";
        BackgroundClass = "SiteBackgroundMyMusic";
        ItemFileClass = "ItemFileMyMusic";
    } else if (navigatorstate == "videos") {
        BannerClass = "SiteBannerMyVideos";
        InfoClass = "SiteInfoMyVideos";
        BackgroundClass = "SiteBackgroundMyVideos";
        ItemFileClass = "ItemFileMyVideos";
    } else if (navigatorstate == "musicplaylist") {
        BannerClass = "SiteBannerMusicPlaylist";
        InfoClass = "SiteInfoMusicPlaylist";
        BackgroundClass = "SiteBackgroundMusicPlaylist";
        ItemFileClass = "ItemFileMusicPlaylist";
    } else if (navigatorstate == "videoplaylist") {
        BannerClass = "SiteBannerVideoPlaylist";
        InfoClass = "SiteInfoVideoPlaylist";
        BackgroundClass = "SiteBackgroundVideoPlaylist";
        ItemFileClass = "ItemFileVideoPlaylist";
    } else {
        BannerClass = "SiteBannerNone";
        InfoClass = "SiteInfoLogo";
        BackgroundClass = "SiteBackgroundHome";
    }

%><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title> Xbox Media Center - Remote Control </title>
        <link href="styles/Project%20Mayhem/screen.css" rel="stylesheet" type="text/css" />
        <link rel="shortcut icon" href="/styles/Project%20Mayhem/images/ShortcutIcon.ico" type="image/x-icon" />        

        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<script language="JavaScript">
var volume = 50;

// David Kirberich, 28.11.2010, Germany.
// Feel free to modify!

document.onkeydown = function ( event ) {
event = event || window.event;

// To test the keyCode parameter:
//alert(event.keyCode);

if (event.keyCode == 13) // ENTER
{
document.getElementById('control_iframe').src = '/xbmcCmds/xbmcHttp?command=sendKey(256)';
}
if (event.keyCode == 32) // SPACE
{
document.getElementById('control_iframe').src = '/xbmcCmds/xbmcHttp?command=sendKey(257)';
}
if (event.keyCode == 37) // LEFT
{
document.getElementById('control_iframe').src = '/xbmcCmds/xbmcHttp?command=sendKey(272)';
}
if (event.keyCode == 38) // TOP
{
document.getElementById('control_iframe').src = '/xbmcCmds/xbmcHttp?command=sendKey(270)';
}
if (event.keyCode == 39) // RIGHT
{
document.getElementById('control_iframe').src = '/xbmcCmds/xbmcHttp?command=sendKey(273)';
}
if (event.keyCode == 40) // DOWN
{
document.getElementById('control_iframe').src = '/xbmcCmds/xbmcHttp?command=sendKey(271)';
}
if (event.keyCode == 107) // +
{
	if (volume < 100)
	{
		volume += 5;
		document.getElementById('volume_iframe').src = '/xbmcCmds/xbmcHttp?command=setVolume(' + volume + ')';
	}
}
if (event.keyCode == 109) // -
{
	if (volume > 0) {
		volume -= 5;
		document.getElementById('volume_iframe').src = '/xbmcCmds/xbmcHttp?command=setVolume(' + volume + ')';
	}
}
}
</script>
    </head>
  
    <body>

<iframe id="control_iframe" style="height: 0px; width: 0px" src="about:blank"></iframe>
<iframe id="volume_iframe" style="height: 0px; width: 0px" src="about:blank"></iframe>

        <div id="SiteContainer" class="<% write(BackgroundClass); %>">

            <div id="SiteLeftContainer">
                <div id="SiteInfoContainer">
                    <div id="<% write(InfoClass); %>"></div>
                </div>
    
                <div id="SiteMenuContainer">
                    <ul>
                        <li class="MyPictures"><a href="default.asp?Action=pictures"><span>My Pictures</span></a></li>
                        <li class="MyMusic"><a href="default.asp?Action=music"><span>My Music</span></a></li>
                        <li class="MyVideos"><a href="default.asp?Action=videos"><span>My Videos</span></a></li>
                        <li class="MusicPlaylist"><a href="default.asp?Action=musicplaylist"><span>Music Playlist</span></a></li>
                        <li class="VideoPlaylist"><a href="default.asp?Action=videoplaylist"><span>Video Playlist</span></a></li>
                    </ul>
                </div>
      
                <div id="SiteControlContainer">
                    <ul>
                        <li class="Stop"><a href="/xbmcCmds/xbmcForm?command=stop" target="CommandFrame"><span>Stop</span></a></li>
                        <li class="Play"><a href="/xbmcCmds/xbmcForm?command=play" target="CommandFrame"><span>Play</span></a></li>
                        <li class="Pause"><a href="/xbmcCmds/xbmcForm?command=pause" target="CommandFrame"><span>Pause</span></a></li>
                        <li class="Previous"><a href="/xbmcCmds/xbmcForm?command=previous" target="CommandFrame"><span>Previous</span></a></li>
                        <li class="Next"><a href="/xbmcCmds/xbmcForm?command=next" target="CommandFrame"><span>Next</span></a></li>
                    </ul>
                </div>
            
                <div id="SiteSubMenuContainer">
                    <ul>
                        <li class="Subpanel"><a href=""><span>Subpanel</span></a>
                            <ul>
                                <li><a href="SubRemote"><span>Remote</span></a></li>
                                <li><a href="SubConfiguration"><span>Configuration</span></a></li>
                                <li><a href="/xbmcCmds/xbmcForm?command=exit" target="CommandFrame"><span>Dashboard</span></a></li>
                                <li><a href="/xbmcCmds/xbmcForm?command=reboot" target="CommandFrame"><span>Reboot</span></a></li>
                            </ul>
                        </li>
                        
                        <li class="Configuration"><a href="default.asp?DisplayConfiguration=true"><span>Configuration</span></a></li>
                        <li class="Dash"><a href="/xbmcCmds/xbmcForm?command=exit" target="CommandFrame"><span>Dash</span></a></li>
                        <li class="Reboot"><a href="/xbmcCmds/xbmcForm?command=restart" target="CommandFrame"><span>Reboot</span></a></li>
			<li class="Shutdown"><a href="/xbmcCmds/xbmcForm?command=shutdown" target="CommandFrame"><span>Shutdown</span></a></li>
                    </ul>
                </div>
    
            </div>
            
    
    
            <div id="SiteRightContainer">
            
                <div id="SiteBannerContainer">
                    <div id="<% write(BannerClass); %>"></div>
                </div>
                
                <div id="SiteContentContainer">
<%

  if (isset("DisplayConfiguration") ) {


    /*
     * xbmc configuration options
    
      xbmcCfgBookmarkSize(type)
      xbmcCfgGetBookmark(type, parameter, id)
      xbmcCfgAddBookmark(type, name, path [, position])
      xbmcCfgSaveBookmark(type, name, path, position)
      xbmcCfgRemoveBookmark(type, position)
      xbmcCfgSaveConfiguration(filename)
      xbmcCfgGetOption(name)
      xbmcCfgSetOption(name, value)
    
     */
    
    write("<a href='default.asp?DisplayConfiguration=true&page=bookmarks'>bookmarks</a> \n");
    write("<a href='default.asp?DisplayConfiguration=true&page=options'>xbmc options</a> \n");
    write("<a href='default.asp?DisplayConfiguration=true&page=load_save'>load / save</a> \n");

    write("<br />\n");
    write("<br />\n");
    
    
    /* if action isset we want to save / edit or remove something */
    if (isset("action"))
    {
      if (action == "savebookmark")
      {
        if (isset("name") == "1" && isset("path") == "1" && isset("type") == "1" && isset("position") == "1")
        {
          xbmcCfgSaveBookmark(type, name, path, position);
        }
        else
          write("Error");
      }
      if (action == "addbookmark")
      {
        if (isset("name") == "1" && isset("path") == "1" && isset("type") == "1")
        {
          xbmcCfgAddBookmark(type, name, path);
        }
        else
          write("Error");
      }
      if (action == "remove")
      {
        if (isset("page"))
        {
          // return to bookmark page and not to editbookmarks
          page = "bookmarks";
          xbmcCfgRemoveBookmark(type, position);
        }
      }
      if (action == "saveoptions")
      {
        xbmcCfgSetOption("home", home);
        xbmcCfgSetOption("CDDBIpAdres", CDDBIpAdres);
    
        var usef = "no";
        if (isset("useFDrive")) usef = "yes";
        xbmcCfgSetOption("useFDrive", usef);
    
        var useg = "no";
        if (isset("useGDrive")) useg = "yes";
        xbmcCfgSetOption("useGDrive", useg);
    
        xbmcCfgSetOption("dashboard", dashboard);
        xbmcCfgSetOption("dvdplayer", dvdplayer);
        xbmcCfgSetOption("subtitles", subtitles);
        xbmcCfgSetOption("startwindow", startwindow);
        xbmcCfgSetOption("pictureextensions", pictureextensions);
        xbmcCfgSetOption("musicextensions", musicextensions);
        xbmcCfgSetOption("videoextensions", videoextensions);
        xbmcCfgSetOption("thumbnails", thumbnails);
        xbmcCfgSetOption("shortcuts", shortcuts);
        xbmcCfgSetOption("albums", albums);
        xbmcCfgSetOption("recordings", recordings);
        xbmcCfgSetOption("screenshots", screenshots);
    
        var remcodes = "no";
        if (isset("displayremotecodes")) remcodes = "yes";
        xbmcCfgSetOption("displayremotecodes", remcodes);
      }
      if (action == "save")
      {
        xbmcCfgSaveConfiguration("XBoxMediaCenter.xml");
      }
    }
    
    if (isset("page"))
    {
      var i;
      var name;
      var value;
      var options;
    
      if (page == "bookmarks")
      {
        var musicbookmarks = xbmcCfgBookmarkSize("music");
        var picturebookmarks = xbmcCfgBookmarkSize("pictures");
        var videobookmarks = xbmcCfgBookmarkSize("video");
        var filebookmarks = xbmcCfgBookmarkSize("files");
        var programbookmarks = xbmcCfgBookmarkSize("myprograms");
        
    
        /* Add new Bookmark button */
        write("<form name='new_bookmark' method='post' action='default.asp?DisplayConfiguration=true&page=addbookmark'>\n");
        write("  <input type='submit' name='addnewbookmark' value='Add new bookmark'><br>\n");
        write("</form>\n");
    
        /* Display Music Bookmarks */
        write("<form name='music_bookmarks' method='post' action='default.asp?DisplayConfiguration=true&page=editbookmark&type=music'>\n");
        write("  Music Bookmarks:<br>\n");
        write("  <input type='submit' name='action' value='edit'>\n");
        write("  <input type='submit' name='action' value='remove'>\n");
        write("  <select name='position'>\n");
        i = 0;
        for (i=1; i<=musicbookmarks; i=i+1)
        {
          write("    <option value=" + i + ">" + xbmcCfgGetBookmark("music", "name", i) + "</option>\n");
        }
        write("  </select>\n");
        write("</form>\n");
    
        /* Display Picture Bookmarks */
        write("<form name='picture_bookmarks' method='post' action='default.asp?DisplayConfiguration=true&page=editbookmark&type=pictures'>\n");
        write("Picture Bookmarks:<br>\n");
        write("  <input type='submit' name='action' value='edit'>\n");
        write("  <input type='submit' name='action' value='remove'>\n");
        write("  <select name='position'>\n");
        i = 0;
        for (i=1; i<=picturebookmarks; i=i+1)
        {
          write("    <option value=" + i + ">" + xbmcCfgGetBookmark("pictures", "name", i) + "</option>\n");
        }
        write("  </select>\n");
        write("</form>\n");
    
        /* Display Video Bookmarks */
        write("<form name='video_bookmarks' method='post' action='default.asp?DisplayConfiguration=true&page=editbookmark&type=video'>\n");
        write("Video Bookmarks:<br>\n");
        write("  <input type='submit' name='action' value='edit'>\n");
        write("  <input type='submit' name='action' value='remove'>\n");
        write("  <select name='position'>\n");
        i = 0;
        for (i=1; i<=videobookmarks; i=i+1)
        {
          write("    <option value=" + i + ">" + xbmcCfgGetBookmark("video", "name", i) + "</option>\n");
        }
        write("  </select>\n");
        write("</form>\n");
    
        /* Display File Bookmarks */
        write("<form name='file_bookmarks' method='post' action='default.asp?DisplayConfiguration=true&page=editbookmark&type=files'>\n");
        write("File Bookmarks:<br>\n");
        write("  <input type='submit' name='action' value='edit'>\n");
        write("  <input type='submit' name='action' value='remove'>\n");
        write("  <select name='position'>\n");
        i = 0;
        for (i=1; i<=filebookmarks; i=i+1)
        {
          write("    <option value=" + i + ">" + xbmcCfgGetBookmark("files", "name", i) + "</option>\n");
        }
        write("  </select>\n");
        write("</form>\n");
    
        /* Display Program Bookmarks */
        write("<form name='program_bookmarks' method='post' action='default.asp?DisplayConfiguration=true&page=editbookmark&type=myprograms'>\n");
        write("Program Bookmarks:<br>\n");
        write("  <input type='submit' name='action' value='edit'>\n");
        write("  <input type='submit' name='action' value='remove'>\n");
        write("  <select name='position'>\n");
        i = 0;
        for (i=1; i<=programbookmarks; i=i+1)
        {
          write("    <option value=" + i + ">" + xbmcCfgGetBookmark("myprograms", "name", i) + "</option>\n");
        }
        write("  </select>\n");
        write("</form>\n");
      }
      else if (page == "options")
      {
        write("	<form action='default.asp?DisplayConfiguration=true' method='post' name='cfgform' id='cfgform'>" + \
              "		<input name='action' type='hidden' value='saveoptions'>" + \
              "		<input name='page' type='hidden' value='options'>" + \
              "		<table width='500'>");
        write("			<tr>" + \
              "				<td width='200'><label>Home</label></td>" + \
              "				<td><input name='home' type='text' value='"); write(xbmcCfgGetOption("home")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>CDDB IP Address</label></td><td>" + \
              "				<input name='CDDBIpAdres' type='text' value='"); write(xbmcCfgGetOption("CDDBIpAdres")); write("' size='25'><br></td>" + \
              "			</tr>");
    
        // Use F Drive
        write("			<tr>" + \
              "					<td><label>Use F Drive</label></td><td>" + \
              "           <input name='useFDrive' type='checkbox' value='true' ");
              if (xbmcCfgGetOption("useFDrive") == "yes")	write("checked>");
              else write(">");
        write("         <br></td>" + \
              "			</tr>");
    
        // Use G Drive
        write("			<tr>" + \
              "					<td><label>Use G Drive</label></td><td>" + \
              "           <input name='useGDrive' type='checkbox' value='true' ");
              if (xbmcCfgGetOption("useGDrive") == "yes")	write("checked>");
              else write(">");
        write("         <br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Dashboard</label></td>" + \
              "				<td><input name='dashboard' type='text' value='"); write(xbmcCfgGetOption("dashboard")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Dvdplayer</label></td>" + \
              "				<td><input name='dvdplayer' type='text' value='"); write(xbmcCfgGetOption("dvdplayer")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Subtitles</label></td>" + \
              "				<td><input name='subtitles' type='text' value='"); write(xbmcCfgGetOption("subtitles")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Startwindow</label></td>" + \
              "				<td><input name='startwindow' type='text' value='"); write(xbmcCfgGetOption("startwindow")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Picture Extensions</label></td>" + \
              "				<td><input name='pictureextensions' type='text' value='"); write(xbmcCfgGetOption("pictureextensions")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Music Extensions</label></td>" + \
              "				<td><input name='musicextensions' type='text' value='"); write(xbmcCfgGetOption("musicextensions")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Video Extensions</label></td>" + \
              "				<td><input name='videoextensions' type='text' value='"); write(xbmcCfgGetOption("videoextensions")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Thumbnails</label></td>" + \
              "				<td><input name='thumbnails' type='text' value='"); write(xbmcCfgGetOption("thumbnails")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Shortcuts</label></td>" + \
              "				<td><input name='shortcuts' type='text' value='"); write(xbmcCfgGetOption("shortcuts")); write("' size='25'><br></td>" + \
              "			</tr>" );
        write("			<tr>" + \
              "				<td><label>Albums</label></td>" + \
              "				<td><input name='albums' type='text' value='"); write(xbmcCfgGetOption("albums")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Recordings</label></td>" + \
              "				<td><input name='recordings' type='text' value='"); write(xbmcCfgGetOption("recordings")); write("' size='25'><br></td>" + \
              "			</tr>");
        write("			<tr>" + \
              "				<td><label>Screenshots</label></td>" + \
              "				<td><input name='screenshots' type='text' value='"); write(xbmcCfgGetOption("screenshots")); write("' size='25'><br></td>" + \
              "			</tr>");
    
        // Display remote codes
        write("			<tr>" + \
              "					<td><label>Display remote codes</label></td><td>" + \
              "           <input name='displayremotecodes' type='checkbox' value='true' ");
              if (xbmcCfgGetOption("displayremotecodes") == "yes")	write("checked>");
              else write(">");
        write("         <br></td>" + \
              "			</tr>");
    
        write("		</table><br>" + \
              "		<input type='submit' name='save' value='save'>" + \
              "	</form><br>");
      }
      else if (page == "editbookmark")
      {
        if (isset("type") == "1" && isset("position") == "1")
        {
          write("<form name='savebookmark' method='post' action='default.asp?DisplayConfiguration=true&page=bookmarks&action=savebookmark'>\n");
          write("<input name='position' type='hidden' value='" + position + "'>\n");
          write("<input name='type' type='hidden' value='" + type + "'>\n");
          write("  <table width='500' border='0'>\n");
          write("    <tr> \n");
          write("      <td><label>name</label></td>\n");
          write("      <td><input type='text' name='name' value='" + xbmcCfgGetBookmark(type, "name", position) + "'></td>\n");
          write("    </tr>\n");
          write("    <tr> \n");
          write("      <td><label>path</label></td>\n");
          write("      <td><input type='text' name='path' value='" + xbmcCfgGetBookmark(type, "path", position) + "'></td>\n");
          write("    </tr>\n");
          write("  </table><br>\n");
          write("  <input type='submit' name='save' value='save'>\n");
          write("</form>\n");
        }
      }
      else if (page == "addbookmark")
      {
        var data = "<form name='addbookmark' method='post' action='default.asp?DisplayConfiguration=true&page=bookmarks&action=addbookmark'>\n";
        data = data + "  <table width='500' border='0'>\n";
        data = data + "    <tr> \n";
        data = data + "      <td><label>Type</label></td>\n";
        data = data + "      <td>";
        data = data + "        <select name='type'>\n";
        data = data + "          <option value=files>File</option>\n";
        data = data + "          <option value=music>Music</option>\n";
        data = data + "          <option value=myprograms>Program</option>\n";
        data = data + "          <option value=pictures>Picture</option>\n";
        data = data + "          <option value=video>Video</option>\n";
        data = data + "        </select>\n";
        data = data + "      </td>\n";
        data = data + "    </tr>\n";
        data = data + "    <tr> \n";
        data = data + "      <td><label>Name</label></td>\n";
        data = data + "      <td><input type='text' name='name' value=''></td>\n";
        data = data + "    </tr>\n";
        data = data + "    <tr> \n";
        data = data + "      <td><label>Path</label></td>\n";
        data = data + "      <td><input type='text' name='path' value=''></td>\n";
        data = data + "    </tr>\n";
        data = data + "  </table><br>\n";
        data = data + "  <input type='submit' name='save' value='save'>\n";
        data = data + "</form>\n";
    
        write(data);
      }
      if (page == "load_save")
      {
        write("<br><br><a href='default.asp?DisplayConfiguration=true&action=save'>Save</a>\n");
      }
    }


  } else {
 
  
    var z;
    var n;
    var i;
    var data;
  
  
    n = xbmcCommand("catalog","items"); // number of items to list
    file = xbmcCommand("catalog","first");
    
    if ( n > 0) {
        write("                    <ul id=\"ItemList\">\n");
    }
    
    for (z=0; z<n; z=z+1)
    {
      var type = xbmcCommand("catalog","type," + z);
  
  
      data = "                        <li>";
  
      if (type != "directory") {
        // we have a file to play, send command to server when clicked and do not refresh the current page
        data = data + "<div class=\"" + ItemFileClass + "\"></div>";
      } else { 
        data = data + "<div class=\"ItemFolder\"></div>"; 
      }
  
  
      if (file != ".." && navigatorstate != "musicplaylist" && navigatorstate != "videoplaylist" && navigatorstate != "pictures") {
        data = data + "<div class=\"AddQueue\"><a href=\"/xbmcCmds/xbmcForm?command=catalog&parameter=que," + z + "\" target=\"CommandFrame\" title=\"add to queue\"><span>Q</span></a></div>";
      } else if (navigatorstate == "musicplaylist" || navigatorstate == "videoplaylist")	{
        data = data + "<div class=\"RemoveQueue\"><a href=\"default.asp?command=unque&item=" + z + "\" title=\"remove from queue\"><span>R</span></a></div>";
      }
  
  
      if (type != "directory") {
        // we have a file to play, send command to server when clicked and do not refresh the current page
        data = data + "<div class=\"FileName\"><a href=\"/xbmcCmds/xbmcForm?command=catalog&parameter=select," + z + "\" target=\"CommandFrame\">";
      } else { 
        data = data + "<div class=\"FileName\"><a href=\"default.asp?command=select&item=" + z + "\">"; 
      }
      
      data = data + file + "</a></div>";
      
      data = data + "</li>\n";
      write(data);
      
        
      file = xbmcCommand("catalog","next");
    }

    if ( n > 0) {
        write("                    </ul>\n");
    }
    
    if (navigatorstate == "musicplaylist") {
        write ("<a href=\"default.asp?Action=UnqueMusicplaylist\" id=\"UnqueMusciplaylist\"><span>Clear Playlist</span></a>\n");
    }


}
%>
                </div>
    
            </div>
            
        </div>
        
        <div id="SiteCommandContainer">
            <iframe src="about:blank" width="1" height="1" name="CommandFrame"></iframe>
        </div>
  
    </body>
</html>

Vorsicht: AuctionSniper und Ebay Deutschland

Vorsicht bei Käufen auf Ebay Deutschland mit dem AuctionSniper: Ebay registriert dass automatisiert geboten wird und erschwert den Zugang zum Ebay Käuferschutz.
Das wirkt sich so aus, dass beim Öffnen eines Cases („Problem klären“) die amerikanische Anmeldemaske erscheint. Intuitiv loggt man sich ein und eröffnet seinen Fall, welcher nach einigen Tagen auch bearbeitet wird.

Allerdings wird man auf eine finale Entscheidung des Supports vergeblich warten. Ein Anruf beim US Support verriet mir, dass man sich dort nicht für auf ebay.de gekaufte Artikel zuständig fühlt.

Ebay Germany or ebay.de has different policies!

(US Support)

Also rief ich beim deutschen Support an: dort sagte man mir, dass Cases die auf ebay.com eröffnet wurden ausschließlich vom US Support behandelt und geschlossen werden können. Man riet mir mich erneut mit dem US Support auseinanderzusetzen um den Fall zu klären.
Also rief ich wieder in den Staaten an und schilderte mein Problem erneut. Das selbe Ergebnis: different policies, man könne mir nicht helfen.
Und wieder rief ich bei Ebay Deutschland an: man kenne den Sachverhalt mit automatisiertem Bieten nicht, selbst das supportseitige Öffnen meines Cases verläuft erfolglos, da man auf die Ebay US Anmeldemaske weitergeleitet wird. Der Fall würde aber an die zuständige Abteilung weitergeleitet werden, in zwei bis drei Tagen erhalte ich dann eine Antwort und die finale Entscheidung.

Ebay sind machtlos was den Einsatz von Bietbots und Bietplattformen angeht. Um den Benutzern allerdings ein wenig die Suppe zu versalzen, schmeißt man ihnen einfach ein paar Steine in den Weg wenn es darum geht die „Buyer Protection“ (hier: Käuferschutz) in Anspruch zu nehmen. Und was selbst der DE Customer Support nicht wusste: wurde bereits ein Case auf Ebay zu einem gekauften Artikel angelegt, ist es nicht mehr möglich das selbe auf Paypal zu tun.

Das neue Gesetz des Wassermannzeitalters

Vor Jahren fiel mir ein Buch der Fraternitas Saturni in die Hände: es enthält zwei Aufsätze der Frater Gregorius und Johannes. Zudem einen Aufsatz des „Meister Therion“ der Ordo Templi Orientis.

Interessant vorallem wegen des dritten Aufsatzes, der Herleitung der Worte: „Tue was du willst sei das ganze Gesetz“ von Fra. Johannes:

„TUE, WAS DU WILLST IST DAS GANZE GESETZ.
ES GIBT KEIN GESETZ UEBER – TUE, WAS DU WILLST!“
– Das Wort des Gesetzes ist „THELEMA„.

In einem älteren Backup fand ich einen Scan mit teil-OCR des Buchs: DOWNLOAD