磁力鏈接由一組參數組成,參數間的順序沒有講究,其格式與在HTTP鏈接末尾的查詢字符串相同。最常見的參數是"xt",是"exact topic"的縮寫,通常是一個特定文件的內容散列函數值形成的URN,例如:
注意,雖然這個鏈接指向一個特定文件,但是客戶端應用程序仍然必須進行搜索來確定哪裏,如果有,能夠獲取那個文件。
在標準的草稿中其他參數的定義如下:
- "dn" ("顯示名稱"):爲了方便,爲用戶顯示文件名稱
- "kt" ("關鍵字"):更籠統的搜索,指定搜索關鍵字而不是特定文件
- "mt" ("文件列表"):一個URI指向一個列表,例如一個項目列表
- 應用程序定義的實驗參數,必須以"x."開頭
標準還建議同類的多個參數可以在參數名稱後面加上".1", ".2"等來使用,例如
-
magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7
描述
磁力鏈接可以包括一個或多個參數,之間用'&'隔開。參數的順序在文件在標準中沒有記錄。有一些參數的值對於客戶端正確解析磁力鏈接很重要。
magnet:? xl = [字節大小]& dn = [文件名(已編碼URL)]& xt = urn: tree: tiger: [ TTH hash(Base32)]
參數
- dn(顯示名稱)- 文件名
- xl(絕對長度)- 文件字節數
- xt(eXact Topic)- 包含文件散列函數值的URN
- as(可接受來源) - 在線文件的網絡鏈接
- xs(絕對資源)- P2P鏈接
- kt(關鍵字)- 用於搜索的關鍵字
- mt(文件列表)- 鏈接到一個包含磁力鏈接的元文件 (MAGMA - MAGnet MAnifest)
- tr(Tracker地址)- BT下載的Tracker URL
xt參數
磁力鏈接的這部分最重要。用於尋找和驗證包含着磁力鏈接中的文件。
- TTH(Tiger Tree散列函數)
TigerTree散列函數被用在包括Direct Connect和Gnutella2在內的幾個網絡中。
xt=urn:tree:tiger:[ TTH Hash(Base32)]
- SHA-1(安全散列算法1)
xt=urn:sha1:[ SHA-1 Hash(Base32)]
這種散列函數包含一個SHA-1散列函數和一個TTH散列函數,用"."隔開。
xt=urn:bitprint:[ SHA-1 Hash(Base32)].[ TTH Hash(Base32)]
- eD2k Hash(eDonkey2000)散列函數
eDonkey2000使用的散列函數算法。
xt=urn:ed2k:[ ED2K Hash(Hex)]
- AICH(高級智能型損壞處理)
不是正式的磁力鏈接的一部分。eDonkey2000使用的散列函數算法,用於存儲和控制下載完成、正在下載的文件的完整性。
xt=urn:aich:[ aich Hash(Base32)]
- Kazaa散列函數
FastTrack使用的散列函數算法。
xt=urn:kzhash:[ Kazaa Hash(Hex)]
- BTIH(BitTorrent Info Hash)
BitTorrent使用的散列函數算法。
xt=urn:btih:[ BitTorrent Info Hash(Hex)]
- MD5(信息-摘要算法5)
Gnutella2支持的散列函數算法。
xt=urn:md5:[ MD5 Hash(Hex)]
- CRC-32(循環冗餘校驗)
不是正式的磁力鏈接的一部分。沒有任何已知的P2P網絡使用。
xt=urn:crc32:[ CRC-32(Base10)]
網絡鏈接至文件
有兩種可以插入到磁力鏈接的下載鏈接作爲直接或者備用資源。
普通鏈接(as)
"as"的意思是"acceptable source"。這種鏈接指向從網絡服務器的直接下載。只有在指定的超時後纔會鏈接,防止服務器過載。客戶端在考慮向服務器發送下載請求前會先花一定時間在P2P網絡中定位文件。
as=[文件的網絡鏈接(已編碼URL)]
P2P鏈接(xs)
鏈接可以是鏈接到磁力鏈接的文件的HTTP(SHTTP、FTP、SFTP等)下載源、文件的P2P源地址或是hub(使用DC++時)地址。對於這一鏈接,客戶端嘗試直接鏈接,並請求文件或其來源,有時會同時請求二者。這一字段常被P2P客戶端用來存儲源。引用中可能包含文件hash。
內容尋址網絡(CAN)URL
這類鏈接被Gnutella還有G2應用程序使用,基於RFC 2168。
xs=http://[ 客戶端地址]:[客戶端端口]/uri-res/N2R?[包含一個文件hash的URN ]
例:
xs=http://192.0.2.0.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF
- 鏈接到DirectConnect hub併爲文件查找源
這一鏈接立即將DirectConnect客戶端連接到剛纔討論的hub。
xs=dchub://[hub 地址]:[hub端口]
- 爲Gnutella2上的文件引用基於網絡的源緩存
這種情況下,鏈接包含的點不是客戶端IP或直接來源,而是來源緩存。這樣的緩存並不包含文件本身,而是存儲了其他客戶端的IP,這些客戶端連接到緩存來下載相同的文件。一旦客戶端連接到緩存並獲得其他替代來源的IP,其自身IP就會存入到緩存中,然後繼續連接到下一個緩存,繼續請求替代來源。這種系統類似於BitTorrent tracker的操作。
xs=http://cache.freebase.be/[ SHA-1 hash ]
- 引用ED2K源
xs=ed2k://[ 客戶端地址]:[客戶端端口]/[ed2k hash]/[文件大小]/
文件列表(mt)
這是一個導向一系列連鏈接列表(也許是個網頁)的鏈接……
mt=http://weblog.foo/all-my-favorites.rss
或者是一個URN
mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ
關鍵字(kt)
該部分代表了一串用於P2P網絡搜索用的關鍵字
kt=martin+luther+king+mp3
Tracker地址(tr)
Tracker URL.用於在不需要DHT支持下下載BitTorrent資源。
tr=http://example.com/announce
補充格式(x.)
對於實驗性且自補的非正式選項,可以使用前綴x後加已選擇的第二個字母
x.[新參數名]=[新參數數據(已編碼URL)]
參數組
通過在每個參數後編號並用"."來分隔允許一個Magnet鏈接中包含多個文件及它們URN,文件名和散列函數值。
magnet:?xt.1=[第一個文件的URN]&xt.2=[第二個文件的URN]
示例
鏈接到一個0字節長度的文件。
magnet:?xt=urn:ed2k:31D6CFE0D16AE931B73C59D7E0C089C0 &xl=0&dn=zero_len.fil &xt=urn:bitprint:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ .LWPNACQDBZRYXW3VHJVCJ64QBZNGHOHHHZWCLNQ &xt=urn:md5:D41D8CD98F00B204E9800998ECF8427E
mediawiki-1.15.1.tar.gz
magnet:?xt=urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1 &xl=10826029&dn=mediawiki-1.15.1.tar.gz &xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY &xt=urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q &tr=http%3A%2F%2Ftracker.example.org%2Fannounce.php%3Fuk%3D1111111111%26 &as=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz &xs=http%3A%2F%2Fcache.example.org%2FXRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5 &xs=dchub://example.org
url magnet
http://sure-raza.com/magnet:?xl=10826029& dn=mediawiki-1.15.1.tar.gz& xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY 參考資料:維基百科https://zh.wikipedia.org/wiki/%E7%A3%81%E5%8A%9B%E9%93%BE%E6%8E%A5