2013-03-14 62 views
1

我搜索以及使用libtorrent和python檢索torrent的IP地址。我嘗試用代碼:在python-libtorrent檢索同樣沒有下載的torrent文件

import libtorrent as lt 
import time 

ses = lt.session() 
ses.listen_on(6881, 6891) 
info = lt.torrent_info('test.torrent') 
h = ses.add_torrent({'ti': info, 'save_path': './'}) 
print 'starting', h.name() 
while (not h.is_seed()): 
    s = h.status() 
    p = h.get_peer_info() 
    for i in p: 
     print i.ip 

    print "\n\n" 

    sys.stdout.flush() 

    time.sleep(1) 

print h.name(), 'complete' 

它的工作或多或少,但我有兩個問題:

  1. 洪流下載。
  2. 在我收到一個對等列表之前,循環會執行幾十次。

你能幫我嗎?

非常感謝。

回答

4

沒有一個規範的「同伴名單」。有您目前連接到的同齡人。然而,「羣中的每個同伴」都是。

libtorrent可以告訴你你連接的對等點,這意味着他們完成了一次uTP或TCP三次握手。

它通常需要一些時間來提高對等連接。你需要找出關於同伴的事情,你需要嘗試連接他們,他們需要起來,沒有一個完整的同行名單。這就是爲什麼你沒有立即連接到一羣同伴。

這聽起來像你對羣體中的所有同行都感興趣。你不太可能找到每個同伴。同行可能不會向相同的追蹤者宣佈,並通過PEX或DHT找到彼此。許多同行不可連接,找到他們的唯一方法是讓他們找到你,他們可能不感興趣。

現在,不清楚爲什麼你想要對等IP,如果你不感興趣下載洪流。鑑於你不是,爲什麼連接到他們呢?

但是,您可以簡單地調用get_full_peer_list(),這在python綁定中不可用。您也可以一遍又一遍地向跟蹤器通告並收集產生的IP。

+0

我想檢索我的碩士論文的測量對象列表。你的意思是「你也可以一次又一次向跟蹤器宣佈並收集產生的IP。」 ?你有一些代碼或一些函數名稱來做到這一點? 非常感謝。 – Comtention 2013-03-18 13:30:42

+0

libtorrent中沒有獨立的跟蹤器通告函數,但您可能會使用urllib。然後再次,你不會得到DHT或UDP跟蹤器同行。 – Arvid 2013-03-19 22:52:31

+0

get_full_peer_list()返回通過PEX或DHT發現的內容嗎? – Kar 2014-11-13 19:35:45