スキップしてメイン コンテンツに移動

投稿

7月, 2013の投稿を表示しています

P2P探訪 Raider トラッカーにアクセスしてみる

TorrentクローンをJava で作成しています。
そろそろ、Applet上で動作するデモができそうです。 試してみて解ったことが結構ありました。
そこで、学習したしことを、epub形式でまとめています。http://p.booklog.jp/users/kyorohiro


やる気スイッチが入らないので、書きかけの物をさらします。



-----------------

トラッカーにアクセスしてみる TorrentからTrackerサーバーのアドレスを取得するできました。これでTrackerへ接続する準備ができました。さっそくTrackerにアクセスしてみましょう。
TrackerはHttpサーバーです。 「ピアID」と「Info辞書のHash」と「ポート番号」を渡すと、ピアの一覧を返してくれます。 Httpサーバーなので、「ピアID」と「Info辞書のHash」を持つURLさえ生成すれば、ブラウザからもアクセスできます。 まずは、 URLを生成して、Trackerからピアのリストを取得してみましょう。
ピアIDを準備する Trackerへアクセスする際に、peer_idが要求されます。 peer_idは20バイトのユニーク値を持つバイト配列です。 このidは、クライアントを識別するのも活用できます。 詳しくは、http://www.bittorrent.org/beps/bep_0020.html を参照してみてください。 
例えば、以下のような感じでかける。 public static String createPeerId() { byte[] peerId = new byte[20];  Random random = new Random(System.currentTimeMillis()); random.nextBytes(peerId); System.arraycopy("-KY-".getBytes(), 0, peerId, 0, 8); PercentEncoder encoder = new PercentEncoder(); return encoder.encode(peerId); } ※ せっかく20バイトもデータがあのに、System.currentTimeMillis()でほぼ一意決まってしまう。スジが良くないです。 

P2P探訪 Raider Torrentファイルを読み込んでみる(metafile)

TorrentクローンをJava で作成しています。
そろそろ、Applet上で動作するデモができそうです。 試してみて解ったことが結構ありました。
そこで、学習したしことを、epub形式でまとめています。http://p.booklog.jp/users/kyorohiro


やる気スイッチが入らないので、書きかけの物をさらします。





-------

Torrentファイルを読み込んでみるすでにBencodingのパーサー作成済みなので、Torrentファイルの中身を解析することができるようになったと思います。 本ページでは、Torrentファイルに記載されている情報について説明します。
.Torrentはメタファイル  Torrentファイルのデータの中身は、metainfo file structure と呼ばれています。 「メタ」というのは、データを要約したものです。 例えば、文書であれば、 「著作名」、「題名」、「ISBN番号」といったものがあげられます。 カメラで写真を撮ると、デシタルデータの場合JPEGという方式で画像されたりします。この時、 「撮影日時」、「撮影機器」、「解像度」、「GPS情報」などが記録されます。

では、Torrentでは、どのような情報が登録されているでしょうか?
MetaInfoの構造ファイルがひとつの時 {    announce:<benstring>,  info:{      length:<beninteger>,      name:<benstring>,      piece length:<beninteger>,      pieces:<benstring>    } }
ファイルが複数の場合 {    announce:<benstring>,     info:{     files: [             { length:<beninteger>, path:[<benstring>,<benstring>]},             { length:<beninteger>, path:[<benstring>,<benstring>]},            …

P2P探訪 Raider Torrentファイルを読み込んでみる(bencoding)

TorrentクローンをJava で作成しています。
そろそろ、Applet上で動作するデモができそうです。 試してみて解ったことが結構ありました。
そこで、学習したしことを、epub形式でまとめています。http://p.booklog.jp/users/kyorohiro


やる気スイッチが入らないので、書きかけの物をさらします。

-------------------------------------------------------------------

ダウンロードの始まりデータをダウンロードは、「へちまたん.torrent」といった、torrentを拡張子に持つファイルを取得することから始まります。
通常、インターネットを通じてWWWから取得することになると思います。 OSのイメージであれば配布しているサイトで手に入るかもしれません。 オープンソースアニメや著作権きれのデータなど、それ専用のデータを野止めているサイトを探すと良いでしょう。「オープンソース アニメ Torrent」、「著作権切れ Torrent」といったキーワードで検索してみてください。Googleで検索すれば簡単に見つかると思います。
このページでは、実際にTorrentファイルを読み込み。どのような情報が記載されているか調べてみましょう。
Bencode/Bencoding で書かれている Torrentファイルはbencoding という形式で書かれています。  Torrentファイルを読み込むためには、bencodingを解釈できるようにならなくてなりません。 まずは、Bencodingを読み込んでみましょう。
String/Integer/List/Dictionaryを扱える  bencodingは、 String/辞書/リスト の4つのデータ型を扱うことができます。  そして、以下のようなフォーマットで書かれています。   beninteger   : "i" [0-9]* "e"   benstring    : [0-9]* ":" <bytes array/string>       # bytes array/string length is prev [0-9]*.   bendictio…

P2P探訪 Raider お互いの位置を知る

TorrentクローンをJava で作成しています。
そろそろ、Applet上で動作するデモができそうです。 試してみて解ったことが結構ありました。
そこで、学習したしことを、epub形式でまとめています。http://p.booklog.jp/users/kyorohiro


やる気スイッチが入らないので、書きかけの物をさらします。

-------------------------------------------------------------------

お互いの位置を知る P2Pにてデータをダウンロードする場合、自分が欲しいデータを持っているコンピュータを探すことからはじまります。 これは、従来のシステムから考えると特殊なことです。たとえば、皆さんが日常で使用しているインターネットの世界では、欲しいデータの在り処はアドレスとい形で提供されています。Googleで検索したいならば、www.google.com、Youtubeで動画をみたいならば、www.youtube.com、ニコニコ動画で生放送をみたいならば、live.nicovideo.jp といったアドレスをブラウザに入力すると、欲しい情報を手に入れることができるでしょう。
しかし、P2Pではデータを持っているのは、インターネット上に名前を振られた、GoogleやYoutubeのようなホスト名を持つコンピュータではありません。今、皆さんがブラウザを起動しているようなコンピュータになります。 なので、GoogleやYoutubeにアクセスするように、皆さんのコンピュータにアクセスするためのアドレスを知る必要があります。
また、これはP2Pでのファイル共有としては重要な機能です。お互いのアドレスを知ることができれば、ほぼほぼデータ交換をに必要な作業は完了したと言っても良いでしょう。欲しいデータがあるコンピュータを知ることができたならば、後はデータ配信するようにお願いすれば良いのです。

Torrentでのお互いの位置を知る方法は2つあるでは、Torrentではお互いの位置をどのようにして知るのでしょうか?Torrentでは2つの方法が提供されています。
Httpサーバーから教えてもらう方法ひとつは、「GoogleやYoutubeのようなホスト名を持つコンピュータ」から教えてもらう方法。 このコンピュータの…

頭の体操  12個のボールから特別なボール1個を探せ!!

頭の体操  12個のボールから特別なボール1個を探せ!!


12個のボールがあります。
この12個のボールの中に重さの違う特殊ボールがひとつだけ
含まれています。

天秤を使用して3回で探し当てなさい。

[補足]
* 特殊なボールが「重いのか」「軽いのか」は知らされていません。
* 上手く計測すれば、特殊なボールが「重いのか」「軽いのか」も判るそうです。


[kyorohiroの回答]

  [手順1]. ボールにa~lの名前を振ります。
  [手順2]. 以下の用に●○×で塗りつぶします。
   a b c d e f g h i j k l
1. ●●●●○○○○××××
2. ●○○×○××●×●●○
3. ●●○××●○×○○●×
   ※ 1は一回目、2は2回目に測るボールを表しています。
     「●を天秤の右側」に「○を天秤の左側」に載せてください。
  [手順3]. 手順2で指定された通りに計測してください。


[ヒント]
 * あるボールAが1回目が重くグループ & 2回目が軽いグループならば、
   Aは特殊なボールではない
 * 重いボール2つ、軽いボール1が残されたならば、重いボールどうし
   を比較すれば良い。


[検算]
   a b c d e f g h i j k l
1. ●●●●○○○○××××
2. ●○○×○××●×●●○
3. ●●○××●○×○○●×
◎aが重いボールの時
 1回目
   「a b c d」が重くて特殊なボールの可能性
   「e f g h」が軽くて特殊なボールの可能性
 2回目
   「a」が重いボールの可能性
   「e」が軽いボールの可能性
 3回目
   「a」と「i」を比較すると答えがわかる!!

   a b c d e f g h i j k l
1. ●●●●○○○○××××
2. ●○○×○××●×●●○
3. ●●○××●○×○○●×
◎eが重いボールの時
 1回目
   「a b c d」が軽くて特殊なボールの可能性
   「e f g h」が重くて特殊なボールの可能性
 2回目
   「a」が軽いボールの可能性
   「e」が重いボールの可能性
 3回目
   「a」と「i」を比較すると答えがわかる!!




   a b c d e f g h i j k l
1. ●●●●○○○○××××
2. ●○○×○××●×●●○
3. ●●○××●○×○○●×
◎bが重いボールの時
 1…

メモ

Serversman Ubuntu 10.10 で良くすること ※ 書き足すこと ●パスワードを変更 - passwd root ●ユーザーを追加 - useradd xxx - passwd xxx ●アーカイブを古いのにする - vi /etc/apt/sources.listc > >deb http://archive.ubuntu.com/ubuntu maverick main restricted universe >deb http://archive.ubuntu.com/ubuntu maverick-updates main restricted universe >deb http://archive.ubuntu.com/ubuntu maverick-security main restricted universe deb http://old-releases.ubuntu.com/ubuntu maverick main restricted universe deb http://old-releases.ubuntu.com/ubuntu maverick-updates main restricted universe deb http://old-releases.ubuntu.com/ubuntu maverick-security main restricted universe - apt-get update - apt-get upgrade ● xbuntuをインストール - apt-get install xubuntu-desktop ● vncインストール/起動 - apt-get install vnc4server - vncpasswd - 一度クライアントから接続 - vi .vnc/xstartup > >#!/bin/sh > ># Uncomment the following two lines for normal desktop: ># unset SESSION_MANAGER ># exec /etc/X11/xinit/xinitrc > >[ -x /etc/vnc/xstartup ] …