<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>sixserv blog[nks] &#187; java</title>
	<atom:link href="http://nks.sixserv.org/blog/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://nks.sixserv.org/blog</link>
	<description>welcome to teh #sixserv!</description>
	<lastBuildDate>Thu, 02 Feb 2012 17:23:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>implementing bittorrent</title>
		<link>http://nks.sixserv.org/blog/2009/01/22/implementing-bittorrent/</link>
		<comments>http://nks.sixserv.org/blog/2009/01/22/implementing-bittorrent/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 19:28:00 +0000</pubDate>
		<dc:creator>nks</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Torrent]]></category>
		<category><![CDATA[bittorrent]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[p2p]]></category>

		<guid isPermaLink="false">http://sixserv.org/?p=11</guid>
		<description><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_bittorrent.png" width="50" height="51" alt="" title="Torrent" /><br/>Mal wieder was technisches. Ich geh mal ein bisschen ins Detail des BitTorrent Protokolls. Ich werde das ganze in mehrere Teile aufteilen. In den ersten Teilen wird es sehr Theoretisch. In Teil 1 möchte ich auf das BEncoding eingehen und auf Metafile die euch sicherlich als &#8220;.torrent&#8221;-Datei bekannt ist. Im nächstem Teil gehe ich dann [...]]]></description>
			<content:encoded><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_bittorrent.png" width="50" height="51" alt="" title="Torrent" /><br/><p>Mal wieder was technisches. Ich geh mal ein bisschen ins Detail des BitTorrent Protokolls.<br />
Ich werde das ganze in mehrere Teile aufteilen.</p>
<p>In den ersten Teilen wird es sehr Theoretisch.<br />
In Teil 1 möchte ich auf das BEncoding eingehen und auf Metafile die euch sicherlich als &#8220;.torrent&#8221;-Datei bekannt ist.</p>
<p>Im nächstem Teil gehe ich dann auf grundsätzliches zur Aufgabe eines Trackers ein. Und danach wird es richtig interessant <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Aber erstmal zum BEncoding und der Metafile, ohne die BitTorrent nicht funktioniert -<br />
das BEncoding und die Metafile sind Essentiell!</p>
<p>Bevor ich auf das BEncoding eingehe spreche ich erstmal die MetaFile an, da dies die erste<br />
Stelle (und auch wichtigste) ist an der das BEncoding im Protokoll vorgesehen ist.</p>
<p><strong>Metafile</strong></p>
<p>Die Metafile oder wie es die meisten von euch kennen die &#8220;.torrent&#8221;-Datei.<br />
In ihr sind alle Informationen (und auch ein paar unwichtige <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) die ein Client/Peer benötigt<br />
gespeichert.<br />
Also gehen wir mal näher auf den Inhalt der &#8220;.torrent&#8221;-Datei ein (optionale Teile sind mit *<br />
gekennzeichnet):</p>
<ul>
<li>announce: Die Announce-URL des Trackers</li>
<li>creation date*: Erstellungsdatum</li>
<li>comment*: Platz für einen Kommentar zum Torrent oder andere Informationen</li>
<li>created by*: der Name des Erstellers</li>
<li> info: das info-Dictionary &#8211; der &#8220;kern&#8221; einer Metafile!(darauf gehe ich weiter unten ein)</li>
</ul>
<p>Jetzt werden sich sicher einige denken &#8220;whuuut?! wtf? dictionary?!&#8221;<br />
Ein Dictionary ist die Abbildunge einer Map, oder eines Arrays mit Schlüssel als Index<br />
(ArrayList in Java) auf einen String (bzw. eine ByteFolge xD).</p>
<p><strong>Das Info-Dictionary</strong></p>
<p>Diese Keys enthält ein &#8220;info&#8221; Dictionary:</p>
<ul>
<li> piece length: Die Anzahl der Bytes pro Piece (BitTorrent-Peers tauschen die Daten in Pieces)</li>
<li> pieces: Enthält die Hashes der Pieces</li>
<li> info**: Das info-Dictionary für die Spezifizierung der im Torrent enthaltenen Datei/en. (wenn dieses info-Dictionary gemeint ist werde ich es mit ** markieren)</li>
</ul>
<p>Es gibt 2 verschiedene Modi des Info-Dictionary**  den Single-File und den Multifile-Mode,<br />
dementsprechend gibt es auch<br />
2 verschiedene Arten die Datei bzw. die Dateien näher zu Spezifizieren:</p>
<p><strong>&#8220;info&#8221; im Single-File Mode</strong></p>
<ul>
<li> name: Der Dateiname</li>
<li> length: Länge der Datei in Bytes</li>
</ul>
<p><strong>&#8220;info&#8221; im Multi-File Mode</strong></p>
<ul>
<li> name: Der Ordnername in dem sich die Dateien befinden</li>
<li> files: Ein Dictionary das für jede Datei ein weiteres Dictionary enthält</li>
</ul>
<p>Die Keys des &#8220;files&#8221;-Dictionaries:</p>
<ul>
<li>length: Die grösse der Datei in Bytes</li>
<li>path: Der Pfad der Datei</li>
</ul>
<p>Damit waren die wichtigsten Elemente des .torrent-Files erklärt und wir können uns mit de<br />
Kodierung der entsprechenden Elemente/Einträge befassen &#8211; dem BEncoding.</p>
<p><strong>BEncoding</strong></p>
<p>Das BEncoding ist so genial wie einfach.</p>
<p>BitTorrent nutzt BEncoding für:</p>
<ul>
<li> Strings</li>
<li> Integer</li>
<li> Dictionaries</li>
<li> Listen</li>
</ul>
<p>Diese Typen werden alle nach dem selben Schema kodiert:</p>
<p><strong>Strings:</strong></p>
<pre lang="bash">:
Beispiel:
5:w00t!  (für den String "w00t!")</pre>
<p><strong>Integer</strong>:</p>
<pre lang="bash">ie

Beispiel:
i7e (Integer: "7")
i-1e (Integer: "-1")</pre>
<p><strong>Dictionaries:<br />
</strong></p>
<pre lang="bash">de

Beispiel:
d3:nks6:gentoo4:apoc4:arche***

*** Steht für folgendes dictionary:
KEY          VALUE
[nks] = gentoo
[apoc] = arch</pre>
<p><strong>Listen</strong>:</p>
<pre lang="bash">le

Beispiel:
l3:nks7:torrente (entspricht den Strings "nks" und "torrent")</pre>
<p>Ist recht simpel oder?<br />
Trotzdem muss man bei der Implementierung aufpassen, wenn hier ein Fehler passiert kann es sein<br />
das man manchmal hinterher lange nach dem Fehler suchen muss <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Das BEncoding verfolgt einen durch das ganze Protokoll hinweg.</p>
]]></content:encoded>
			<wfw:commentRss>http://nks.sixserv.org/blog/2009/01/22/implementing-bittorrent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bitlet.org privacy</title>
		<link>http://nks.sixserv.org/blog/2008/08/29/bitletorg-privacy/</link>
		<comments>http://nks.sixserv.org/blog/2008/08/29/bitletorg-privacy/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 00:19:51 +0000</pubDate>
		<dc:creator>nks</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Torrent]]></category>
		<category><![CDATA[bittorrent]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://sixserv.org/?p=48</guid>
		<description><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_java.png" width="50" height="51" alt="" title="Java" /><br/>Ich nutze gerne den BitTorrent-Client “BitLet”, wenn ich an maschinen ohne installierten BiTorrent-Client arbeite. Wirklich genial und einfach. Zeigt sehr schön wie man mit Java auch nicht resourcenfressende Ressourcen-schonende torrent-Clients schreiben kann, im Gegensatz zu Azureus/Vuze. Ich nutze BitLet recht häufig jedoch bereitet mir schon seit längerem sorgen, dass auf der Startseite eine history der [...]]]></description>
			<content:encoded><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_java.png" width="50" height="51" alt="" title="Java" /><br/><p>Ich nutze gerne den BitTorrent-Client “<a href="http://bitlet.org">BitLet</a>”, wenn ich an maschinen ohne installierten BiTorrent-Client arbeite. Wirklich genial und einfach. Zeigt sehr schön wie man mit Java auch <span style="text-decoration: line-through;">nicht resourcenfressende</span> Ressourcen-schonende torrent-Clients schreiben kann, im Gegensatz zu <a href="http://www.vuze.com">Azureus/Vuze</a>. Ich nutze BitLet recht häufig jedoch bereitet mir schon seit längerem sorgen, dass auf der Startseite eine history der letzten torrents liegt. Das ist natürlich sehr praktisch fürs resumen bzw. um den aktuellen stand des Downloads zu sehen und ihn bei bedarf zu loeschen oder zu resumen, allerdings liegen diese taten auf dem Server von BitLet.org.<br />
BitLet hat somit auf ihren Servern eine Datenbank laufen die die IPs logt mit denen die User ihre Downloads tätigen und die entsprechenden namen der .torrent-Files (mit ausgelesenen meta-Daten und download-fortschritt). Das wird vermutlich über ein Cookie realisiert.</p>
<p>Also ab und zu mal Cookies löschen&#8230;</p>
<p>Bleibt abzuwarten was sich daraus ergibt.</p>
<p>links:</p>
<blockquote>
<ul>
<li><a href="http://bitlet.org">http://bitlet.org</a></li>
<li><a href="http://vuze.com">http://vuze.com</a></li>
</ul>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://nks.sixserv.org/blog/2008/08/29/bitletorg-privacy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

