Posts mit dem Label LTE werden angezeigt. Alle Posts anzeigen
Posts mit dem Label LTE werden angezeigt. Alle Posts anzeigen

10.08.2015

Werbetrojaner auf dem PC sind lästig

Jetzt bin ich auch mal Opfer geworden.
Wenigstens ein bißchen.
Eigentlich eher Kind 2 mit dem neuen Laptop.
Nicht ich direkt.

Kaum war das Kind aus dem Ferienzeltlager zurück, schoss der Internetverbrauch in die Höhe. Sehe ich bequem an der LTE-Statusseite. Leider muss ich das wegen der monatlichen Quote ein wenig im Blick behalten. Hoffentlich liefert die BIGO bald Glasfaser für den Wetteraukreis, nur mal so nebenbei.

Handy im Firewall gesperrt, aber das war's nicht.
Also Laptop gefilzt und jede Menge Werbetrojaner beseitigt.
Ist das ein lästiges Kroppzeug!

CinemaPlus, CrossBrowser, FastSearch, MyStartSearch, Pro PC Cleaner und noch mehr Schädlinge. Schrecklich. Und wie und wo die sich überall einklinken, das geht ja auf keine Kuhhaut!

Wenn ich mir vorstelle, wie der durchschnittliche deutsche PC aussieht, graut es mir. Ich denke, man bräuchte das Internet nicht so heftig ausbauen, wenn es diesen Schrott nicht gäbe. Kind 2 kam am Mittwoch abend wieder, und bis Samstag abend waren 12 GB verbraucht. Davon ungefähr 11,5 GB von seinem Laptop, der Rest mein Homeoffice. Das Schlimme ist: die meisten Leute merken es nicht, weil sie eine "richtige" Flatrate haben, oder es ist ihnen dann auch egal. Für die normalen DSL-Zugänge gibt es ja keine leicht zugängliche Kontrollmöglichkeit, wieviel Volumen diesen Monat verbraucht wurde.

Das Beste (oder Schlimmste) war ein Uninstall-Programm, das allen Ernstes ein Captcha verlangt hat und sich nach 5 Sekunden ohne Eingabe beendet hat. So eine Unverschämtheit. Grummel.

Das meiste konnte ich manuell beseitigen, aber für die Endkontrolle hab ich dann doch noch ein Hilfsprogramm verwendet, das ähnlich wie ein Antivirus nach Werbeschädlingen sucht.

Musste mal raus.

23.04.2014

Rosbach verweigert sich der Breitbandinitiative Wetterau

 Die WZ meldete kürzlich, dass Rosbach und einige andere Gemeinden sich nicht an der kreisweiten Initiative zum Glasfaserausbau beteiligen wollen. Das finde ich sehr schade, und die genannte Alternative "LTE" ist nicht für stationäres Breitbandinternet geeignet, wenn sich die mobilfunkartigen Verträge nicht ändern.

Das habe ich etwas ausführlicher als Leserbrief geschrieben (veröffentlicht am 17.04.14):
Leserbrief zu "Breitband Wetterau", WZ 11.04.14

Ich lese mit Bedauern, dass die Breitbandinitiative des Wetteraukreises mehrere gewichtige Teilnehmer nicht gewinnen konnte. Rosbach, Karben, Bad Nauheim, Bad Vilbel und Altenstadt, die zusammen mehrere Tausend Haushalte darstellen, haben kein Interesse. Das ist sehr schade, weil der Ausbau durch die Masse an Teilnehmern insgesamt gesehen effektiver und billiger wäre.

Im Fall von Rosbach lese ich, dass die zukünftige Versorgung mit LTE ab 2015 ausreichen soll und "das Risiko zu groß" sei. Hier glaubt man den Versprechungen der Telekom, wie toll LTE ist. Schade, dass ausgerechnet bei wirklich sinnvollen Investitionen in die Zukunft die Risikofreude abnimmt, auf anderen Gebieten nimmt man gern Geld in die Hand und schaut nicht so streng hin. Die Attraktivität von Kommunen beim Zuzug bemisst sich zunehmend an der Internetbandbreite, das sollten Bürgermeister auch bedenken.

Berstadt erfreut sich seit Oktober 2012 an LTE. Am Anfang war auch alles toll, aber mit zunehmender Anzahl an LTE-Kunden wird das Surfen ein tageszeitabhängiges Vergnügen. Formal bietet mir die Telekom "bis zu 16 MBit/s" an. Tagsüber (ich arbeite viel von zuhause) habe ich tatsächlich gelegentlich 10 MBit/s, eher um die 5 MBit/s. Abends, wenn alle zuhause sind und surfen, kann ich froh sein, wenn es noch 1-2 MBit/s sind. Damit machen Videodienste wie Youtube keinen Spaß mehr.

LTE ist eine Funktechnologie, die auf verschiedenen Frequenzen arbeitet. Die billigste Lösung mit der größten Reichweite besteht darin, Funkmasten mit 800 MHz aufzustellen oder bestehende um LTE zu erweitern. Diese Frequenz hat aber mehrere Nachteile: die Geschwindigkeit ist begrenzt (derzeit max. 50 MBit/s), ebenso die Anzahl der Teilnehmer pro Funkzelle.

Außerdem verkaufen Telekom und Vodafone LTE nur mit Verträgen, denen man die Herkunft aus dem Mobilfunksektor ansieht: es gibt eine monatliche Volumenbegrenzung, und wenn das Volumen aufgebraucht ist, wird der Kunde auf 384 KBit/s gedrosselt. Man kann dann Volumen nachkaufen (Telekom: 10 GB für 14,95€), aber der Rest davon verfällt am Monatsende. Eine wirkliche "Flatrate" ist das nicht, und bei jedem größeren Download oder dem gelegentlichen Video greift die Schere im Kopf, ob das denn wirklich sein muss.

Es ist also ein Irrglaube anzunehmen, dass eine ausreichend schnelle Internetversorgung über LTE stattfinden kann. LTE ist eine sehr schöne Technologie, um kleine Datenmengen schnell an Smartphones auszuliefern und flächendeckendes Internet für mobile Geräte zu liefern. Es ist aber aufgrund der technischen Gegebenheiten eben keine Technologie, um Haushalte und Ortschaften mit Breitbandinternet zu versorgen.

Die Telekom und die anderen Mitbieter wurden bei der letzten Frequenzversteigerung vom Regulierer verpflichtet, auf dem "flachen Land" LTE flächendeckend auszubauen, bevor in den Ballungszentren das richtig schnelle LTE mit 100, 150 oder mehr MBit/s installiert werden durfte (mit 1800 und 2600 MHz). Bei staatlichem Zwang findet natürlich nur das Allernotwendigste statt - eben der Ausbau mit der billigen und langsamen 800 MHz-Technologie.

Hingegen ist Glasfaser eine wirklich sinnvolle Investition in die Zukunft. Eine einzelne Glasfaser erreicht Gigabit-Geschwindigkeit mit Laserlicht statt mit Funktechnik. Üblicherweise wird Glasfaser in Bündeln verlegt, um die Kapazität zu erhöhen. Und wenn die Bandbreite der Faser mit einem Laser ausgereizt ist, wird mit kleinem Aufwand ein weiterer Laser einer anderen Wellenlänge dazugenommen.

Nebenbei: dank der internationalen Zusammenarbeit bei der Standardisierung gibt es weltweit nicht weniger als 33 verschiedene Frequenzbänder - deshalb funktionieren die meisten LTE-fähigen Smartphones auch nur "fast überall". In Deutschland werden 800, 1800 und 2600 MHz verwendet, in anderen Ländern sind auch 700, 850, 900, 1500, 1700, 2100, 2300 und 2500 MHz in Verwendung. Das verhindert recht effektiv, billige Geräte aus dem Ausland zu kaufen. Ein Schelm, wer Arges dabei denkt ...

28.02.2014

LTE-Empfangsqualität abfragen (Diagnose-Logfile)

Neulich hab ich mich beschwert, dass man beim alten Modell des LTE-Routers (Telekom LTE 1 bzw. Huawei B390s) nicht die Empfangsqualität abfragen kann.

Und es geht doch! Zwar ziemlich versteckt in den Tiefen der "Erweiterten Einstellungen", aber man kann es doch abfragen.

Wie üblich in Ihrem freundlichen Service-Blog auch gleich wieder die Möglichkeit, diese Daten automatisiert per Skript abzufragen und damit ggfs. regelmäßig zu protokollieren.

Der übliche Trick: mit dem ersten wget-Aufruf geschieht der Login, das Session-Cookie wird gespeichert, und mit dem zweiten Aufruf wird dann die interessante Seite abgerufen.
#!/bin/sh

PATH=/opt/bin:/opt/sbin${PATH:+:$PATH}

H=vodafonemobile.cpe
C=/tmp/cookies.txt
U1="http://"$H"/login.cgi"
U2="http://"$H"/diagnosis_export.cgi?configId=$(date +%s)&FileName=diagnosis.txt"

wget --save-cookies "$C" \
     --keep-session-cookies \
     -q --tries=1 \
     -O /dev/null \
     --post-data 'Username=admin&Password=yourpw' \
     "$U1"

wget --load-cookies "$C" \
     -q --tries=1 \
     -O - \
     "$U2" | \
awk '
{if (NR>=5&&NR<=42){print}}
'

rm -f "$C"
Der Output sieht dann in etwa so aus wie da unten.

Besonders interessant sind die Zeilen bei "RSRP" und "RSRQ". Mit den Werten -90dBm und -8 dB zeigt mir der Router 4 von 5 Balken an. Laut Telekom-Auskunft sind Werte bis -60/-2 möglich, das wäre super-super-optimal. Wenn man das Gerät in der Ausrichtung verändert, darf  RSRP ruhig etwas schlechter werden, falls man dadurch RSRQ verbessern kann. Optimal wäre, wenn beide Werte größer werden (-90 --> -60, -8 --> -2).

Auch sehr hübsch: man erfährt den Funkmast, mit dem der Router verbunden ist, und zwar mit dem Parameter "CellId".

~~~~~~Product Information~~~~~~
003    Model:               B390s-2                    PASS
004    Software Version:    V200R001C35SP12            PASS
005    Hardware Version:    B390-B390RW2A Ver.C        PASS
006    SN:                  4UA5TC1110400163           PASS
007    IMEI:                354637040077555            PASS
008    LAN MAC Address:     F4:C7:14:**:**:**           PASS
009    WLAN MAC Address:    F4:C7:14:**:**:**           PASS
010    Check AT-Port:        Available                  PASS

~~~~~~LTE State~~~~~~
011    Dialing Mode:                                   PASS
012    APN:                  internet.home              PASS
013    DNS:                  8.8.8.8                    PASS
014    PDN Type:             IPv4                       PASS
015    Service Status:       Normal Service            PASS
016    Connection Status:    LTE STATE CONNECTED       PASS
017    Frequency:            816000 kHz               PASS
018    Bandwidth:            10MHz                    PASS
019    CellId:               392                       PASS

020    IP Address:           2.162.**.***             PASS
021    RSRP:                 -90dBm                    PASS

022    RSSI:                 -66dBm                    PASS
023    RSRQ:                 -7dB                      PASS 

024    Roam:                  no                       PASS
025    Antenna State:        Built-In                  PASS

~~~~~~DHCP~~~~~~
026    Gateway IP Address:    192.168.42.1           PASS
027    DHCP Enabled:          false                  PASS
028    Subnet Mask:          255.255.255.0          PASS
029    DHCP_ip_pool_start:    N/A                    PASS
030    DHCP_ip_pool_end:     N/A                     PASS
031    DHCP_lease_time(s):    N/A                     PASS

~~~~~~SIM/PIN State~~~~~~
032    sim_state:             SIM Card detected       PASS
033    PIN code:             READY                    PASS
 

18.01.2014

Erbsen zählen - Perl und CGI - Dritter Teil

Im dritten Teil beschreibe ich nun das Interessanteste: die Auswertung der Daten in Text- und Grafikform, deren Prinzip ich im ersten Teil und Sammlung im zweiten Teil beschrieben habe.

Genau wie schon früher beschrieben, verwende ich das Grafikmodul GD für Perl. Dort kann man ein paar Daten hineinstecken und dann mit einem Aufruf unterschiedliche Schaubilder erzeugen lassen, als "line"-Graph, "bar"-Graph und viele andere. Der Output ist dann HTTP-konform eine Grafikdatei im gewünschten Format, z.B. PNG oder GIF, zusammen mit einer Headerzeile und dem passenden MIME-Typ.

Beim Design gibt es zwei grundsätzliche Überlegungen:
  1. Die Logdateien sammeln Daten pro überwachtem Hostname, ich muss also noch eine Summe bilden, um den Verbrauch pro Host im Verhältnis zum Rest beurteilen zu können.
  2. Ich würde gern sowohl eine Tabelle mit den aktuellen Daten sehen als auch einen Graphen, aus dem man Trends ablesen kann. Ich brauche also im CGI-Skript eine Fallunterscheidung - Text oder Grafik.
Hier kommt das komplette CGI-Skript. An ein paar Stellen füge ich Kommentare in rot oder blau ein, wenn es etwas zu erklären gibt.

Eine grundsätzliche Bemerkung vorneweg: die Datenübergabe erfolgt immer in Form von Referenzen (in C wären das Zeiger auf Datenstrukturen), deshalb verwende ich im Skript i.a. auch gleich Variablen, Arrays und Hashes, die Referenzen enthalten, damit die Übergabe an GD nicht noch unnötig Datenformate umwandeln muss.

Um das CGI-Skript bequem testen zu können, habe ich einen "Testmodus" eingebaut. Man kann generell Skripte, die das CGI-Modul verwenden, auch auf der Kommandozeile aufrufen. Die Argumente, die normalerweise in der Request-URL nach dem "?" folgen, schreibt man einfach als Pärchen mit "name=wert" hinter den Skriptnamen in die Kommandozeile, wie man hier am Beispiel sieht.
# ./accounting.pl scale=1000 testmode=99 xmax=400 ymax=300
Bei diesem Testmodus ist noch zu bedenken, dass natürlich die Umgebungsvariablen des Webservers nicht gesetzt  sind (QUERY_STRING, PATH_INFO, die SSL_*-Variablen, wenn das Skript mit https aufgerufen wurde, usw.). Ggfs. müsste man diese Variablen manuell mit passenden gefälschten Inhalten setzen, damit das Skript an den entsprechenden Stellen sinnvolle Werte bekommt.

Dem Skript kann man einen Parameter "filter" übergeben, um nur einen ganz bestimmten Hostnamen auszufiltern. Deshalb gibt es eine etwas unübersichtliche Fallunterscheidung, ob ein Filter gesetzt ist oder nicht.

Mit "mode=1" wird eine Grafik in voller Größe mit mehreren Graphen und der Gesamtsumme angezeigt; "mode=16" erzeugt eine Tabelle in Textform mit einer Zeile pro Hostname in der Logdatei und hinter jedem Hostnamen in einer Extraspalte eine wönzig kleine Grafik mit der Gesamtsumme und dem Verbrauch dieses Hosts.

#!/usr/bin/perl -w

use strict 'vars';
use strict 'refs';

use GD::Graph;
use GD::Graph::lines;
use GD::Graph::bars;
use GD::Graph::hbars;

# Die GD-Module zeichnen die verschiedenen Typen von Graphen
use CGI qw(:standard);

#use lib "/usr/local/bin";

my @data;

# Array mit Beschriftung, x-Skala und ein oder mehreren y-Datenpunkten
my %hosts;

# Array zum Speichern der Daten pro Hostname
my $graph;
my $format;
my ($xmax,$ymax);

# Größe des auszugebenden Bilds
my $query;
my $range;
my $filter;

# Regexfilter für Hostnamen
# mode=0 full graph mode all hosts
# mode=9 sum only graph
# mode=16 text mode
# mode=99 debug text mode
my $mode;
my @x;
my @y1;

# y1=summierte Daten IN
my @y2;

# y2=summierte Daten OUT
my $scale;
#my $offset;
my $title="LTE volume statistics";

# X-Beschriftung
# werte1
# werte2
# ...
@data=(
);

%hosts=(
# "dummy.moeller-seeling.local" => { "IN " => [ 0 ], "OUT" => [ 0 ] }
);

my $max=0;
my $lines=0;

# logfile inbound, outbound
my ($login,$logout);


$query=new CGI();
$mode=$query->param( 'mode' ) || 0;
$range=$query->param( 'range' ) || "60";
#$offset=$query->param( 'offset' ) || "0";
$scale=$query->param( 'scale' ) || "2500";
$filter=$query->param( 'filter' ) || "";
$xmax=$query->param( 'xmax' ) || "800";
$ymax=$query->param( 'ymax' ) || "600";
$login=$query->param( 'infile' ) || "/var/log/lte-acct.in";
$logout=$query->param( 'outfile' ) || "/var/log/lte-acct.out";
$graph = GD::Graph::lines->new($xmax, $ymax);
$format = $graph->export_format;

# 20140108-110202 IN  i9100.moeller-seeling.local              91M
# 20140108-110202 IN  lifetab.moeller-seeling.local            42M
# 20140108-110202 IN  nexus.moeller-seeling.local              8748K
# 20140108-110202 IN  vettie68.moeller-seeling.local           143M

#my $d;

sub readfile {
  my ($file,$tag,$y)=@_;

  if (open(F,"<",$file)) {
    my ($dt,$old)=("","");

      while (<F>) {
      my ($name,$num,$unit,$hm,$m);

      chomp;
# 20140107-184506 IN  lifetab.moeller-seeling.local            0
# dieser Regex zerlegt eine Zeile, $tag ist IN oder OUT      if ($filter) {
        ($name,$num,$unit,$dt,$hm,$m)=($filter,$7,$8,"$1$2$3-$4$5$6","$4$5",$5)
          if (/^(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2}) $tag\s+$filter.*?\s*(\d+)([KMG]?$)/);
      }
      else {
        ($name,$num,$unit,$dt,$hm,$m)=($7,$8,$9,"$1$2$3-$4$5$6","$4$5",$5)
          if (/^(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2}) $tag\s+([a-z.-][0-9a-z.-]+)\s*(\d+)([KMG]?)/);
      }
      if ($name && defined($num) && defined($unit)) {

        ++$lines;
        if ($unit eq "")  { $num>>=10; }
#       if ($unit eq "K") { $num<<=10; }
        if ($unit eq "M") { $num<<=10; }
        if ($unit eq "G") { $num<<=20; }
# alle Zahlenwerte sind in KB        if ($num>1000) {
          if ($ymax<100) { push(@x,$m); }
          else { push(@x,$hm); }
          $num>>=10;
          push(@{$hosts{$name}->{$tag}},$num);
if ($mode==99) { print STDERR "# <$_>\n# $hm $tag $filter $num $unit | $max\n"; }

# in den Logfiles stehen kumulierte Daten pro Host
# alle Werte vom selben Timestamp addieren für Gesamtsumme
          if ($dt eq $old) { $num+=pop(@{$y}); }
#         else { $num+=$offset; }
          push(@{$y},$num);
          $old=$dt;

# Timestamp aufheben für Vergleich mit nächster Zeile
          if ($max<$num) { $max=$num; }

# Maximum merken für y-Skalierung
if ($mode==99) { print STDERR "# @{$y}\n"; }
        }
      }

    }
    close(F);
  }
}

readfile($login, "IN ",\@y1);
readfile($logout,"OUT",\@y2);

if ($mode==99) {
  local($,=", ");
  foreach my $h (keys(%hosts)) {
    print STDERR "# h $h\n";
    print STDERR "# i @{$hosts{$h}->{'IN '}}\n";
    print STDERR "# o @{$hosts{$h}->{'OUT'}}\n";
  }
  print STDERR "# Sum\n";
  print STDERR "# i @y1\n";
  print STDERR "# o @y2\n";
}


# maximal die letzten $range werte aus der Datei darstellen


if ($range>0) {
  splice(@x,0,-$range);
  splice(@y1,0,-$range);
  splice(@y2,0,-$range);
  $lines=$range;
}
$data[0]=\@x;

# mode=9 nur die Summe
# mode !=9 alle Hostnamen auch einzeln zeigen
if ($mode!=9) {
  foreach my $h (keys(%hosts)) {

# inbound ist interessanter
# man könnte aber in und out anzeigen
    push(@data,$hosts{$h}->{'IN '});
#   push(@data,$hosts{$h}->{'OUT'});
  }
}
# sum of all hosts IN
push(@data,\@y1);
# sum of all hosts OUT
#push(@data,\@y2);

$max=$scale*int($max/$scale+1);

# sinnvolle obere y-Grenze ausrechnen

if ($mode==99) { print STDERR "# max=$max\n"; }

# Daten übergeben$graph->set(
  x_label       => 'Volume Date/Time, ' . $lines . " samples",
  y_label       => 'max ' . $max . ' GB',
  title         => 'LTE volume (GB)',
  y_max_value   => $max,
  y_tick_number => 20,
  y_label_skip  => ($ymax<200) ? 5: 2,
  x_labels_vertical => 1,
  x_label_skip  => $lines / 12,
) or die $graph->error;

# optional die Farben selbst festlegen
#$graph->set( dclrs => [ qw(green lred blue cyan) ] );

# gibt es überhaupt daten?

if ($lines>0) {
  if ($mode<16) {

# bilddatei erzeugen
# binmode ist nur mit windows-webserver wichtig
    print header("image/$format");
    binmode STDOUT;
    print $graph->plot(\@data)->$format();
  }

# textmodus output als tabelle
  elsif ($mode==16) {
    print CGI::header();

    print <<__HEADER__;
<HTML>
<HEAD>
<TITLE>$title</TITLE>
<META http-equiv="refresh" content="300" />
<style type="text/css">
th {
  padding : 3px;
  text-align : left;
}
td {
  padding : 3px;
  text-align : right;
}
</style>
</HEAD>
__HEADER__

print "<!-- ";
print join( " -->\n<!-- ",
           map( "$_ => $ENV{$_}", sort(keys(%ENV)))
          );
print "-->\n";

    print <<__BODY__;
<BODY>
<H1>$title</H1>
<table border="1">
<tr>
<th> Hostname </th>
<th> Download </th>
<th> Upload </th>
</tr>
__BODY__

    foreach my $h (keys(%hosts)) {
      print "<tr>\n";
      print "<th> $h</th>\n";
      print "<td>",pop(@{$hosts{$h}->{'IN '}})," MB </td>\n";
      print "<td>",pop(@{$hosts{$h}->{'OUT'}})," MB </td>\n";

# hinter jeden hostnamen einen wönzigen Detailgraphen anzeigen
if (defined($ENV{'HTTP_HOST'})) {
      print "<td><IMG SRC=http://",$ENV{'HTTP_HOST'},$ENV{'SCRIPT_NAME'},"?filter=$h&xmax=300&ymax=100&scale=",int($max/10),"</IMG></td>\n";
}
      print "</tr>\n";
    }
    print "<tr>\n";
    print "<th style='text-align:right'> &Sigma; </th>\n";
    print "<td>",pop(@y1)," MB </td>\n";
    print "<td>",pop(@y2)," MB </td>\n";
if (defined($ENV{'HTTP_HOST'})) {
      print "<td><IMG SRC=http://",$ENV{'HTTP_HOST'},$ENV{'SCRIPT_NAME'},"?mode=9&xmax=300&ymax=100&scale=",int($max/10),"</IMG></td>\n";
}
    print "</tr>\n";

    print <<__BODY__;
</table>
<DIV>
<HR/>
<ADDRESS>
ths, last changed 09.01.2014
</ADDRESS>
</DIV>
</BODY>
</HTML>
__BODY__

  }
}


[Update 20140122: Links zum 1. und 2. Teil eingefügt]

10.01.2014

Erbsen zählen - zweiter Teil

Nachdem ich also im 1. Teil das Grundprinzip des Erbsenzählens beschrieben habe, kommt hier ein bißchen mehr Skripting zum Einsatz, damit sich der Tag "Automation" auch lohnt ;)

Das Datensammeln an sich ist eine triviale Sache. Man braucht ein kleines Skript, das mit Hilfe von cron regelmäßig ausgeführt wird.

Ich habe einfach mal willkürlich festgelegt, dass es einmal stündlich laufen soll:

2 * * * * /usr/local/sbin/ip-accounting.sh -I /var/log/lte-acct.in -O /var/log/lte-acct.out >/dev/null 2>&1

Der Inhalt des Skripts sieht ein bißchen aufgebläht aus, weil ein paar Kommandozeilenargumente ausgewertet werden wollen. Die wichtigste Zeile im Skript habe ich nochmal extra rot markiert, das ist die eigentliche Datensammlung.
#!/bin/sh

PATH=/opt/sbin:/opt/bin:/usr/bin:/usr/sbin${PATH:+:$PATH}

bytesin=0
bytesout=0
while getopts "iI:oO:" opt
do
  case "$opt" in
  i) bytesin=1;;
  I) filein="$OPTARG";;
  o) bytesout=1;;
  O) fileout="$OPTARG";;
  esac
done
shift $(expr $OPTIND - 1)
if [ "$bytesin$bytesout$filein$fileout" = "00" ]
then
  bytesin=1
  bytesout=1
fi

dt=$(date +%Y%m%d-%H%M%S)

out=$(iptables -L INET_OUT -v | awk -v D="$dt" '{if(NR>2){printf"%s OUT %-40s %s\n",D,$7,$2}}'|sort)
if [ "$bytesout" -eq 1 ]
then
  echo "$out"
fi
if [ -n "$fileout" ]
then
  echo "$out" >> "$fileout"
fi

out=$(iptables -L INET_IN  -v | awk -v D="$dt" '{if(NR>2){printf"%s IN  %-40s %s\n",D,$8,$2}}'|sort)
if [ "$bytesin" -eq 1 ]
then
  echo "$out"
fi
if [ -n "$filein" ]
then
  echo "$out" >> "$filein"
fi
Und was genau macht diese rot markierte Zeile? Schauen wir mal genauer hin. Es sind mehrere Befehle in einer Zeile, verbunden mit dem Weiterleitungszeichen | (pipe). Diese Pipe verbindet den Output des Programms vorne mit dem Input des Programms dahinter.
iptables -L INET_IN  -v |

Der erste Befehl zeigt die bis dahin aufgelaufene Datenmenge für alle überwachten Systeme an. Wichtig ist der Switch -v, sonst bekomme ich die Datenmenge nicht zu sehen.
awk -v D="$dt" '{if(NR>2){printf"%s IN  %-40s %s\n",D,$8,$2}}' |

Die Ausgabe enthält allerdings ziemlich viel Kram, der mich gar nicht interessiert, deswegen verwende ich awk, um mir gezielt nur das zu extrahieren, was ich für meine Neugier brauche. Natürlich könnte ich normalerweise auch grep verwenden, um etwas zu suchen, aber weil ich gleichzeitig ein wenig programmieren will und einzelne Felder aus jeder Zeile des Outputs ausschneiden will, verwende ich ganz gern awk, statt grep mit cut o.ä. zu kombinieren. Spart ein wenig CPU ;)

Bei diesem Befehl benutze ich zwei eingebaute Fähigkeiten von awk: es zählt automatisch die Zeilennummern in der Variablen NR (number of records) mit, was ich verwende, um die ersten zwei Zeilen mit der Überschrift des iptables-Outputs wegzuwerfen, und es zerlegt automatisch die Zeile in "Felder" gemäß einem vorgegebenen Trennzeichen (üblicherweise Whitespace). awk arbeitet also den printf-Befehl nur ab der dritten Zeile des Inputs ab und zeigt davon nur das achte und das zweite Feld an (Hostname und Datenmenge)

Bei der Chain INET_OUT ist  übrigens  der Hostname im siebten Feld enthalten, und bei der Chain INET_IN im achten Feld, weil ich ja einmal nach "source" und einmal nach "destination" suche.

Randbemerkung: damit awk einen Timestamp mit ausgeben kann, gebe ich dem Aufruf von awk einen solchen vorgefertigten Timestamp auf der Kommandozeile mit dem Switch -v NAME=WERT mit. Das können nicht alle awk unter allen Unix-Varianten, m.W. wurde das mit dem "new awk" (nawk) unter SunOS eingeführt, GNU awk unter Linux kann es auf jeden Fall.
sort
Der letzte Befehl sortiert das ganze schlicht und einfach alphabetisch. Ich könnte auch iptables mit dem Switch -n verwenden, um die IP-Adressen zu sehen anstatt der Hostnamen. Dann wäre es angebracht, bei sort ebenfalls -n zu verwenden, um numerische Sortierung zu erzwingen.

Dieses Skript sammelt also stündlich Daten pro überwachtem Hostname. Die gesammelten Daten sehen dann so aus:
server:/share/www/cgi-bin # tail -n2 /var/log/lte-acct.in /var/log/lte-acct.out
==> /var/log/lte-acct.in <==
20140109-150202 IN  nexus.moeller-seeling.local              23M
20140109-150202 IN  vettie68.moeller-seeling.local           286M


==> /var/log/lte-acct.out <==
20140109-150202 OUT nexus.moeller-seeling.local              6752K
20140109-150202 OUT vettie68.moeller-seeling.local           13M

Wie man sieht, ist der Output menschenfreundlich und es wird immer eine halbwegs lesbare Größenordnung bei der Datenmenge angezeigt: KB, MB oder GB. Ohne Einheit sind "Byte" gemeint. Diese Kleinigkeit ist beim Programmieren einer kleiner Stolperstein gewesen ;)

Das Auswerte-Skript habe ich als CGI-Skript in Perl gelöst. Es kann sowohl eine Tabelle als auch eine Grafik erzeugen (mit dem Perl-Modul GD). Das folgt dann im nächsten Teil.

Am Ersten des Monats sollte man übrigens die Zähler wieder auf Null setzen:
iptables -L INET_IN -Z
iptables -L INET_OUT -Z
Ich habe schon ein Skript, das mir meinen Verbrauchszähler auf Null setzt, dort werde ich das noch mit einbauen.

09.01.2014

Erbsen zählen mit Linux - IP Traffic accounting

Manche unter uns wurden geplagt von langsamem DSL.

Ein paar von denen sind mutig auf LTE umgestiegen, das die Telekom und andere Anbieter in unterversorgten Gebieten anbieten müssen (zwar nur im 800 MHz-Band, aber immerhin).

Und ein paar von denen sind neugierig, welcher Mitbewohner denn nun den Traffic verursacht und schon am 20. die Quote für den ganzen Monat aufgebraucht hat ;)

Das alles und noch viel mehr kann man mit einem Linux-Server machen, wenn man seine PCs und Smartphones im Haushalt nicht direkt ins Internet lässt, sondern den Linux-Rechner als Gateway dazwischenklemmt.

Dieser Ansatz hat nebenher noch den Vorteil, dass auf dem Linux-Server ein Caching Proxy laufen kann und damit potentiell ein bißchen vom Traffic nur einmal über die externe Internetverbindung abgerufen werden muss.

Hauptsächlich ist aber das interessanteste, dass nun wirklich jede Internetverbindung am Linux sichtbar ist.

Mit dem Modul "iptables", das bei jeder Linux-Distribution dabei sein sollte, kann man eine Statistik führen, welcher Rechner oder welches Smartphone wieviel Traffic verursacht hat.

Normalerweise wird "iptables" dazu verwendet, mit Regeln festzulegen, was erlaubt ist und was nicht. Nebenbei wird aber auch mitgezählt, wieviele Bytes durch die Regeln geflossen sind. Man kann diesen Mechanismus also für den Nebeneffekt des Zählens verwenden, wenn man schlicht "keine Regel" festlegt.

Nebenbei könnte man aber natürlich auch am Proxy datenintensive Sites wie spotify usw. sperren, die besonders viel vom Datenvolumen verbrauchen.

Grundsätzlich muss man dazu einen Linux-Server mit zwei Ethernet-Schnittstellen aufbauen. Manche Mainboards haben schon zwei davon; falls nicht, kann man für sehr wenig Geld eine zweite Karte in den PC einbauen. Es bietet sich an, den Linux-Server dann auch gleich zum NAS auszubauen mit einer zweiten Festplatte (für ein gespiegeltes RAID1) oder mit mehreren (wenn man ein RAID5 haben will).

Das wichtigste kommt nun: der Router (DSL oder LTE) kommt an die zweite Schnittstelle (oBdA ab jetzt eth1 genannt), und niemand sonst darf direkt mit dem Router verbunden sein. Es ist also sinnvoll, das WLAN am Router abzuschalten oder das Passwort so zu ändern, dass sich niemand mehr anmelden kann. Außerdem muss am Linux-Server das IP-Forwarding eingeschaltet sein, damit die anderen Systeme im Haushalt die Chance haben, trotzdem ins Internet zu kommen. Wenn man das WLAN am Router abschaltet, handelt man sich noch ein zu lösendes Problem ein: man benötigt einen separaten WLAN-Access Point für das interne Netz, der für Smartphones die Basisstation wird.

Alle anderen PCs und der Linux-Server mit seiner ersten Schnittstelle (eth0) müssen an einen "internen" Switch angeschlossen werden. Das kann der interne, neue WLAN-Access Point sein, oder eine eigene kleine Kiste, ganz nach Geschmack und örtlichen Gegebenheiten.

Am Linux muss nun prinzipiell das IP-Forwarding eingeschaltet werden. Dies bedeutet, dass aller Traffic, der an eth0 ankommt und nicht für eine andere interne Station gedacht ist, automatisch an eth1 weitergeleitet wird (und von dort natürlich weiter ins Internet).

Das deute ich hier nur an, für Details mal ein bißchen im Internet nach "linux ip forwarding" suchen.
    iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED
    echo 1 > /proc/sys/net/ipv4/ip_forward
    net=192.168.1.0/24
    iptables        -A FORWARD     -j ACCEPT     -i eth0 -s "$net"
    iptables -t nat -A POSTROUTING -j MASQUERADE -o eth1 -s "$net"

    iptables -A FORWARD -j REJECT
Statt des gesamten Netzes (in der Variablen $net) kann man auch gezielt einzelne Hostnamen oder IPs angeben, aber das Setup des IP-Forwardings soll hier nicht das Thema sein.


Stattdessen will ich ein bißchen genauer auf das eigentliche Thema eingehen: das Zählen des Traffics.

Dazu richtet man mit iptables zwei zusätzliche "Chains" ein, und klinkt beide in die immer vorhandene FORWARD-Chain mit ein. Das bedeutet so etwas wie ein Verdoppeln der Daten, wobei die Duplikate in den neuen Chains (eine für Input, eine für Output) nur für das Zählen verwendet und dann weggeworfen werden.
    iptables -N INET_OUT
    iptables -N INET_IN 
    iptables -I FORWARD -j INET_IN
    iptables -I FORWARD -j INET_OUT
Diese beiden neuen Chains stattet man als nächstes mit der Information aus, für welche IP-Adresse überhaupt gezählt werden soll. Dabei muss zum Zählen pro IP-Adresse natürlich dieselbige angegeben werden als "Selektor". Einmal muss der Selektor als "source" (ausgehender Traffic) und einmal als "destination" (eingehender Traffic) verwendet werden (die Variable $ip geeignet setzen).
    iptables -I INET_OUT -s "$ip"
    iptables -I INET_IN  -d "$ip"
Danach kann man schon mal ein bißchen mit dem Gerät spielen (am Smartphone den App Store/Play Store aufrufen oder eine andere App mit Internetabrufen) und beobachten, ob sich bei den Zählern etwas bewegt.
iptables -L INET_IN -v
Um das regelmäßig anzuschauen, kann man den Befehl "watch" verwenden, der ein anderes Kommando regelmäßig aufruft. Meinem Smartphone habe ich im DNS den Namen "nexus" gegeben, und nach diesem Namen suche ich nun:

# watch -n 60 "iptables -L INET_IN -v|grep nexus"

Every 60.0s: iptables -L INET_IN -v|grep nexus
1567 1198K all -- any any anywhere nexus.moeller-seeling.local
Das Interessanteste dürfte der "inbound" sein, der hereinkommt. Typischerweise ist das Downloadvolumen eher groß, und der "outbound" besteht hauptsächlich darin, die Anfragen zu verschicken. Außer natürlich, man lädt gerade große Bilder zu Flickr oder Videos zu Youtube hoch ;)

Als nächstes richtet man dann einen cron-job ein, der diese Daten in regelmäßigen Abständen protokolliert und daraus lustige Reports erstellt. Davon erzähle ich im nächsten Beitrag, wenn ich mit Programmieren fertig bin ;)


[Update: Idee von Robert Dahlem von der LUG Frankfurt, außerdem diese FAQ]

05.06.2013

Verbrauchtes LTE-Volumen protokollieren

Ich beschäftige mich weiter mit der Telekom, heute zur Abwechslung mal wieder ein technischer Beitrag, der beschreibt, wie man den Überblick über das schon verbrauchte Volumen behalten kann.

Bekanntlich ist unser Haushalt seit letztem Jahr mit LTE unterwegs im Internet. Bedauerlicherweise gibt es nur Verträge mit Pseudo-Flatrate, die nach einer bestimmten verbrauchten Datenmenge im Monat von der Nominalgeschwindigkeit ("bis zu" 16 MBit/s) auf DSL-light-Geschwindigkeit (384 KBit/s) gedrosselt werden.

Zu dieser Kontingentierung gehört übrigens auch mein Upload. Wenn ich also Bilder hochlade, um Papierabzüge zu bestellen, wird das voll gezählt.

Um das verbrauchte Volumen abzurufen, gibt es eine Info-Seite bei der Telekom, die mir berichtet, wieviel von meinem Kontingent schon verbraucht ist. Mit ein bißchen Getrickse in einem Skript kann ich daraus die zwei Zahlen extrahieren, die ich wissen will, und die protokollieren.

Mein Artikel besteht also aus zwei Teilen: dem Skript zum Abfragen, und einem (wahlweise zwei) Cron-Jobs zur regelmäßigen Aufzeichnung.

Das Skript ist sehr einfach: es verwendet eine "regular expression" in perl, um die Zahlen und die zugehörigen Maßeinheiten (KB, MB, GB) aus dem HTML-Wust herauszufischen.

Übrigens muss man kein Linux haben, um diese kleinen Hilfsmittel einzusetzen: wget, perl und die GNU Kommandozeilenwerkzeuge gibt es auch für Windows. Alternativ kann man auch die komplette CygWin-Umgebung installieren. Mit einem Cron-Job wird es etwas schwieriger, aber wenn man einen PC hat, der immer angeschaltet ist, kann man mit dem Windows-Befehl at auch so etwas zusammenbauen. Die Hilfefunktion wird mit at /? aufgerufen.

Zurück zum eigentlichen Thema: mein erster Versuch, um das HTML anzuschauen, war übrigens diese Kommandozeile:

wget -SO- http://pass.telekom.de/portal/home |\
  perl -pe 's!>!>\n!go' |\
  grep -B1 verbraucht

Diese drei Befehle fragen die Info-Seite ab (wget), und nach jedem HTML-Tag wird mit einem simplen perl-Einzeiler ein Zeilenumbruch eingefügt. Durch die nun entstandene Zeilenstruktur kann der "grep"-Befehl ein Stichwort finden ("verbraucht") und die gesamte Zeile, in der dieses Stichwort vorkommt, ausgeben. Außerdem hätte ich gern die Zeile davor ebenfalls in der Anzeige (der Switch -B anzahl zeigt soviele Zeilen vorher - "Before" - ebenfalls an - diese Option funktioniert nur beim GNU grep, nicht bei AIX, Solaris, etc.).

Mit genau demselben Prinzip, nur etwas aufgehübscht, funktioniert die eigentliche Protokollierung. Da das Werk als Cron-Job laufen soll, muss ich mich selbst um vernünftige Umgebungsvariablen wie PATH kümmern; in Cron-Jobs gibt es nur Minimaleinstellungen.

#!/bin/sh

PATH=/opt/bin:/usr/bin:/usr/local/bin:/usr/local/sbin${PATH:+:$PATH}

date=
file=

while getopts "df:" opt
do
  case "$opt" in
  d) date="%Y%m%d-%H%M%S ";;
  f) file="$OPTARG";;
  esac
done
shift $(expr $OPTIND - 1)

if [ -n "$file" ]
then
  d="${file%/*}"
  test -d "$d" || mkdir -p "$d"
fi

q=$(wget -qO- http://pass.telekom.de/portal/home |\
  perl -ne '
    print("$1 $2 $3 $4\n")
   
if (m#<span.*?>([0-9,.]+).*([KMG]B)</span> von ([0-9,.]+).*([KMG]B) mit voller Geschwindigkeit verbraucht#i)')
test "$(/bin/tty)" = "not a tty" || date +"$date$q"
test -n "$file" && date +"%Y%m%d-%H%M%S $q" >> $file

Die Ausgabe wird hier auf Wunsch noch mit dem Datum der Abfrage versehen, und wenn man mit -f einen Dateinamen angibt, wird die Ausgabe zusätzlich noch an diese Datei angehängt.

Ein paar kleine Tricks will ich ein bißchen näher erklären:

  • PATH=...${PATH:+:$PATH} - hier prüfe ich, ob in der Variablen PATH überhaupt irgendetwas enthalten ist. Falls ja, hänge ich einen Doppelpunkt und den alten Inhalt hinten dran und setze vorn neue Pfadnamen davor.
  • d="${file%/*}" - Vom Dateinamen in $file schneide ich alles nach dem letzten / ab. Als Ergebnis steht in der Variablen $d der Pfadname der Datei.
  • test -d "$d" prüft, ob dieses Verzeichnis existiert, und erzeugt es ggfs. mit mkdir -p mit allen Unterverzeichnissen dazwischen.
  • In einem Cron-Job ist eine Ausgabe auf die Konsole sinnlos, deshalb prüfe ich, ob der Befehl /bin/tty mir das Ergebnis "not a tty" liefert.
  • Der date-Befehl akzeptiert +Formatstring. Ich baue einfach das aktuelle Ergebnis in den Formatstring mit ein: date +"$date$q"

Mit einem Cron-Job wird dieses Skript nun stündlich aufgerufen:

57 * * * * /usr/local/bin/lte-quota.sh -f /var/spool/lte-quota.txt >/dev/null 2>&1

Und einmal am Tag lasse ich mir den aktuellen Stand auch noch als Mail zuschicken:

1 8 * * * (/bin/tail -1 /var/spool/lte-quota.txt | /bin/mail -s "LTE quota" ths) >/dev/null 2>&1
Das Ergebnis sieht dann bei mir etwa so aus:

20130603-225703 1,7 GB 30 GB
20130603-235702 1,9 GB 30 GB
20130604-005702 1,9 GB 30 GB
20130604-015702 1,9 GB 30 GB
20130604-025702 1,9 GB 30 GB
20130604-035702 1,9 GB 30 GB
20130604-045702 1,9 GB 30 GB
20130604-055702 2 GB 30 GB
[Update: die Telekom-Seite hat sich geändert, im Skript Regex angepasst]

31.05.2013

Die Telekom und die Störungshotline

Eben gerade hat es die Telekom überraschend geschafft, mich positiv zu verblüffen.

Ich bin ja eher gern und schnell dazu bereit, zu meckern, aber wer genau hinguckt, stellt fest, dass diesmal wirklich das Tag "Gejammer" bei diesem Artikel fehlt ;). Aber so ganz ohne geht es nicht, deswegen hab ich ja auch wieder ein Thema zum Schreiben ;)

Kurz nach 10 Uhr fiel unser LTE plötzlich und unerwartet aus. Eben noch ein paar Dinge bei Google gesucht, und plötzlich ging nix mehr ...

Ein bißchen hab ich mich schon daran gewöhnt, dass der LTE-Router nicht so das zuverlässigste Stück Technik im Haushalt ist, und deshalb einen nächtlichen Cron-Job im Server eingerichtet, der einen Reset des LTE-Routers durchführt.

Spontan und unerwartet fiel also die Internet-Verbindung aus, und als ich bei der Telekom-Hotline anrief, um eine Dreiviertelstunde später die Störung zu melden, befürchtete ich schon das Schlimmste ... Der Sprachcomputer nahm meine Kategorie "Störung" entgegen und bestand dann darauf, dass ich die Nummer des gestörten Anschlusses eingab. Nach einigen Knacksern und dem "Durchführen einer vorläufigen Prüfung" wurde mir dann mehrfach hintereinander mitgeteilt, dass "alle Plätze belegt" seien und ich später wieder anrufen solle.

Na klasse, die Telekom rechnet sich ihre SLAs schön ... In meinem Vertrag bzw. in den AGB steht drin, dass sie innerhalb von 24 Stunden auf Störungsmeldungen reagieren müssen. Da macht es sich in der Statistik doch gut, wenn man die Störungsmeldungen einfach noch ein bißchen hinauszögert oder gar nicht erst annimmt.

Nach dem dritten oder vierten Versuch und dem ebensovielten virtuellen Hinauswurf fing ich an, mit den Servicenummern zu spielen (0800-330-xy00) und wenige Versuche später hatte ich dann tatsächlich ganz ohne Warteschleife einen echten Menschen am Telefon und konnte mein Leid loswerden. Darin enthalten war ausdrücklich der Hinweis, dass der LTE-Router keine Verbindung ins Internet bekommt und gelegentlich "Fehler 44 beim Verbindungsaufbau" anzeigt. Allerdings konnte die Hotline-Dame niemanden in "der Technik" erreichen und bat mich, ein paar Minuten später nochmal anzurufen.

Wenig später dann ganz überraschend (wirklich ein Tag voller Wunder) ein Rückruf auf dem Handy von derselben Dame, dass sie doch jemanden in der Technik erreicht habe und meine Störungsmeldung weitergegeben wurde. Wahnsinn!

Wenige Minuten später ein Anruf auf der Festnetznummer, und das folgende Gespräch war so unterhaltsam, das hat mir wirklich den Freitag gerettet!

Eine andere Dame war in der Leitung, die annahm, ich hätte ein "PC-Problem". Vom Teamleiter wurde ihr das Problemticket zugeteilt, und der Anrufer (also ich) wäre wohl so ein "altes Op'chen" und hätte wohl ein Problem, weil er mit seinem PC nicht ins Internet kommt. Wir konnten das Mißverständnis dann schnell aufklären, dass es am LTE-Router liegt und kein PEBKAC ist. Ich fand es sehr schmeichelhaft, dass sie während unseres Gesprächs meinte, dass ich am Telefon nicht wie ein alter Opa klinge, ganz im Gegenteil. Hach, war das nett ;). Dabei geh ich doch auch schon auf die Fünfzig zu ...

Mittlerweile schlug die SMS mit der Ticketnummer bei mir auf, und eine knappe Stunde später lief wieder alles. Juhu.

Und nochmal ein paar Minuten später kam nochmal ein Anruf auf dem Handy von einer weiteren Dame aus "der Technik", die zuerst nachfragte, ob meine Telefonleitung immer noch gestört sei. Ich wies sie darauf hin, dass es um LTE geht und schon gelöst ist, und fragte sie, warum ich bei der Störungsannahme eine Telefonnummer angeben musste. Sie lachte und konnte mir dann freundlicherweise noch eine spezielle Hotline-Telefonnummer für LTE-Probleme mitteilen: 0800-311-3221.

Im  großen und ganzen lief diese Störungsmeldung und -behebung erstaunlich erfolgreich ab, und ich bin positiv überrascht, wie intensiv der Kundenkontakt ist. Wenn auch die Störungsannahme mich erst mal als "alten Opa mit PC-Problem" eingeordnet hat ;)

05.05.2013

Die Frankfurter Rundschau regt mich schon wieder auf

In der Samstagsausgabe vom 04.05.2013 ist schon wieder ein Artikel vom selben Journalisten, dem ich letzte Woche schon geschrieben habe zum selben Thema DSL-Drosselung. Diesmal führt er ein Interview mit Prof. Torsten Gerpott von der Uni Essen, dort hat er den Lehrstuhl für Telekommunikationswirtschaft inne. Ich finde das Interview sehr schlecht.

Leserbrief zu „Interview zu Drosselkom“ von Hr. Wenzel, FR vom Sa. 04.05.2013

Lieber Herr Wenzel,

Sie haben schon wieder so einen unkritischen Artikel zur DSL-Drosselung der Telekom veröffentlicht.

Ihr Experte behauptet ohne Quellenangabe, dass Deutschland beim Kabelausbau im 16-MBit/s-Bereich weit vorne liegt. Ich empfinde den 18. Platz nicht als "weit vorne".

Die Studie der Breitband-Rangliste wird seit 2008 jährlich von der Oxford University durchgeführt und von Cisco Systems in Auftrag gegeben. Innerhalb dieser Studie wird eine Rangliste nach Werten erstellt, welche die Qualität der Breitbandnetze (vor allem die Geschwindigkeit) und deren Verbreitung in städtischen und ländlichen Gebieten messen. Spitzenreiter ist Südkorea mit einer Haushaltsanschlussquote von 100%. Die Downloadgeschwindigkeit beträgt hier 33,5 Megabit pro Sekunde, die Uploadgeschwindigkeit 17Mbps. Mit dem weiter hinten liegenden 18. Platz und einer durchschnittlichen Geschwindigkeit von 11,63Mbps (D) bzw. 1,28Mbps (U) wird deutlich, dass in der Bundesrepublik noch Nachholbedarf besteht. Die Anschlussquote hierzulande beträgt 66%. (Zitiert aus DStGb-Newsletter).

Machen Sie doch mal eine Umfrage, wer die "bis zu" 16 MBit/s auch wirklich bekommt. Ich wette mit Ihnen um einen Meter Glasfaser, dass die meisten Telekom-Kunden irgendwo zwischen 8 und 12 MBit/s herumdümpeln. Bezahlen dürfen sie aber trotzdem den Preis für 16 MBit/s.

Außerdem behauptet er auch wiederum ohne Belege, dass es "einige wenige Vielnutzer" gibt, die deshalb unsolidarisch mehr Geld für den kommenden Ausbau bei der Telekom abliefern sollen. Der Anschluss als solcher hat doch überhaupt nichts damit zu tun, wie stark er genutzt wird! Meiner Meinung nach sollte der grundsätzliche Anschluss mit einer menschenwürdigen Geschwindigkeit für alle gleich viel kosten.

Ich bin gern bereit, für eine höhere Geschwindigkeit mehr zu bezahlen, aber eine Drosselung auf 384 KBit/s ist moderne Folter. Wenn sogar die veraltete Breitbandstrategie der Bundesregierung von 2010 ein Ziel von 1 MBit/s vorgibt, kann eine Drosselung auf 384 KBit/s nur ein schlechter Scherz sein.

In meinem ursprünglichen DSL-Vertrag (von 2004 etwa) steht auch drin, dass ich aufgrund "technischer Gegebenheiten" vielleicht nur 384 oder 768 KBit/s bekommen werde, aber trotzdem für 1 MBit/s bezahlen muss.

Ich kann die "technischen Gegebenheiten" nachvollziehen, weil ich mich ein bißchen für diese Technik interessiere, aber nicht die geschäftlichen Konsequenzen, die die Telekom daraus ableitet.

Die Konkurrenz z.B. bietet auf der gemieteten "letzten Meile" meistens höhere Geschwindigkeiten an, weil sie die Toleranzgrenze für die sog. "Dämpfung" aggressiver einstellen, auch wenn die Entfernung von der Basisstation (DSLAM) höher ist als jeweils vorgesehen. Das erlaubt höhere Geschwindigkeiten, kann aber zu gelegentlichen Ausfällen führen, wenn sich die beiden Gegenstellen erst wieder auf bestimmte Übertragungsmechanismen einstellen müssen (nennt sich "Re-Training"). Mir wären gelegentliche kurze Abbrüche lieber als dauerhaftes Langsamsurfen.

Auf die ländlichen Gebiete gehen Sie im Interview kaum ein. Es wird am Rand erwähnt, dass die Telekom sich insbesondere in Städten engagieren will, weil hier mit wenig Aufwand viel Rendite erzielt werden kann. Der Ausbau auf dem Land ist Ihrem Experten aber lediglich ein Schulterzucken wert. Die Gekniffenen sind aber hauptsächlich die Menschen auf dem Land! Die Landeier dürfen also mit langsamen Anschlüssen leben, sollen aber auch kräftig zahlen und sich solidarisch zeigen. Hört sich doch merkwürdig an, oder?

Das Ziel der Breitbandstrategie der Bundesregierung, bis Ende 2010 alle Haushalte flächendeckend mit Breitbandanschlüssen von mindestens 1 MBit/s zu versorgen, wurde verfehlt und wurde jetzt einfach in die Zukunft verlegt, außerdem mit Mobilfunk-Lösungen wie LTE krückenhaft geflickt. Leider haben die LTE-Anschlüsse denselben Nachteil, nur noch schlimmer: eine Zwangsdrosselung nach 10/15/30 GB im Monat (bei Telekom, Vodafone ähnlich), je nach Vertrag. Man kann einmalig für 14,95 nochmals Kontingent nachkaufen, aber dieses nachgekaufte Kontingent verfällt am Monatsende. Viele Kunden werden also nicht am 28. nochmals 14,95 bezahlen; das Geld wäre größtenteils zum Fenster hinausgeworfen.

Genau das ist aber nicht der Sinn einer deutschlandweiten Breitbandpolitik! Die sog. weißen Flecken auf dem Land hinken dann immer hinterher. Es klingt ja so toll, dass ich zu einem anderen Anbieter gehen könnte. Das ist insofern korrekt, als der "andere Anbieter" dann die letzte Meile von der Telekom anmietet. Das ist aber auch nur möglich, wenn diese letzte Meile nicht mit "DSL Vectoring" unter die alleinige Kontrolle der Telekom zurückgeholt wird. Die Kabelgesellschaften haben denselben Standpunkt wie die Telekom: ein neues Kabel wird nur vergraben, wenn sich genügend Interessenten finden. Mein Wohnort z.B. bekommt in den nächsten zehn Jahren sicherlich kein Kabel, und von Glasfaser kann ich nur träumen.

Insgesamt gesehen finde ich das Interview sehr schwach und einseitig und Sie hätten ruhig mit mehr Fakten kritischer nachfragen sollen. Außerdem würde ich gern wissen, ob Ihr interviewter Experte oder sein Institut irgendwelche finanziellen Beziehungen zur Telekom hat. Es soll ja vorkommen, dass Firmen Drittmittel an Unis geben und forschen lassen. Dann könnte ich dieses Hurra-Interview besser einordnen.
[Update 05.05.2013: Quelle für Zitat Breitbandstudie 18. Platz D eingefügt]

22.03.2013

Huawei-LTE-Router per Skript resetten

Mal wieder ein kleines Skript aus der Abteilung "Nützliches für Kommandozeilenbastler".
Der LTE-Router von Huawei hat ab und zu mal Schluckauf und muss neu gestartet werden. Das umfasst den Aufruf der Adminseite mit einem Browser, Anmelden und durch drei Webseiten durchklicken, bis der Router sich wirklich zu einem Reset bequemt.

Mit demselben Trick wie neulich (Statusabfrage des Transfervolumens) ist es möglich, das Problem mit dem zweimaligen Aufruf von wget zu erschlagen. Beim ersten wget-Aufruf wird eine Anmeldung mit User und Passwort durchgeführt und das Session-Cookie gespeichert. Mit dem zweiten Aufruf wird dann direkt die URL aufgerufen, die den Reboot erzwingt (und die ganzen "Sind Sie sicher?"-Abfragen überspringt).

An der rot markierten Stelle "YOURPASSWORD" muss das eigene Router-Passwort eingesetzt werden. Wenn es Sonderzeichen enthält, müssen die als Entities geschrieben werden (Plus als %2B, Minus %2D, @ als %40 usw.). Ebenso muss an der rot markierten Stelle der Hostname oder die IP-Adresse des LTE-Routers eingesetzt werden (Telekom: speedport.ip, Vodafone: vodafonemobile.cpe, oder schlicht die IP, wenn die fix ist).

#!/bin/sh
verbose=0

while getopts "v" opt
do
  case "$opt" in
  v) verbose=1;;
  esac
done
shift $(expr $OPTIND - 1)


PATH=/opt/bin:/opt/sbin${PATH:+:$PATH}
LTE=192.168.42.1


C=/tmp/cookies.txt
U1="http://$LTE/login.cgi"
U2="http://$LTE/reboot.cgi"


wget --save-cookies "$C" \
     --keep-session-cookies \
     -q --tries=1 \
     -O /dev/null \
     --post-data 'Username=admin&Password=YOURPASSWORD' \
"$U1"
wget --load-cookies "$C" \
     -q --tries=1 \
     -O /dev/null \
     "$U2"
rm -f "$C"


c=1
echo -n "# waiting for ping "
until [ $c -gt 20 ]
do
  echo -n "."
  sleep 5
  c=$(expr $c + 1)
  ping -qc1 $LTE > /dev/null && break
done
echo " rc=$?"

01.02.2013

Neuigkeiten über LTE

Es gibt Neues über mein LTE zu berichten.

Vor ungefähr zwei Wochen wurde mein LTE mal wieder gedrosselt auf 384/64, obwohl laut Router erst 11 GB verbraucht waren. Könnte aber auch sein, dass ich den Zähler zum falschen Zeitpunkt auf Null gestellt hatte ... dachte ich mir.

Ein Anruf letzte Woche bei der Geschäftskunden-Hotline brachte dann eine interessante Erkenntnis: das "schnelle" Volumen gilt pro Kalendermonat. Jeweils am Ersten eines Monats hat man wieder die normale LTE-Geschwindigkeit gemäß Vertrag zur Verfügung.

Auf meine zweite Frage wusste die Dame an der Hotline keine Antwort: wie kann man Volumen nachkaufen, wenn man dringend eben doch schnell surfen will oder muss, aber das Volumen für den Monat schon erschöpft ist?

Neulich im Dezember hatte ein anderer Mitarbeiter an der Hotline behauptet, das ginge über kundencenter.telekom.de, aber erst im zweiten Quartal, die Technik sei noch nicht fertiggestellt.

Der heutige Anruf brachte dann in mehrfacher Hinsicht Klärung:

  • Obwohl im Kundencenter meine Umstellung auf den Tarif "call + surf comfort via Funk / L" als "erledigt" markiert war, wollte mich die Technik immer noch als Mobilfunkkunden betrachten und hat mich tatsächlich bislang mit einem Volumen von 10 GB behandelt. Hier hat also die Technik nicht ordentlich gearbeitet und den Auftrag nicht vollständig und sorgfältig erledigt. Schon peinlich.
  • Im Moment funktioniert die automatische Rücknahme der Drosselung am Monatsanfang nicht. Im Januar gab es angeblich eine Software-Umstellung, und man muss manuell am Monatsersten den Router aus- und wieder einschalten. Ja, richtig gelesen! Der Kunde muss mindestens einmal jeden Monatsanfang zu seinem Router dackeln und ihm eins überbraten. So muss Technik!
  • Das Nachkaufen von Volumen funktioniert über den Aufruf der Seite pass.telekom.de (war wohl eigentlich für den Nachkauf von Volumen gedacht, wenn man sich im Ausland befindet und das Mobiltelefon über Roaming eingebucht ist). Vor dem Anruf wurde mir dort angezeigt "Sie befinden sich im Inland ... bla", was ein sicheres Anzeichen dafür ist, dass mich das System technisch als Mobilfunk- und nicht als Festnetzkunden behandelt.
Noch während des Anrufs bei der Hotline durfte ich als den Router neu starten. Nach dem Verbindungsaufbau hatte ich tatsächlich sagenhafte 16.000 Download- und 4.500 KB/s Uploadgeschwindigkeit. Ja, Wahnsinn! Ist denn schon wieder Weihnachten?

Der Aufruf von pass.telekom.de wähnt mich immer noch im Inland, diese Umstellung soll im Lauf des Tages erledigt werden. Ich bin gespannt ;)
Angeblich kann man dann als Festnetzkunde mit LTE auf dieser Seite auch das schon verbrauchte Volumen des Monats abfragen. Schau'n mer mal ...

Ob ich jetzt noch mal was über die unterschiedliche Qualität der Beratung an der Geschäftskunden(!)hotline schreibe? Naja, immerhin hat's jetzt funktioniert.

Obwohl mir die Drosselung schon ganz schön wehtut, wenn ich von zuhause aus arbeite. Und Kind 1 nachmittags Youtube guckt, um den Schwarm von OneDirection anzugucken ... Ganz zu schweigen von Kind 2, das süchtig auf Lego Brick-Filme zu Star Wars ist ;). Dann geht bei mir keine ssh-Session zum Rechenzentrum meiner Firma mehr flüssig.

11.01.2013

Daten aus dem LTE-Router von Huawei mit Skript auslesen

Von meinem alten DSL-Router war ich eine halbwegs informative Webansicht mit den relevanten Verbindungsdaten gewöhnt, dort konnte ich meine öffentliche IP-Adresse, meine Up- und Download-Geschwindigkeit und einige andere nette Daten abfragen und mitprotokollieren.

Der neue LTE-Router hingegen (Huawei B390s aka Telekom LTE 1) hat ein gar schreckliches Webinterface, und ohne Authentisierung rückt er gar keine Infos heraus. Nicht mal die Statusseite bekommt man mit einem harmlosen wget-Aufruf ;(, sondern nur eine Fehlerseite mit Javascript.

Aber wget ist schlau genug; man muss zwei Aufrufe durchführen und beim Aufruf der Login-Funktion (erster Aufruf) die Logindaten als "POST data" mitschicken und beim Beenden alle Cookies inklusive Sessions-Cookies speichern. Dann klappt's auch mit dem Huawei ;)

Hier ist ein Shellscript, das das Transfervolumen (in+out) und IP-Adresse zeigen und protokollieren kann. Das Passwort steht hartkodiert im wget-Aufruf nach --post-data. Das Skript sollte also mit chmod 700 behandelt werden, damit das keiner nachgucken kann. Falls im Passwort Sonderzeichen vorkommen, müssen die in der %-Schreibweise escape'd werden (+ ist %2B, # ist %23, ? ist %3F usw.).

Ohne Parameter aufgerufen werden alle Infos auf die Konsole ausgegeben.
Mit -f dateiname landen die Infos zusätzlich in einer Statusdatei (die IP nur, wenn sie sich von der vorher gespeicherten unterscheidet).
Mit -i, -o, -I kann man einschränken, dass man nur Volumen-In, Volumen-Out, IP sehen will.

#!/bin/sh

showin=0
showout=0
showip=0
status=

while getopts "ioIf:" opt
do
    case "$opt" in
    i) showin=1;;
    o) showout=1;;
    I) showip=1;;
    f) status="$OPTARG";;
    esac
done
shift $(expr $OPTIND - 1)

if [ "$showin$showout$showip" = "000" ]
then
    showin=1
    showout=1
    showip=1
fi

PATH=/opt/bin:/opt/sbin${PATH:+:$PATH}

C=/tmp/cookies.txt
U1="http://vodafonemobile.cpe/login.cgi"
U2="http://vodafonemobile.cpe/basic_status.asp"

wget --save-cookies "$C" \
     --keep-session-cookies \
     -q --tries=1 \
     -O /dev/null \
     --post-data 'Username=admin&Password=PASSWORT_ESCAPED' \
     "$U1"

wget --load-cookies "$C" \
     -q --tries=1 \
     -O - \
     "$U2" | \
awk -F, '
/total_volum_array = /{printf"%d %d ",$3,$4}
/WanIp = /            {gsub(/[(")]/,"",$2);printf"%s\n",$2}
' > /var/log/status-lte.txt
read in out ip < /var/log/status-lte.txt

if [ "$showin$showout" != "00" ]
then
    test $showin  -eq 1 && echo $in
    test $showout -eq 1 && echo $out
    if [ -n "$status" ]
    then
        date +"%Y%m%d-%T $in $out" >> "$status"
    fi
fi

if [ $showip -eq 1 ]
then
    echo $ip
# want echo to file?
    if [ -n "$status" ]
    then
# file exists?
        if [ -f "$status" ]
        then
            lastip=$(tail -1 "$status" | awk '{print$NF}')
            test "$lastip" != "$ip" && date +"%Y%m%d-%T $ip" >> "$status"
        else
# create new
            date +"%Y%m%d-%T $ip" >> "$status"
        fi
    fi
fi

rm -f "$C"

17.12.2012

Die digitale Kluft auf dem Dorf

In letzter Zeit mache ich mir immer öfter Gedanken über die digitale und reale Zukunft, insbesondere unserer eigenen Kinder natürlich, aber ebenso auch etwas abstrakter um die Zukunft meiner Mitmenschen, Kinder und Erwachsener. In den folgenden Absätzen mal eine Sammlung von interessanten Stellen, die mir letztens über den Weg gelaufen sind, und ein paar Gedanken, wie schnell das dann auch wirklich bei den Menschen ankommt.

Wir stehen vor einer gigantischen Umwälzung, und obwohl ich in einer Technologiefirma arbeite (mit dem blaugestreiften Logo ...), kann ich mir kaum vorstellen, wie die Technik unser weiteres Leben verändert. IBM z.B. behauptet in einer kühnen Voraussage, dass in fünf Jahren Computer die 5 Sinne des Menschen nachbilden können, als "Versteher", d.h. Konsument von Reizen, und damit nicht nur z.B. Pixel auf einem Bild wahrnehmen, sondern den Inhalt des Bildes erkennen und damit dem Bild einen Sinngehalt zuordnen können.

Meiner Meinung nach ist das "tragbare Internet" in Form von Smartphones eine der tollsten und grandiosesten Erfindungen, die überhaupt jemals gemacht wurden. Smartphones bieten den Zugriff auf Wissen wie Wikipedia, Google usw., aber ebenso können sie alltägliche Daten speichern, die man sich nicht mehr mit Mühe selbst merken muss (Termine, Einkaufslisten usw.). Die Bandbreite der Einsatzmöglichkeiten von "Apps" auf Smartphones ist sicherlich noch nicht annähernd ausgereizt, und ich persönlich bin gespannt darauf, was alles noch kommen mag.

Auf die Vernetzung von Geräten will ich gar schon mal gar nicht eingehen, zum Einen gibt es die "Car-2-Car"-Kommunikation. die gerade mit WLAN rund um Frankfurt erprobt wird, und der Opel Adam baut da bei der Unterhaltung und Bedienung auf ein ganz neues Konzept. Und auch der Unterhaltungswert ist mit tragbaren Geräten ganz anders, die GPS, Lagesensoren wie Gyroskop, Beschleunigungssensor, manche sogar ein Barometer enthalten. Google macht es mit dem Spiel Ingress vor (derzeit beta nur mit Einladung), was alles mit "augmented reality" möglich ist, also der Überlagerung von realen Informationen mit computergenerierten.

"Google Now" ist auch eine ganz hübsche Idee, bei der persönliche Lebensdaten in ihrer Gesamtheit ausgewertet werden, um daraus zu schlussfolgern, was als nächstes ansteht, und dann zielgerichtet Vorschläge dazu zu machen (z.B. im Terminkalender feststellen, dass eine Besprechung in Frankfurt stattfindet, die Verkehrsnachrichten auswerten und dann selbständig vorschlagen, wann auf welcher Route loszufahren ist).

Was ich mir aber außerdem durchaus vorstellen kann, ist, dass dabei ganz viele Menschen abgehängt werden und sich auf diese Weise eine Kluft bildet, die kaum aufzuholen ist, und die noch viel schlimmer werden wird als die Industrialisierung im 19. und Anfang des 20. Jahrhunderts. Dabei denke ich nicht nur daran, dass die Smartphones Geld für Anschaffung und Betrieb kosten, sondern auch, dass für die sinnvolle Nutzung von Smartphones ein gewisses Interesse und - derzeit noch - Neugierde bei der Erforschung und leider auch ein dickes Fell bei der Duldung von Problemen und Fehlern bedeutet. Der Normalfall ist, dass die "üblichen" Dinge einwandfrei funktionieren, dass aber eben manchmal der Teufel im Detail steckt und eben nur mit Ausprobieren oder Ändern von Einstellungen zum Funktionieren gebracht werden können. Da geben viele bestimmt entnervt auf, bevor sie zuviel Zeit hineinstecken ... Ich könnte auch mal wieder meckern, wie langsam Smartphone-Hersteller Android-Updates liefern, aber das hab ich schon ein paarmal gemacht und spar's mir hier ;-)

Nebenbei könnte ich mir auch noch im Sinne von 1984 vorstellen, dass die Lieferanten von Inhalten und Apps damit eine Filterfunktion entfalten können und damit Möglichkeiten zur Meinungssteuerung haben ... Das klingt ganz schön gruselig. Wenn man nicht über ein Ereignis berichtet, und man nicht zufällig direkt daneben wohnt, findet es in der Wahrnehmung der Menschen nicht statt.

In den Vorträgen über Privatsphäre und Datenschutz ("manage your identity" - halte ich kostenlos nach Vereinbarung für Schulklassen oder Elternbeiräte; sinnvoll ca. ab 7. Klasse, wenn die Kurzen loslegen mit Facebook und Co.) sind die Zuhörer meistens ganz schön erschrocken, was so alles mit ihren Daten passieren kann, insbesondere, wenn man Daten aus vielen verschiedenen Lebensbereichen zusammenführen kann. Besonders erschrecken die meisten, wenn ich das Beispiel mit der iPhone-App "Where are the girls" anführe und beschreibe, dass mit der Löschung der App aus dem Store das grundsätzliche Problem der öffentlichen Daten ja eigentlich gar nicht gelöst ist ... Ein anderes schönes Beispiel dafür, was Konzerne aus ihren Daten alles schlussfolgern können, findet sich hier: Versandhaus weiß von Schwangerschaft vor den Eltern.

Zurück zum Thema "Filterfunktion": da haben sich die deutschen Verlage z.B. im Moment nicht gerade mit Ruhm bekleckert, weil in der Totholzindustrie (=Presseverlage) die Diskussion um das Leistungsschutzrecht zu 99% totgeschwiegen wird, und auch die Gegenseite quasi gar nicht zu Wort kommt (ich erinnere an meinen abgelehnten Leserbrief für die WZ ...). Eine Diskussion, die nur "im Internet" geführt wird, wird von geschätzt 80% der Bevölkerung kaum oder gar nicht wahrgenommen.

Ich und meine Frau sind in diversen Institutionen ehrenamtlich (ein wenig ...) tätig, z.B. im Elternbeirat (Kindergarten, dann Grundschule, Gymnasium), Förderverein der jeweiligen Schulen, Kirchenvorstand, und in Vereinen.

Bei den Sitzungen oder sonstigen Besprechungen fällt mir in letzter Zeit ganz massiv auf, dass es verschiedene Typen von Menschen gibt, zumindest, was die Nutzung und überhaupt den Nutzungswillen von Technik angeht. Die folgende Liste betrifft nicht nur Smartphones, sondern ganz allgemein alles, was mit Strom betrieben wird ;)

  • Aufgeschlossene Neugierige, die Wert auf Ausgereiftheit legen (jo, das bin ich ;) ... mittlerweile, mein Fell ist nicht mehr so dick, was die Toleranz von Fehlern im Produkt angeht)
  • Zögerliche, die man mit ein wenig Überredung dazu bringen kann, etwas zu nutzen (dazu zählt meine Frau, die seit neuestem ein Motorola Milestone 2 hat, nachdem ihr das abgelegte Motorola Flipout von Kind 1 zu klein war - jetzt muss sie sich "nur noch" an den Google-Kalender und Einladungen gewöhnen und das Dings immer dabei haben)
  • Widerstrebende, die Technik nutzen, wenn man sie ihnen erklärt und vorbereitet. Dann nutzen sie sie auch gern, weil es einen Mehrwert bietet (meine Schwiegermutter lässt mich Anleitungen lesen und erwartet dann, dass mit einem Knopf alles funktioniert - schwierig, wenn man für Fernseher und Sat-Receiver zwei Fernbedienungen hat ;) )
  • Ignorierer, die von der Existenz einer Technik wissen, aber sie nicht nutzen *wollen* und das auch unmißverständlich alle spüren lassen.
  • Widerstrebende, die eine Technik nutzen, weil es von ihnen "irgendwie" erwartet wird; aber eigentlich wollen sie nicht, trauen sich aber nicht, dies so vehement zu vertreten wie die "Ignorierer". Der Widerstand besteht darin, die Technik (z.B. Email) so selten zu nutzen, dass das Gegenüber es nach einem oder zwei Fehlschlägen aufgibt, z.B. weil eine Einladung per Email nicht wahrgenommen wurde.

Diese Klassifizierung ist sicherlich nicht erschöpfend, aber nahezu meine komplette eigene Umgebung kann ich da schon ziemlich vollständig einsortieren ;)

In einer Elternbeiratssitzung der 6. Klasse von Kind 1 hatte ich mal vorgeschlagen, ein Wiki mit einer geschlossenen Benutzergruppe einzurichten, um dort Informationen abzulegen, die für die ganze Klasse relevant sind. In einer Klasse von 30 Kindern waren gerade mal 3 Eltern, die überhaupt verstanden, von was ich eigentlich gesprochen hatte. Wikipedia kannten zwar fast alle, aber die Tatsache, dass man a) so etwas selbst einrichten und b) selbst darin schreiben kann, kam für *alle* total überraschend.

Im Elternbeirat der Grundschule haben wir es nichtmal geschafft, unsere Mitteilungen als Email zu schicken ("ich guck nur alle 3 Wochen in meine Email ..."). Also weiterhin ausdrucken und in die Ranzenpost ...

Immerhin: Email funktioniert im Gymnasium, aber das war's auch schon. Termine über Doodle? Blog? Google-Kalender? Ach nö, danke.

Ganz bemerkenswert und total klasse finde ich, dass die Gemeinde Wölfersheim die Müllabfuhr-Termine als öffentlichen Google-Kalender anbietet. Das ist simpel und genial bequem. Ich liebe es.

Zu diesem Dilemma der Aufspaltung in "Umarmer" und "Ablehner" trägt natürlich auch bei, dass sich die Telekom-Konzerne nicht gerade mit Ruhm bekleckern, was die Internet-Versorgung auf dem platten Land betrifft. Mit ein klein wenig Verschwörungstheorie könnte ich mir sogar erklären, warum bei meinem DSL der variable RAM-Modus abgeschaltet wurde und ich plötzlich wieder mit 384 statt 1700 KBit/s surfen musste.

Seit Oktober haben wir stattdessen LTE mit 7200 KBit/s, aber dafür mit einer mobilfunktypischen Beschränkung auf 10 GB Volumen pro Monat (Korrektur: seit Dezember gibt es S/M/L-Tarife mit 10/15/30 GB pro Monat und für 9,95 Euro sogar zusätzliche 30 GB auf Zuruf), und danach mit Drosselung auf die vorherige DSL-384-Geschwindigkeit. Das führt dazu, dass man immer mit dem Hintergedanken surft, wann die Drosselung zuschlägt ;(. Dienste wie Internet-Radio und Streaming sind so natürlich illusorisch.

In diesem Sinne: jeder sollte sich ein wenig mehr mit Technik beschäftigen, und sei es nur, um mit seiner Privatsphäre bewusst umzugehen. Nicht nur Facebook und Google wollen unsere Daten, sondern auch die Konzerne, die sich an Rabattkartensystemen und anderen Kundenbindungsprogrammen beteiligen, wollen gern soviel wie möglich über uns wissen.