-
Notifications
You must be signed in to change notification settings - Fork 0
Tracker Queries
Jacky He edited this page Jun 14, 2026
·
2 revisions
After creating a Torrent object, the client need to find out which client has the pieces we are downloading. One of the methods is through querying trackers. Trackers is a server that contains the relationship between info hash and peers (ip and port). In this page, we are using the lib to query the tracker to retrieve the peers' [ip, port] pairs.
Tracker queries operate on a Torrent object, not a raw info_hash. The library reads torrent.left, torrent.downloaded, torrent.uploaded, and torrent.event from that object.
Query.single() chooses HTTP or UDP based on the tracker URL:
from torrentlib import Torrent, TorrentStatus
from torrentlib.Tracker import Query
torrent = Torrent(
info_hash="1234567890abcdef1234567890abcdef12345678",
event=TorrentStatus.STARTED,
)
peer_id = "-robots-testing12345"
response = Query.single(
torrent=torrent,
url="udp://tracker.opentrackr.org:1337/announce",
peer_id=peer_id,
port=6881,
timeout=10,
)
print(response["interval"])
print(response.get("seeders"))
print(response.get("leechers"))
print(len(response.get("peers", [])))
print(len(response.get("peers6", [])))You can also query multiple trackers concurrently:
from torrentlib.Tracker import Query
responses = Query.multi(
torrent=torrent,
urls=[
"udp://tracker.opentrackr.org:1337/announce",
"http://tracker.example.com:8080/announce",
],
peer_id=peer_id,
port=6881,
timeout=10,
)
for url, result in responses.items():
if "error" in result:
print(url, result["error"])
else:
print(url, len(result.get("peers", [])))Successful tracker queries automatically merge returned peers into:
-
torrent.peersfor IPv4 peers -
torrent.peers6for IPv6 peers