基于python獲取(種子)文件的info hash

這個(gè)問(wèn)題一開(kāi)始是在要用百度網(wǎng)盤(pán)分享文件的時(shí)候遇到的。

正常情況下,分享正常的文件自然不會(huì)有什么問(wèn)題,但是有的時(shí)候總會(huì)遇到一些秒秒鐘被和諧的文件,這個(gè)時(shí)候我想用度盤(pán)離線下載的方式分享會(huì)更加可靠~~~

于是就有了后續(xù)——————

要用度盤(pán)離線,就得把要分享的文件的種子文件或者磁力鏈拿到。那么我們把要分享的文件制作一遍種子,把種子文件發(fā)給別人,這樣也能達(dá)到分享的目的!更為簡(jiǎn)單的方法那就是把磁力鏈給別人。以下便是利用python獲取(種子)文件的info hash的方法(不同于網(wǎng)上說(shuō)的用libtorrent/bencode之類(lèi)的方法?。?/p>

使用環(huán)境:

Windows 10

已安裝python3.5.1及pip

已配置python系統(tǒng)環(huán)境變量(python命令可以在任何目錄運(yùn)行)

1.安裝magneturi

pip install magneturi

2.利用py3createtorrent制作種子

項(xiàng)目地址及詳細(xì)說(shuō)明:http://py3createtorrent.readthedocs.io/en/latest/user.html

下載地址:https://bitbucket.org/rsnitsch/py3createtorrent/downloads/


解壓后的三個(gè)文件

你可以通過(guò)以下命令來(lái)簡(jiǎn)單創(chuàng)建一個(gè)種子(注意是一行):

python py3createtorrent.py -p 4096 examplefile.mp4 udp://tracker.openbittorrent.com:80/announce

其中-p 4096是指定分塊為4096KiB,即通常指的4MB。

其中py3createtorrent.py、examplefile.mp4均在當(dāng)前路徑,如果不是請(qǐng)?zhí)鎿Q為絕對(duì)路徑。

我把py3createtorrent.py中533行的默認(rèn)參數(shù)1024改成了4096,以跳過(guò)運(yùn)行時(shí)出現(xiàn)

It is strongly recommended to use a maximum piece ?length of 1024 KiB! Do you really want to continue? yes/no:?

執(zhí)行以上命令后便會(huì)生成examplefile.mp4的種子文件examplefile.mp4.torrent

3.利用magneturi得到32位的hash(表示并沒(méi)有了解這個(gè)32位和常用40位info hash的區(qū)別,但是它們可以相互轉(zhuǎn)換)。現(xiàn)在建立tohash.py,內(nèi)容如下:

#coding=gbk

import magneturi

import base64

import sys

torrentname = sys.argv[1]

mangetlink = magneturi.from_torrent_file(torrentname)

print (mangetlink)

然后執(zhí)行下列代碼:

python tohash.py 20170609中國(guó)文藝周末版——向上海美術(shù)制片廠致敬.mp4.torrent

執(zhí)行結(jié)果

得到的磁力鏈?zhǔn)?2位hash的,這和用utorrent等軟件添加任務(wù)復(fù)制的manget鏈接是一樣的,但是基本上不能用于度盤(pán)離線,我們需要40位 的info hash。

我們需要對(duì)其進(jìn)行變換,代碼如下:

b32Hash = 'RDFF6W4MZRQCFV4DLICDV4H5VLLDU4SO'

b16Hash = base64.b16encode(base64.b32decode(b32Hash))

b16Hash = b16Hash.lower()

b16Hash = str(b16Hash,"utf-8")

print (b16Hash)

然后可以得到40位的info hash:

88ca5f5b8ccc6022d7835a043af0fdaad63a724e

3.簡(jiǎn)便的info hash獲取整合。

基于以上過(guò)程,我將各個(gè)步驟整合起來(lái),最終可以直接對(duì)文件制作種子并得到磁力鏈。

getfhash.py

import sys

import os

import subprocess

fname = sys.argv[1]

os.system('python py3createtorrent.py -p 4096 '+fname+' udp://tracker.openbittorrent.com:80/announce')

os.system('python tohash.py '+fname+'.torrent')


注意第六行的空格

tohash.py

#coding=gbk

#用于獲取種子文件info hash值

import magneturi

import base64

import sys

torrentname = sys.argv[1]

mangetlink = magneturi.from_torrent_file(torrentname)

ch = ''

n = 20

b32Hash = n * ch + mangetlink[20:]

#print (b32Hash)

b16Hash = base64.b16encode(base64.b32decode(b32Hash))

b16Hash = b16Hash.lower()

b16Hash = str(b16Hash,"utf-8")

print ("40位info hash值:"+'\n'+b16Hash)

print ("磁力鏈:"+'\n'+"magnet:?xt=urn:btih:"+b16Hash)


第一行不可少,這是Windows下使用

4.演示:

現(xiàn)在py3createtorrent.py、tohash.py、getfhash.py、待獲取info hash的文件都在同一目錄。

獲取info hash的文件已經(jīng)上傳過(guò)百度網(wǎng)盤(pán)

執(zhí)行命令:

python getfhash.py 20170609中國(guó)文藝周末版——向上海美術(shù)制片廠致敬.mp4

稍等片刻:


得到info hash

現(xiàn)在需要把種子上傳至百度云,否則后面沒(méi)法直接用磁力鏈離線:


生成的種子文件


上傳完成

現(xiàn)在離線:


這里輸入完整磁力鏈



離線成功!

5.最后

現(xiàn)在可把info hash告訴別人,補(bǔ)全磁力鏈,這樣就可以起分享作用了!

88ca5f5b8ccc6022d7835a043af0fdaad63a724e

當(dāng)然你也可以分享完整的磁力鏈,不過(guò)這在公開(kāi)的地方容易和諧掉~(yú)~~

建議只發(fā)布info hash。

magnet:?xt=urn:btih:88ca5f5b8ccc6022d7835a043af0fdaad63a724e

歡迎指正!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 種子站點(diǎn)的集中特性使得它們很容易被關(guān)閉(提供音樂(lè)、電影等版權(quán)內(nèi)容的種子文件的網(wǎng)站經(jīng)常會(huì)因法律原因而被關(guān)閉,如海盜灣...
    treelake閱讀 46,800評(píng)論 17 187
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,846評(píng)論 6 427
  • 近年來(lái),國(guó)內(nèi)網(wǎng)絡(luò)版權(quán)維護(hù)的力度逐步加大,從“凈網(wǎng)行動(dòng)”嚴(yán)查網(wǎng)盤(pán)分享內(nèi)容、直致快播于死地,到廣電封殺電視盒子,再到版...
    逸之閱讀 2,676評(píng)論 9 21
  • 夜半驚夢(mèng)的惆悵 花開(kāi)一地的殘紅 誰(shuí)在窗前點(diǎn)了一盞燈 總是讓我陷入沉思 恍若隔世的流年似水 依然未能抹去那年盛夏 那...
    冰志杰閱讀 386評(píng)論 0 0
  • 「ここは私たちのいない場(chǎng)所」 因緣巧合下,有機(jī)會(huì)讀了這本書(shū)。白石一文這個(gè)名字無(wú)疑是陌生萬(wàn)分的,譯者的名字倒是在哪遇...
    歲寒枝閱讀 470評(píng)論 0 4

友情鏈接更多精彩內(nèi)容