2009-11-05 7 views
7

Tôi đã đọc đặc tả Bit-torrent và thực hiện một số tìm kiếm, cố gắng tìm hiểu cách tôi có thể lấy hạt/dữ liệu được tải xuống từ trình theo dõi torrent (sử dụng Python). Tôi có thể tính toán băm thông tin từ một Torrent không có vấn đề, mà phù hợp với băm thông tin được đưa ra bởi các ứng dụng torrent làm việc khác nhau.Làm thế nào để tính toán URL bị xóa cho một torrent

Tuy nhiên, khi tôi cố gắng để có được những thông tin từ các tracker tôi hoặc là thời gian chờ (theo dõi đang làm việc) hoặc nhận dữ liệu rỗng, tùy thuộc vào những gì hình thức tôi đặt URL trong:

http://tracker.openbittorrent.com/scrape?info_hash=a8c482902b1c735de462479721b011dc7b3d3558 - timeout

Tôi được thông báo rằng số ký tự này phải dài 20 ký tự, vì vậy hãy lấy một chuỗi con, nhưng điều này cho biết dữ liệu trống.

http://tracker.openbittorrent.com/scrape?info_hash=a8c482902b1c735de462 - d5: filesdee

Tôi nghĩ tôi đã hiểu lầm gì đó với làm thế nào tôi nên mã hóa hoặc làm cho infohash cho URL cạo, nhưng có thể không cho cuộc đời của tôi nhìn thấy ở đâu.

Trả lời

6

Bạn đang chuyển sang biểu diễn ký tự hex của info_hash. Nó phải là một biểu diễn nhị phân. Để có được byte chưa in ra thành việc sử dụng URL URL mã hóa:

/scrape?info_hash=%A8%C4%82%90%2B%1Cs%5D%E4bG%97%21%B0%11%DC%7B%3D5X 

(Tôi cũng cố gắng tránh mã hóa các _ trong tham số info_hash ... không phải là nó không phải là chính xác, nhưng đó là loại điều tôi mong chờ một số trackers viết-cho tốc độ mess up)

+1

Trong Python 3, sử dụng urllib.parse.quote (infohash). Trong Python 2, sử dụng urllib.quote (infohash). – Mead

+1

Nếu bạn chỉ có phiên bản hex của infohash, hãy chuyển nó thành nhị phân với 'binascii.a2b_hex (hexinfohash)'. Bạn có thể cần phải gọi 'binascii.a2b_hex (hexinfohash.encode (" utf-8 "))' nếu bạn đang sử dụng Python 3. – Mead

3

giải pháp của tôi:.

import binascii 

binary_info_hash = binascii.unhexlify('79b193385de5b967175ca86073670fce0e45a324') 
print binary_info_hash 

Kết quả:

y%B1%938%5D%E5%B9g%17%5C%A8%60sg%0F%CE%0EE%A3%24 

Thông tin khác: binascii.unhexlify