BT(センタ付きトラッカー)通信プロトコルの分析
6586 ワード
原文住所:http://blog.chinaunix.net/uid-26548237-id-3056731.html BT通信プロトコルの例分析 BTプロトコルの動作プロセスBTプロトコルは、主に、.torrentファイルのフォーマット、tracker HTTP/HTTPSプロトコル、peer wireプロトコル(TCPを使用)の3つの部分を含む.ここで、tracker HTTP/HTTPSプロトコルは、BTクライアントとtrackerサーバとの間の通信プロトコルであり、peer wireはBTクライアント間の通信プロトコルである.
1.1 torrentファイルの構造
主な成分は以下の通りです.
また、いくつかの選択肢がありますが、ここでは説明しません.
1.2 tracker HTTP/HTTPSプロトコル
図1のクライアントがDNS要求パケットを送信する
DNSサーバの応答から、TrackerサーバのIPアドレスを取得できます.
10.rarbg.com:別名サーバ
いくつかの成分は以下の通りです.
● info_hash:.torrentファイルのinfo部分のsha 1検証コード、合計20バイト.Trackerサーバは、パブリケーションリストで対応するレコードを見つけます.
● peer_id:BTクライアントの一意性識別は,クライアント起動時に発生し,合計20 bitである.peer-idを生成する具体的なアルゴリズムはないようで,一意性を保証できることだけが要求される.
●ip:オプション、IPアドレス、なければサーバーが自分で見つけます.
●port:リスニングポート、ここでは10775です.
●uploaded/downloaded:アップロード/ダウンロードされたバイト数(クライアントからトラッカーサーバに「started」を送信して計算を開始).
●left:ダウンロードするバイト数.
●numwant:オプション.クライアントがTrackerサーバから取得したいピアの数.
●key:オプションです.IPアドレスを変更しても、このフィールドを使用してBTクライアントを識別することができる拡張された一意性識別.
●compact:圧縮フラグ.値が1が圧縮フォーマットを受け入れるピアのリストを表す場合、すなわち6 byteで1つのピアを表す(前の4 byteはIPアドレスを表し、後の2 byteはポート番号を表す).値が0の場合は受け入れられません.
(2)所有するリソースを交換する場合.Bitfieldパケットにより実現した.この例では、ピアBはまだリソースをダウンロードしていないため、リソースの所有状況を公表するのはピアAのみである.ピアAは、グループ283を通じて自身のリソース所有状況を公表した.
(3)interested,nointerested,choke,unchokeの4種類を含むリソースへの意思疎通.
(4)リソースを相互に要求し,request piece,pieceパケットにより実現する.
(5)接続を切断する.peer wireプロトコルはTCP方式を使用しているため、ピアAとピアBが接続を切断する場合は、彼らの間のTCP接続を切断するだけでよい.
図7 Handshakeパケットの上位コンテンツ
BT DHT , BT 。 BT 。
BT , , , , , , , BT 。 , 。
1.1 torrentファイルの構造
.torrent , B 。B , 4 :bytestrings、integers、lists dictionaries。integers、lists dictionaries i、l、d , e 。bytestrings / , < >:< >, 4:spam “spam”。 4 .torrent 。
, :
d8:announce39:http://tracker.publicbt.com:80/announce13:announce-listll39:http://tracker.publicbt.com:80/announceel32:http://9.rarbg.com:2710/announceel44:udp://tracker.openbittorrent.com:80/announceel42:http://tracker.torrentbay.to:6969/announceel39:http://tracker.torrent.to:2710/announceel27:http://pow7.com:80/announceel28:http://10.rarbg.com/announceel38:http://exodus.desync.com:6969/announceel42:http://tracker.novalayer.org:6969/announceel35:udp://tracker.1337x.org:80/announceee 主な成分は以下の通りです.
●announce:tracker URL, http://tracker.cnxp.com:8080/announce。
●announce-list: 。 tracker URL , http://tracker.cnxp.com:8080/announce,http://btfans.3322.org:6969/announce 。
●creationdate: 。.torrent , UNIX , 1152105243。
●comment: 。.torrent 。
●createdby: 。 .torrent , BitComet/0.67。
●encoding: 。 , GBK。
●info:公開されたファイルの情報.2つのフォーマット、単一ファイルフォーマット、およびマルチファイルフォーマットがあります.単一ファイルフォーマットにはlength、md 5 sum(オプション)、name、piecelength、piecesが含まれます.マルチファイルフォーマットにはfiles、name、piecelength、piecesが含まれます.filesにはlength、path、md 5 sum(オプション)が含まれ、各ファイルにはlength、path、md 5 sum(オプション)があります.また、いくつかの選択肢がありますが、ここでは説明しません.
1.2 tracker HTTP/HTTPSプロトコル
BT .torrent trackerr , 。 , , ; , tracker 。
第一に、クライアントはTrackerサーバーのIPアドレスを取得する図1のクライアントがDNS要求パケットを送信する
DNSサーバの応答から、TrackerサーバのIPアドレスを取得できます.
10.rarbg.com:別名サーバ
:tracker.publicbt.com:95.211.88.54、95.211.88.49、95.211.88.51、
9.rarbg.com: 83.149.126.97
exodus.desync.com: 208.83.20.164
pow7.com: 10.rarbg.com
tracker.novalayer.org: 194.54.80.150
tracker.publicbt.com: 95.211.88.54、95.211.88.49、95.211.88.51
tracker.torrent.to: 127.0.0.1
tracker.torrentbay.to: 109.235.55.11
tracker.1337x.org: 95.215.62.224
tracker.openbittorrent.com: 95.215.62.26
Tracker IP 。
第二、TrackerHTTP/HTTPSプロトコル BT .torrent tracker , peers ( IP )。 , , ; , tracker 。
図2 BTクライアントがTrackerサーバにHTTP要求を送信する 447 HTTP 6 。
図3 HTTP部分内容いくつかの成分は以下の通りです.
● info_hash:.torrentファイルのinfo部分のsha 1検証コード、合計20バイト.Trackerサーバは、パブリケーションリストで対応するレコードを見つけます.
● peer_id:BTクライアントの一意性識別は,クライアント起動時に発生し,合計20 bitである.peer-idを生成する具体的なアルゴリズムはないようで,一意性を保証できることだけが要求される.
●ip:オプション、IPアドレス、なければサーバーが自分で見つけます.
●port:リスニングポート、ここでは10775です.
●uploaded/downloaded:アップロード/ダウンロードされたバイト数(クライアントからトラッカーサーバに「started」を送信して計算を開始).
●left:ダウンロードするバイト数.
●numwant:オプション.クライアントがTrackerサーバから取得したいピアの数.
●key:オプションです.IPアドレスを変更しても、このフィールドを使用してBTクライアントを識別することができる拡張された一意性識別.
●compact:圧縮フラグ.値が1が圧縮フォーマットを受け入れるピアのリストを表す場合、すなわち6 byteで1つのピアを表す(前の4 byteはIPアドレスを表し、後の2 byteはポート番号を表す).値が0の場合は受け入れられません.
, Tracker , , , 。
図4カプセル化されたTrackerサーバインタラクションプロセス Tracker tracker , info_hash , 。 (NatCheck) IP , 。 IP 。 。
図5 HTTP上部分データ “660:” ASCII ,“660:” 16 。 : peers 76; peers 10 ; peers 34;interval 1967, BT 1967 tracker ; 983;peer 660 , BT , 6 , 110 。
1.3 peer wireプロトコル BT , 208.131.161.209:53062 , 。 , TCP 。 A 208.131.161.209:53062, B 172.16.8.93:3012.
図6ピア間通信プロセス TCP , :
(1)握手,Handshakeパケットで実現する.(2)所有するリソースを交換する場合.Bitfieldパケットにより実現した.この例では、ピアBはまだリソースをダウンロードしていないため、リソースの所有状況を公表するのはピアAのみである.ピアAは、グループ283を通じて自身のリソース所有状況を公表した.
(3)interested,nointerested,choke,unchokeの4種類を含むリソースへの意思疎通.
(4)リソースを相互に要求し,request piece,pieceパケットにより実現する.
(5)接続を切断する.peer wireプロトコルはTCP方式を使用しているため、ピアAとピアBが接続を切断する場合は、彼らの間のTCP接続を切断するだけでよい.
図7 Handshakeパケットの上位コンテンツ
:Handshake:
pstrlen: , 。
pstr: , 。
reserved: 8 。 0. 。 Bram , 。
info_hash: info (key) 20 SHA1 。 nfo_hash tracker info_hash 。
peer_id: 20 。 peer_id tracker peer_id ( , Azureus, )。
BitTorrent 1.0 ,pstrlen = 19, pstr = “BitTorrent protocol”。
。 torrent, (torrent infohash )。 , info_hash , 。tracker NAT-checking peer_id 。
, info_hash, 。 , peer_id peer_id , 。 tracker peer , peer peer_id。 tracker peer_id peer_id。
図8 Bitfiledパケット上位データ bitfield:
itfield , 。 , piece( ), 。bitfield , x bitfield 。payload bitfield, bitfield piece( )。 piece 0。 0 piece, 1 piece。 0。
bitfield 。 bitfield bitfield , 。
図9 request pieceパケット上位部 request piece 。
, 。payload :
index: , piece 。
begin: , piece 。
length: , 。