Es war einmal ein Sambashare …

und dann kam Fedora 31 daher. Ich habe Zuhause diverse Geräte, die sich von meinem PC Videos in die Küche, ins Bad, ins hiesige Bett oder ins Hotelbett nach Paris ziehen können, falls NetFlix ausfällt 🙂

Es war einmal ein Sambashare …

Nun ist da ein älteres AOS4 Gerät dabei, welches außer Emails eigentlich nur als Unterhaltungsquelle für NetFlix oder meine eigene Videothek dient. Das liegt daran, daß es praktisch nichts wiegt und der Akku trotz des Alters lange hält. Die Rechenleistung reicht auch genau noch dafür aus, bei FHD wirds schon schwierig bis geht gar nicht mehr.

Jetzt stand der Wechsel auf Fedora 31 wegen Fedora 30 EOL sowieso an, also habe ich das 7.000 Schritte Update gestern mal gemacht. Das lief technisch gut, aber sehr lange und das trotz SSD. Nach dem Reboot gabs dann das von Windows schon bekannte Durchbooten ohne Bildschirm zucken. Wers mag, bitte. Bis auf ein VNC Problem in Python, das sich durch rustikales Nachinstallieren mit Gewaltandrohung von alten Paketen lösen lies, gab es keine nennenswerten Probleme.

Heute wollte ich dann in der Küche beim Mittag mal etwas laufen lassen, aber das bislang genutzt Programm meinte nur so, daß kein Server da wäre. Also habe ich nachgesehen, aber der Server war da. Das gleiche Programm, aber mit AOS5 als Basis, konnte den Sambaserver auch finden und nutzen, aber die AOS4 Version davon nicht. Das finde ich jetzt schon so komisch, daß ich dem Dev da mal eine Email geschrieben habe. Leider gabs noch keine Reaktion, falls die jemals kommen wird.

Also habe ich etwas geforscht und der Unterschied zu Fedora 30 war bei Samba, daß es dort noch Version 4.10.15 war und jetzt 4.11 ist. Mit 4.11 wurde per default NT1 aka Samba 1 deaktiviert. Nach sehr viel rumraten, weil Lösungen aus dem Netz dafür verliefen alle samt im Sande, hatte ich dann doch einen Weg gefunden:

[global]


client min protocol = NT1
server min protocol = NT1
security = user
ntlm auth = ntlmv1-permitted

Wenn man obiges in die /etc/samba/smb.conf einträgt und neustartet, dann geht auch wieder mit AOS4 Programmen 😉

Wenn Ihr das mal selbst testen müßt: smbclient -L //IP.ADDR/

Wenn da was angezeigt wird und in eurem Programm nicht, dann liegts an Eurem Programm 😉

 

es geht um scrcpy

Heute solls um ein kleines Projekt namens „scrcpy“ gehen. Das ist jetzt kein L33t-Speak ;), sondern stand wohl mal für „screen copy“, denn genau darum geht es: Eine Bildübertragung vom Handy zum PC – Live.

„scrcpy“

Das Projekt gibt es bei GitHUB im Genymobile Repo und man muß es selbst zusammen häkeln. Das stellt natürlich eine gewisse Hürde dar, daher hier eine kleine Hilfe, was man machen muß :

Schritt 1: Buildtools installieren

Dazu bitte als Root ausführen:

Wer noch kein RPMFusion für Fedora aktiviert hat, könnte es machen:

# enable RPM fusion free
dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

Ansonsten braucht Ihr nur das hier:

dnf install SDL2-devel ffms2-devel meson gcc make java

Schritt 2 – Sourcen laden

Zunächst machen wir uns mal ein neues Arbeitsverzeichnis:

[marius@eve Programme]$ mkdir scrcpy
[marius@eve Programme]$ cd scrcpy/

Dann laden wir die Sourcen von dem Programm via git herunter:

[marius@eve scrcpy]$ git clone https://github.com/Genymobile/scrcpy
Klone nach ’scrcpy‘ …
remote: Counting objects: 2441, done.
remote: Total 2441 (delta 0), reused 0 (delta 0), pack-reused 2441
Empfange Objekte: 100% (2441/2441), 539.98 KiB | 1.27 MiB/s, Fertig.
Löse Unterschiede auf: 100% (1417/1417), Fertig.

Nun brauchen wir noch den Server ( den kaputten Buildprozess für den Server überspringen wir hier, da es einen PreBuild-Server gibt, aber wir brauchen trotzdem einige Files aus dem Buildprozess):

[marius@eve scrcpy]$ wget https://github.com/Genymobile/scrcpy/releases/download/v1.3/scrcpy-server-v1.3.jar

Schritt 3 – Umgebung bauen:

[marius@eve scrcpy]$ cd scrcpy
[marius@eve scrcpy]$ meson x –buildtype release –strip -Db_lto=true
The Meson build system
Version: 0.47.1
Source dir: /home/marius/Programme/scrcpy/scrcpy
Build dir: /home/marius/Programme/scrcpy/scrcpy/x
Build type: native build
Project name: scrcpy
Project version: undefined
Native C compiler: cc (gcc 7.3.1 „cc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6)“)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Found pkg-config: /usr/bin/pkg-config (1.3.12)
Native dependency libavformat found: YES 57.71.100
Native dependency libavcodec found: YES 57.89.100
Native dependency libavutil found: YES 55.58.100
Native dependency sdl2 found: YES 2.0.7
Configuring config.h using configuration
Program ./scripts/build-wrapper.sh found: YES (/home/marius/Programme/scrcpy/scrcpy/server/./scripts/build-wrapper.sh)
DEPRECATION: build_always is deprecated. Combine build_by_default and build_always_stale instead.
Build targets in project: 6
Found ninja-1.8.2 at /usr/bin/ninja
[marius@eve scrcpy]$ cd x
[marius@eve x]$ ninja
[30/31] Linking target app/scrcpy.

Wenn Ihr das hier lest:

[31/31] Generating scrcpy-server with a custom command.
FAILED: server/scrcpy-server.jar
/home/marius/Programme/scrcpy/scrcpy/server/./scripts/build-wrapper.sh ../server/. server/scrcpy-server.jar release
Downloading https://services.gradle.org/distributions/gradle-4.4-all.zip

und dann jede Menge Gradle-Schrottdownload-Meldungen erscheinen, hats mit dem eigenen Server nicht geklappt und es kommt der nächste Schritt:

Den Scheiss wieder löschen 😉

Das Ihr hier andere Pfade habt, muß ich glaube ich, nicht extra erwähnen, oder ? 😉

[marius@eve x]$ cd ..;rm -rf x
[marius@eve scrcpy]$ meson x –buildtype release –strip -Db_lto=true -Dprebuilt_server=/home/marius/Programme/scrcpy/scrcpy-server-v1.3.jar
The Meson build system
Version: 0.47.1
Source dir: /home/marius/Programme/scrcpy/scrcpy
Build dir: /home/marius/Programme/scrcpy/scrcpy/x
Build type: native build
Project name: scrcpy
Project version: undefined
Native C compiler: cc (gcc 7.3.1 „cc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6)“)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Found pkg-config: /usr/bin/pkg-config (1.3.12)
Native dependency libavformat found: YES 57.71.100
Native dependency libavcodec found: YES 57.89.100
Native dependency libavutil found: YES 55.58.100
Native dependency sdl2 found: YES 2.0.7
Configuring config.h using configuration
Build targets in project: 6
Found ninja-1.8.2 at /usr/bin/ninja
[marius@eve scrcpy]$ cd x
[marius@eve x]$ ninja
[31/31] Linking target app/scrcpy.

Schritt 5 – Installieren

[marius@eve x]$ sudo ninja install
[sudo] Passwort für marius:
[0/1] Installing files.
Installing app/scrcpy to /usr/local/bin
Stripping target ‚app/scrcpy‘
Installing server/scrcpy-server.jar to /usr/local/share/scrcpy

Schritt 6 – Starten

Trommelwirbel und …

und wie man an dem Bild schon sehen, daß Ganze funktioniert nur, wenn man in den Entwicklereinstellungen des Handies das USB-Debugging erlaubt.

man sieht die Android Oberfläche mit Icons

Nun kann man, wenn man kann, mit der Maus das Handy auf dem PC fernsteuern, Eingaben machen, Programme starten, Surfen, Spielen, Videos schauen und mit SimpleScreenRecorder auch Tutorials vom Handy aufnehmen.

Wenn das böse Wenn nicht wär.

Die Sache mit dem Wenn man kann ist fies. Die Verbindung zu meinem Handy lebt nur wenige Sekunden, aber andere Handies bekommen das auch dauerhaft hin, wie Malte aus unserer LUG neulich demonstriert hat.

Es kommt also auf das Android ROM an, das auf dem Handy läuft. Wer eine Alternative sucht, kann Teamviewer für Android nutzen, das bekommt das deutlich stabiler auch auf einem Stock-ROM hin. Aber wer weiß dann schon, wer da mitliest.

Am Ende dann nicht vergessen den Gradle Kram wieder zu entfernen: rm -rf ~/.gradle

Androids K9 Mail nutzt noch TLS 1.0

Au man, man darf echt nicht nachsehen, was seine Programme so tun 🙁

K9-Mail

Das auf Android beliebte K9-Mail setzt auch gebrochene Krypto und nur als Beispiel erdachte Cipher!

2018-05-07 08:52:17 1fFa0M-0004M4-PW <= AAAAAAAAAAAAAAA H=********.dip0.t-ipconnect.de (XXXXX) [XXXXX] P=esmtpsa X=TLSv1:AES128-SHA:128 CV=no … id=1baxr95b3gdd6225t9ggj1yy.1525675936562@email.android.com

Das 146 MB große Paket enthält allen Anscheins nach nicht mal eine aktuelle SSL Implementierung. Schlimmer wäre es nur noch, wenn Sie das an Android outsourcen würden, aber wofür dann die 146 MB ? Im Programm ist nur eine „größere“ Grafik enthalten , der Rest ist pillepalle und ansonsten auch recht trivial von der Funktion her.

Für ein „Advanced Email for Android“ Programm echt enttäuschend 🙁

Mal sehen ob Sie antworten 😀

Webseite: https://k9mail.github.io/

Android – Jitsi Probleme mit der Fritz!Box beheben

Im Chaos um die VOIP Probleme der einzelnen Linuxclienten, kommt hier nun der Fix für das Passwort-vergessen-Problem von Jitsi für Android.

Das Problem

Jitsi für Android, was ja nur eine jahrealte Alphaversion ist, hat offensichtlich Probleme die Verbindung zur Fritz!Box zu halten. Normalerweise gibt es dafür den KEEP ALIVE oder die REGISTER Funktion, aber hier macht Jitsi wohl soviel falsch, daß es der Fritz!box auf den Keks geht und es Jitsi rauswirft. Da sich Jitsi jetzt nicht mehr anmelden kann, kommt es zu einer Rückfrage bei der Jitsi das eingegebene Passwort, das zu allem Überfluss auch nicht gespeichert war, vergißt. Als Folge ist man laufend auf der Fritz!Box gesperrt, und muß dauernd das Passwort eingeben.

Da mich das an die Probleme mit SIPGate errinnert hat, habe ich da den gleichen Fix versucht: die Connection auf TCP umstellen. Nur dazu braucht man einen Proxyserver :)Also fragen wir bei AVM nach, was dort eingetragen werden muß und ob das überhaupt klappen wird.

Der AVM Support

Hier die erste Anfrage :

Detaillierte Beschreibung:
Guten Tag,die Frage ist allgemeiner Natur, da die Jitsi Androidversion immer wieder die Anbindung zum Server verliert und nach dem Passwort fragt.Da ich ähnliche Probleme mit Sipgate hatte und dort der Wechsel auf TCP via Proxyservereinstellung die Probleme behoben hat, wollte ich gern wissen, ob das mit einer FritzBox ähnlich gehen würde. Auch wenn das in einem lokalen Netz eher komisch klingt 😀mit freundlichen Grüßen,
….

Die von AVM kommende Antwort war schon etwas merkwürdig, aber fairerweise muß man ihm zugestehen, daß nicht jeder Jitsi kennen muß, nur weil er bei AVM arbeitet:

….
vielen Dank für Ihre Anfrage an den AVM Support.Leider muss ich gestehen, dass ich Ihr Anliegen anhand Ihrer Informationen noch nicht vollumfänglich verstanden habe. Für die weitere Analyse benötigen wir umfangreichere Informationen.Bitte beantworten Sie mir folgende Fragen:
An was für einem Internetanschluss von welchem Anbieter setzen Sie die FRITZ!Box ein (z.B. Telekom DSL 16 Mbit/s)?

  • Welche Geräte (z.B. Computer, NAS-System, Hub/Switch) verwenden Sie? Geben Sie Hersteller und Modellnamen an.
  • Wie ist das Android-Gerät mit der FRITZ!Box verbunden?
  • Was für ein „Server“ wird verwendet?
  • Welche Protokolle werden verwendet?
  • Was soll das „lokale Netz“ leisten?
  • Wie sieht Ihr Wunschszenario aus?
  • Wie äußert sich das Fehlerbild in Ihrer bisherigen Konfiguration?

    Senden Sie mir bitte anschließend die Fehlerbeschreibung und das ZIP-Archiv mit den Support-Daten zu.

Wir werden die Support-Daten nach Erhalt detailliert analysieren und Ihnen anschließend eine Rückantwort zukommen lassen.

Bitte beachten Sie, dass dieser Prozess eine gewisse Dauer in Anspruch nimmt.
Ich wünsche Ihnen schon jetzt einen guten Start ins Wochenende.

Freundliche Grüße aus Berlin
….

Ich mußte dem Mitarbeiter Recht geben, er hatte es nicht verstanden, also beschrieb ich es etwas sehr eindeutig :

Fritzbox -> wlan -> android handy -> Software: jitsi android per SIP > fritzbox

Ich möchte eigentlich nur wissen, ob es für die SIP Anbindung zur Fritzbox eine TCP Option auf der Box gibt und wenn ja, was man(wenn überhaupt) als Proxyserver eingeben muß.

Sehr Ihr da irgendwo die Erwähnung der FritzPhone-App ? Der Mitarbeiter wohl schon :

vielen Dank für Ihre Geduld.
Die Anmeldung der App an der FRITZ!Box ist technisch möglich. Hierzu muss eine IP-Nebenstelle innerhalb der FRITZ!Box angelegt werden.
Die Eintragung eines Proxys ist möglich, aber nicht erforderlich.

Wenn der Support ratlos ist

Wir halten fest: Problem nicht verstanden und Anfrage nicht richtig gelesen und damit bei der Antwort Thema verfehlt. Spätestens bei dem Stichwort SIP hätte es klingeln müssen.

In dem Fall hilft also nur ausprobieren und genau das tat ich 🙂

Lösung

Jitsi starten, dann ins Menü und die ACCOUNT SETTINGS aufmachen. Dann den Fritzboxeintrag auswählen und dessen Settings öffnen. Und kommt nach einigen Scrollen ein Schiebeschalter unter, der bei der automatischen Proxykonfiguration steht. Den abschalten und dann das „Proxy“ aka. die Fritzbox selbst angeben:

Da es die heimische Fritz!box ist, können wir hier natürlich die IP der Box eingeben und den Port 5060 benutzen. Als bevorzugten Transport dann wieder TCP auswählen und das Problem ist scheinbar erledigt. Denn, wenn Ihr diesen Beitrag lest, gab es eine Woche lang keine Probleme mehr und damit auch keinen Grund, den Beitrag zu löschen 😉 Telefonieren geht mit den Einstellungen auch noch, also scheint das so zu laufen.

Android: FireFox und das WiFi-Tickling

Und auch heute wieder ein Beitrag aus der Kategorie „Niemals genauer hinschauen“ :

Wie im Beitrag gestern über Tastatureingaben, die an Suchmaschinen geschickt werden, habe ich auch heute wieder was aus meinem neuesten Projekt für Euch. Euer lieber Firefox bombardiert das Gateway mit scheinbar unsinnigen Paketen:

16:05:52.958119 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:52.973897 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:52.990415 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.018183 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.023820 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.040692 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.058932 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.075325 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.091926 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.108330 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.124708 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0
16:05:53.141359 IP 192.168.20.3.59077 > 1.0.0.0.4886: UDP, length 0

In einem Bugreport an Firefox wird das genauer geschildert:

FireFox Android 5.1

FireFox Android 5.1

If you’re on wifi and an IPv4 DHCP network we will send 0 length UDP packets at port 4886 of your gateway at the default rate of 60hz for 400ms from the start of the transaction in an attempt to improve RTT during the critical early phases. I call this „tickle time“.

Nur so ganz stimmt das nicht, denn 1.0.0.0 gehört nicht meinem Router, sondern ist den Arpa-Laps zugeordnet und auch an sich eher nicht routbar, genau wie 10.0.0.1/8 und ähnliche private Netzwerke.

RTT steht dann für RoundTripTime und der Sinn des Ganzen ist, daß das Antwortverhalten vom WLAN Router verbessert wird, weil er sieht, daß da „massiv“ Pakete kommen und er die echten Pakete dann schneller routet, weil die ja wichtig sind.

Hier zu merken ist: Das macht nur Firefox so, ergo: sieht man son Traffic, weiß man, es ist ein Android Phone mit FireFox, der grade aktiv genutzt wird. Das wir das noch brauchen werden, werdet Ihr bald sehen 🙂

mehr dazu:  https://bugzilla.mozilla.org/show_bug.cgi?id=888268

Android: Firefox übermittelt jede Tasteneingabe

Mein neuestes Projekt, die mobile Sicherheit von Handies ergründen, hat schon seinen ersten Treffer geliefert.

Zu meinem Erstaunen übertrug Firefox jede Tastatureingabe bei der Eingabe einer URL an einen dubiosen Server ohne Namen. Wie sich rausstellte, werden dadurch die Suchvorschläge erzeugt, auch wenn man URLs eintippt.

Das ist natürlich grade bei privaten Domains oder Urls mit Parametern ein Problem, weil irgendein Server das natürlich zusammensetzen kann. Ein eigenes Suchfeld, wie beim Desktopbrowser wäre die Lösung, aber da brauchen wir nicht drauf hoffen. Mir ist natürlich auch klar, daß der Platz auf einem Handy Display begrenzt ist, aber schön wärs, wenn der Datenschutz zuerst käme, man es also einschalten müßte.

Wer das nicht will, kann das in den Einstellungen zu Suchmaschinen abschalten.

Projekt: Laß das Telefon vorlesen

Android Apps wie „Talk – Free“ lesen dem Benutzer einen getippten Text vor und haben meistens das Problem, daß Sie mit großen Dateien nicht zurechtkommen. Mit Dateien in meiner Größenordnung sterben die Apps weg wie Fliegen, wenn sie die Dateien nebst Inhalt überhaupt öffnen können 🙂

Deswegen hatte ich gestern die fixe Idee, ich müßte eine TTS App (Text-To-Speech) für mein Handy bauen. Ok, satte 4 Stunden hat es dann gedauert, dem bescheuerten Eclipse bei zu bringen, überhaupt wieder Apps, AVD’s SDK’s und anderes anzuzeigen, upzudaten, zubenutzen und zu bauen. Von den vielen, vielen Rückschlägen, Flüchen, Verwünschungen und :Facepalm:s  mal abgesehen, kam am Ende etwas brauchbares raus.

Ich dachte immer Eclipse wäre das Tool zum Bauen von Android, oder irgendwelchen Anwendungen, aber so beschissen wie gestern hat es sich noch nie angestellt. Das SDK Update entfernte dann gleich mal die SDK TOOLS inkl. dem SDK Manager selbst von der Platte, nachdem es min. 400 MB unnütze Files auf die Platte gesaugt hatte. Dann löschte es den einzigen API Stand, der mich als Zielplattform wirklich interessiert hatte: Android 3.2+ … AAAAAAARGG…nein, ruhig, nicht schon wieder… tief luftholen… Android 3.2 ist API Level 13 und wird, wieso auch immer, nicht mehr im SDK Manager aufgeführt. Außer dem Tools Ordner wurden auch noch die Systemimages entfernt, so daß die bislang angelegten Virtual Devices aka Debugger-Umgebungen auch weg waren und auch nicht mehr angelegt werden konnten. Nachdem ich dann einen neuen SDK benutzt hatte, konnte ich zwar einen AVD anlegen , aber nicht benutzen, weil der sich nicht in LAN geklinkt hat und ohne LAN Verbindung war mein kleines Programm komplett nutzlos.

Was nun folgte war zum Glück etwas einfacher, aber nicht weniger aufwändig. Statt der netten Tante auf meinem Tablet, mußte mein neues Handy als Zielplattform herhalten. Leider hat Google das USB Debugging, ohne das man am PC nicht sehen kann, wo es denn genau bei der Liveanwendung knallt, versteckt und zwar dämlich versteckt. Es ist ok um Dumbos davon abzuhalten, das USB Debugging und die ganzen anderen coolen Entwicklerfunktionen zu aktivieren, aber es bleibt dämlich. Am Ende wollte das Handy dann auch per ADB angesprochen werden und es konnte endlich losgehen.

Das Projekt

Oben habe ich bereits verraten, daß es um TTS und große Files geht. Ich rede von Textfiles mit einer Größe von 500kb+ . Sich die vorlesen zu lassen, bietet keine „kostenlose“ App an. Damit man sich das vorstellen kann, 500kb sind ca. 500 Seiten DIN A4 Papier, also eine Menge Buchseiten. Will man sich die vorlesen lassen, dauert das Stunden und genau das habe ich vor.

Aber wieso will man sich das überhaupt  vorlesen lassen ? Naja zum einen kann man dann die Handyausgabe als Hörbuch verkaufen 😀 zum Anderen, und da komme ich derzeit ins Spiel, ist es richtig toll zum Korrekturlesen meines Romans. Die Rechtschreibkontrolle vom Officeprogramm kann zwar Fehler entdecken, aber falsche Worte, die richtig geschrieben wurden nicht. Außerdem findet diese auch keine sprachlichen Unschönheiten z.b. zu komplizierte Texte, falsch nieder geschriebene Gedankengänge usw. . Und da setzt jetzt die App ein, denn wenn es sich vorgelesen schräg anhört, ist es schräg, auch wenn es beim Lesen ok war. Nichts ist blöder für einen Romanschreiber, als wenn man den Roman nacher nicht vorlesen kann, ohne selbst zu stocken.(Auch dieser Absatz wurde Ihnen gespondert von Hardcore – der TTS App)

Das Problem

Die freien Apps lesen vor, was andere Apps an sie teilen oder per Copy&Paste vom User eingegeben wird.

Wer Handies kennt, kann sich vorstellen, daß alleine das Markieren des Textes den man hören will, Stunden braucht, wenn man es überhaupt fehlerfrei schafft. Vom Tippen auf dem Handy ganz zu schweigen 😉

Die Idee

Verlagern wir doch das Markieren und Ausschneiden des Textblockes auf den Desktop-PC, sprich meinen Linuxrechner. Den Text sendet man einfach per Netzwerk an die Sprachausgabe.

Die Stolperfallen

Natürlich liegen die alle im Android begraben und sind mehr oder weniger :faceplam:  . Wann kommt endlich der Tag, wo jemand ein Fedora ROM für Samsungsphones veröffentlicht, es wäre das Ende von Android wie wir es kennen und hassen.

Falle 1 : Die App muß einen öffentlichen Serverport öffnen, damit man etwas hinschicken kann.
Falle 2 :  Man muß die Handy  IP Adresse kennen, sonst kann man Falle 1 nicht umschiffen.
Falle 3 : Netzwerkfunktionen in der MainActivity sind Tabu, man braucht einen Netzwerktask.
Falle 4 : GUI Elemente dürfen nur von dem Task benutzt werden, der den View geöffnet hat.

Falle 5: Wie bekommt man den Textblock eigentlich zum Handy ?

Fangen wir mal mit #5 an :

[marius@eve ~]$ nc 192.168.0.117 3000
Wie die Webseite TheHackernews.com heute berichtet, ist es Forschern der Standford University bereits in 2015 gelungen, einen Super-Super-Cookie zu nutzen, in dem sie über die Browser API der mobilen Versionen von Chrome, Opera und Firefox den Batteriestatus abgefragt haben. Durch die Kombination von angezeigter "verbleibender Zeit in Sekunden" und dem Prozentwert der Ladung, ergeben sich bis zu 14 Millionen Kombinationen, die man Geräten zu ordnen kann.

Genau, das Schweizer Armeemesser „nc“ (NetCat) muß zumindest in Phase 1 der Enwicklung reichen und genau das tut es. Man öffnet also einfach eine TCP Verbindung zur App und schreibt den zu sprechenden Text rein. Wenn alles klappt, kommt Sprache raus.

Das war einfach, kommen wir zu Falle #2 :

        
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
@SuppressWarnings("deprecation")
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
log("MY IP is "+ip);

Das funktioniert übrigens nur für LAN IPs. Wenn man WAN, also in dem Mobilen Internet unterwegs ist, bekommt man i.d.R. eine IPv6 Adresse und damit kommt die Routine oben nicht zurecht. Da ich WAN nicht brauche, reicht das hier.

Die TTS Engine ist leicht zu öffnen:

tts = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
   @Override
   public void onInit(int status) {
      if(status == TextToSpeech.SUCCESS ) {
         tts.setLanguage(Locale.GERMAN);
      }
   }
});

Nun zum Starten des Netzwerkthreads, den dem muß ich die IP mitgeben:

Thread serverThread = null;
...
this.serverThread = new Thread(new ServerThread(ip));
this.serverThread.start();

Der Serverthread an sich ist simpel. Ich nehme hier Port 3000, 10 Connections gleichzeitig auf meinem Socket und lege fest, daß die externe IP im LAN zum Binden des Interfaces genutzt werden soll, weil dumbo Android das sonst auf 127.0.0.1 aufmacht, da natürlich keiner was von 🙂  Der Code basiert auf einem Beispiel zu Serversockets, das aber wie dort beschrieben gar nicht funktioneiren kann 😉 Nehmt die Version hier:

public void run() {
			Socket socket = null;
			try {
				serverSocket = new ServerSocket(3000,10,InetAddress.getByName(ip));
				this.log("ServerSocket gestartet:"+ serverSocket);
			} catch (IOException e) {
				e.printStackTrace();
				this.log(e.toString());	
				return;
			} catch (Exception e) {
				e.printStackTrace();
				this.log(e.toString());
				return;
			}
			while (!Thread.currentThread().isInterrupted()) {
				this.log("ServerSocket waiting for accept:");
				try {
					if (serverSocket.isClosed()) serverSocket = new ServerSocket(3000,10,InetAddress.getByName(ip));
					
					socket = serverSocket.accept();
					System.err.println("Socket connection: "+ socket);
					this.log("Connection accepted");

					CommunicationThread commThread = new CommunicationThread(socket);
					new Thread(commThread).start();

				} catch (IOException e) {
					e.printStackTrace();
					this.log(e.toString());
				} catch (Exception e) {
					e.printStackTrace();
					this.log(e.toString());
				}
			}
		}
	}

Die doppelten Catch-Anweisungen sind natürlich nur zu Demozwecken drin. Ist die App mal gebaut, kann man unterscheiden zwischen einem echten IO Fehler und anderen Fehlern, z.b. OOM ( Out Of Memory ) und verschiedene Meldungen erzeugen.

Der CommunicationThread öffnet das Socket, daß beim Accept()  rausgekommen ist, extrahiert den InputStream(), macht einen BufferedReader daraus und ließt den Text zeilenweise ein, bis das Socket geschlossen wird:

       this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));

try {
	String read = input.readLine();
	if ( read == null ) return; // wichtig, weil läuft sonst in einer Endlosschleife

	updateUIThread ui = new updateUIThread(read);
	updateConversationHandler.post(ui);

} catch (IOException e) {
	e.printStackTrace();
	this.log(e.toString());
	return;
} catch (Exception e) {
	e.printStackTrace();
	this.log(e.toString());
	return;
}

Der UIUpdateThread macht dann nichts weiter als die Textnachricht in Zeilen umzuwandeln und dann die TTS Engine zu füttern. Dabei wartet die Anwendung solange bis nicht mehr gesprochen wird, wofür der Thread 100ms schläft. Das schont die Batterie.

public void run() {
	String[] lines = msg.split("\\.");
	for(int i=0;i<lines.length;i++) { if ( lines[i].trim().length() > 0 ) {
			Toast.makeText(getApplicationContext(), lines[i],Toast.LENGTH_SHORT).show();
			tts.speak(lines[i], TextToSpeech.QUEUE_ADD, null);
			while( tts.isSpeaking() ) {
				try {
					Thread.sleep(100);
				} catch (Exception e) {
					e.printStackTrace();
					Toast.makeText(getApplicationContext(), e.toString() ,Toast.LENGTH_LONG).show();
				}
			}
		}
       }
}

Fertig ist unser Remote-TTS-Reader 🙂

Nun leiten wir das Audio Signal des Telefons noch an den Mikrofonanschluß vom PC und starten FFMPEG:

ffmpeg -f pulse -i default -c:a:0 libmp3lame -b:a:0 128k test.mp3

Fertig ist das Hörbuch für unterwegs 🙂

Ihr könnt die fehlenden Teile aus dem Tutorial extrahieren, es ist der gleiche Aufbau. Nur habe ich noch einiges erweitert, z.b. logging, weil seine Routinen halt nicht funktioniert haben. Die relevanten Änderungen sind oben drin, so daß Eurer Projekt funktionieren sollte.

Anmerkung: Man kann von 10 Rechnern aus die APP auf dem Handy gleichzeitig ansprechen, aber die Sprachengine wird das nur nacheinander wiedergeben.

 

Android: Qualcommgeräte nutzen unsichere Schlüssel

Wer ein Qualcomm Android Handy hat und seine „Platte“ verschlüsselt hat, sollte sich flugs ein neues Gerät kaufen und das alte zerstören. Die Schlüssel für die Festplattenverschlüsselung werden auf vorhersagbare Art erzeugt und sind damit null und nichtig!

Der unten verlinkte Artikel geht detailiert darauf ein, wie das technisch gemacht wird. Man kann eine Menge lernen, wie so etwas geht und, viel wichtiger, wie man es nicht macht. Da Android auf Linux aufbaut, kann man sicherlich auch etwas für Linux ableiten.

Qulle: https://bits-please.blogspot.de/2016/06/extracting-qualcomms-keymaster-keys.html

Linux auf Android benutzen

Linux kann man auf zwei Wegen in sein Handy bekommen:

  1. Als PC Emulator mit Limbo ( langsam )
  2. als natives Produkt per Linux Deploy

letzteres kann u.a. Fedora 22 und Ubuntu laufen lassen.  Allerdings wird es spaßig, weil der Desktop per VNC an das Device geschickt wird 🙂

Wer sich mal informieren will : hier gibt es mehr

Diese Woche im Netz

ZFS wurde endlich als stabile Version für Debian vorgestellt und soll kurzfristig für alle GNU Linuxe wie Fedora und Ubuntu usw. bereit stehen. ZFS ist ein Userland Filesystem, daß durch Dedublikation Speicherplatz einsparen kann. Wie das allerdings den meisten Endanwendern helfen soll, die kaum über doppelte Daten verfügen dürfen, ist mir ein Rätsel. Im Serverbereich ist die Dedublikation schon lange ein Thema, da hier tatsächlich oftmals die gleichen Daten anfallen. Beispiel: 10 User installieren WordPress 4.5. Mit ZFS gibt es die Files nur einmal auf der Platte, aber 10 User glauben Sie hätten das für sich 🙂 Im Prinzip sind das Symlinks auf Datenblockebene, die vom Filesystem selbst gemanagt werden. Ich bin mal gespannt wie stabil das wirklich ist, denn mein letzter Versuch endete im Datengau, zum Glück ohne realen Datenverlust.

Quelle: ZFS on Linux

Android Central hat T-Mobile geehrt, als den Carrier ( Mobilfunkanbieter ) bei dem man am einfachsten aus dem Vertrag raus kommt, wenn man wechseln will. Wie schlimm muß das bei den anderen sein, wenn der Mutterkonzern von T-Mobile, also die DTAG, schon ! 6 ! Monate braucht, um einen Festnetzanschluß zu kündigen und die Nummer zur Portierung freizugeben ?

Hab das gerade selbst erlebt, also keine Schmähkritik, sondern leider die Realität.

Quelle: How do i cancel T-Mobile

Endlich mal eine sinnvolle IT Entscheidung: der EuGH Gutachter meint, daß IP Adressen zwar persönliche Daten sind (, weil ja auch jeder sofort herausbekommen kann, wer die IP grade inne hat 😉 ), aber trotzdem von Webseitenbetreiber auf „Vorrat“ gespeichert werden dürfen, denn diese hätten ein „berechtigtes Interesse“ ihre Infrastruktur in Stand zu halten. Das meint übersetzt, daß man IP’s speichern darf, damit man z.b. DOSangriffe erkennen und abwehren kann.  Wir halten das für SINNVOLL!

Der Bundesdatenschutz sieht das übrigens anders, denn wenn es nach den Datenschutzgesetzauslegungen gehen würde, dürfte man die IPs nicht speichern, weil das persönliche Daten sind und die unterliegen ja, zu Recht, einem besonders starken Schutz. Dahingehend haben Datenschützer auch Webseitenbetreiber mit Strafe gedroht, sollte jemand mal IPs auf Vorrat speichern. Dumm nur, daß schon der Webserver im Errorlog die IPs speichert und man das nicht abschalten kann. Von den Accesslogs mal ganz abgesehen.

Quelle: Webseitenbetreiber dürfen IP langfristig speichern

Erst der Bundestag, dann die CDU, ob das am Prestige der CDU kratzt, nicht die erste Wahl gewesen zu sein? 😀

Quelle: russische Hacker sollen CDU angegriffen haben

Ein Kommentar:

Als Webhoster und Sachverständiger gegenüber den Ermittlungsbehörden, kann ich aus leidlicher Erfahrung sagen, daß das keine gute Entscheidung war, auch wenn Sie vom EU-Generalstaatsanwalt als Empfehlung stammt. Wir haben mit der neuen Regelung einen Freibrief für Kriminelle die jetzt per War Driving im WLAN um die Ecke alles von Erpressung, DOS Angriffen, Hacking, Identitätsdiebstähle usw. machen können, ohne das es eine Handhabe gibt. Da die Betreiber nicht mal grundlegende Informationen aufzeichnen werden, wie z.b. die MAC des Teilnehmers, gibt es keine relistische Chance mehr die Kriminellen zu finden. Was Freifunker als Sieg feiern, werden wir alle sehr teuer bezahlen. Das ist so sicher wie das Amen in der Kirche.

Quelle: Golem: BGH Entscheidung zur Haftung von Gästen
Quelle: Heise: Die-Hotspot-Wueste-lebt-Freude-ueber-Ende-der-WLAN-Stoererhaftung

Da hat das FBI wohl TOR-Benutzer durch eine Schwachstelle im TOR eigenen Firefoxbrowser enttarnt und Mozilla hätte jetzt gern den Exploit um die Schwachstelle zu fixen, sofern das in Firefox war.

Update: Mozilla ist mit seinem Gesuch gescheitert, an die genutzte Sicherheitslücke zu kommen 🙁

Quelle: FBI muss Mozilla keine Informationen ueber Sicherheitsluecke uebergeben
Quelle: Mozilla asks Court to disclose Firefox Exploit used by FBI to hack Tor users

Es scheint ja bei der Beantwortung der Frage „wie man WordPress installiert“ echte Defizite zu geben, deswegen einfach mal hier das Video schauen. Es zeigt die Installation auf einem Linux Webserver mit Apache und MariaDB Datenbankserver. Die Konfiguration von WordPress kommt dann ca. 1 Minute später im Video.

Quelle: Wie am WordPress installiert

Hungry Shark World

Screenshot by Marius

Ein Free-2-Play Titel macht grade viral bei Androidbesitzern mit  5 Millionen Downloads in der ersten Woche die Runde : „Hungry Shark World“ .

In App Store wurden bereits die ersten Nachahmungstäter gesichtet 😉 Wir stellen klar, das Spiel ist nur echt, wenn es von UBI SOFT kommt !

Wir haben es angespielt und es ist …. naja.. die Steuerung ist etwas zäh, trotz der 341 MB Installationsgröße lädt das Spiel beim Starten noch Sachen nach. Aber das Spiel scheint ganz nett zu sein. Spielt es aber lieber auf einem Tablet, beim Handyeinsatz verkrampft man so beim Spielen

Quelle: hungry-shark-world-goes-viral

Es scheint lustige IOT Türklingeln zu geben, die allerdings nicht nur das eigene Haus mit der Klingelfunktion versehen, sondern gleich die ganze Nachbarschaften „vernetzen“ 😀 Falls Sie auch eine „Ring Doorbell“ haben, sollten Sie mal prüfen, ob Ihre Tür nicht schon offen ist.

Quelle: some-ring-doorbell-pro-users-could-temporarily-see-other-peoples-houses

Microsoft ändert endlich seine Politik, das WLAN Passwort unter Windows 10 an die „Freunde“ des Besitzers zu „teilen“ 🙂

Quelle: windows10-wifi-sense

Und Sie fahren immer noch durch die Gegend, die gefakten GSM Basisstation in China, über die Spams und Trojaner verteilt werden. Laut Reportern, sollen in der Industrie vor rund 4 Jahren bereits 1,6 Millionen Menschen als Webdesigner, Hacker und Fahrer gearbeitet haben.

Quelle : China-Spam-ueber-gefaelschte-Mobilfunk-Basisstationen

… und dann war da noch die Sache mit dem nutzlosen H264Codec von Cisco für Fedora, der halt nur Baseline Profile codieren kann.

Quelle: OpenH264 in Fedora Workstation