Torrentkino v0.14 - Verbesserte info_hash Datenbank

Es gibt Bittorrent Clients, die ihre Announces allen schicken statt nur denen, deren Node IDs am besten zum info_hash passen. Diese Clients verstopfen gewissermaßen die info_hash DBs auf dieser Welt. Andere Clients reagieren darauf, indem sie keine gültigen Announce Tokens mehr generieren, und somit weitere Announces ablehnen. Torrentkino v0.14 verwaltet jetzt maximal 50 info_hash Einträge in einer sortierten Liste und nimmt zunächst alles an. Einträge, die gut zur eigenenen Node ID passen, bleiben. Die Störer rotieren dagegen nach und nach aus dieser Liste raus.

Grundsätzlich stehen hier zwei Interessen gegenüber:

  1. Wer zuerst kommt, soll für immer bleiben.
  2. Wer doof ist, soll nicht mehr mitspielen.

Am Ende ist es ein System der Gleichberechtigung. Bewohnt von Goldgräbern, Schurken und übereifrigen Helfern des Gesetzes. Hier gefällts mir.

Pro info_hash Target werden 10 Nodes mit IP Adressen vorgehalten. Werden es mehr, rotieren die Einträge von vorne nach hinten raus. Das kommt vor allem Bittorrent selbst zu gute, da hier stets frische Adressen gehandelt werden. Jede Anfrage wird mit 8 Nodes beantwortet.

Die absoluten Zahlen können sich noch ändern. Aber das ist erstmal das Konzept.

Torrentkino v0.14 wurde auf folgenden Systemen getestet:




Filesharing Beispiel mit Torrentkino

Datei unter ~/Public/ ablegen.

$ cp ~/Botschaft.gpg ~/Public

Instant Webserver auf Port 38999 starten.

$ tumbleweed -p 38999 -w ~/Public

Torrentkino starten und dabei den Hostnamen uboot.p2p und den Port 38999 announcen.

$ tk4 -a uboot -b 38999

Auf einem zweiten Computer nun ebenfalls Torrentkino starten.

$ tk4

Schauen, ob man das Uboot via NSS findet.

$ getent hosts uboot.p2p
192.168.170.133    uboot.p2p

Alternativ verwendet man den tk Befehl.

$ tk http://uboot.p2p/Botschaft.gpg
http://192.168.170.133:38999/Botschaft.gpg

Also in diesem speziellen Fall:

$ wget $(tk http://uboot.p2p/Botschaft.gpg)



Torrentkino mit IPv4 Support

Das mit dem IPv4 bleibt uns wohl doch noch länger erhalten. Aber vielleicht ist das ja auch gut so…

Auf zwei Computern im Heimnetz folgenden Befehl eintippen:

tk4

Kurz auf die Announces warten und:

$ getent hosts tumbleweed.p2p
192.168.2.117   tumbleweed.p2p

Oder das CLI Kommando, um neben der IP den Port zu erfahren:

$ tk tumbleweed.p2p
192.168.2.117:8080

Bei entsprechend konfigurierten DSL Routern (Port Forward) funktioniert das auch über das Internet. Einfach Bittorrent als Resolver verwenden:

tk4 -x router.utorrent.com



PGP Verschlüsselung

Ich hatte es eigentlich schon aufgegeben, PGP zu verwenden. Speziell das digitale Signieren von Mails ist angesichts der aktuellen Überwachungslage ja eher kontraproduktiv. Denn dann liefert man neben Meta Daten wie z.B. Netflows und Email Header gleich das nächste verwertbare Datum frei Haus. Wie dem auch sei. Meinen aktuellen Key findet man hier:

gpg --keyserver keyserver.ubuntu.com --search-keys 0xA86845E3

Diese nette vim Erweiterung verschlüsselt alle Dateien mit gpg Endung. Dank Keyring Manager geht das auch transparent und wenig lästig.

augroup bencrypted
 au!
 autocmd BufReadPre,FileReadPre     *.gpg set viminfo=
 autocmd BufReadPre,FileReadPre     *.gpg set noswapfile
 autocmd BufReadPre,FileReadPre     *.gpg set bin
 autocmd BufReadPre,FileReadPre     *.gpg let ch_save = &ch|set ch=2
 autocmd BufReadPost,FileReadPost   *.gpg '[,']!sh -c "gpg --decrypt 2> /dev/null"
 autocmd BufReadPost,FileReadPost   *.gpg set nobin
 autocmd BufReadPost,FileReadPost   *.gpg let &ch = ch_save|unlet ch_save
 autocmd BufReadPost,FileReadPost   *.gpg execute ":doautocmd BufReadPost " . expand("%:r")
 autocmd BufWritePre,FileWritePre   *.gpg '[,']!sh -c "gpg --default-recipient-self --armor -ev 2>/dev/null"
 autocmd BufWritePost,FileWritePost *.gpg u
augroup END



Tumbleweed: Killing the idlers

The Mission

How to do it

  1. Block all web worker threads while doing the massacre. At the same time the web workers must not block each other under all circumstances. Check
  2. Do not use gettimeofday() to measure the last activity since this is fairly difficult to do right in a highly loaded event based system. Instead, use counters and do the math with the event wakeup timer. Check