Bittorrent udp tracker response

I have doubts that the udp declaration response is being processed as requested in the bep udp protocol specification

import socket,struct clisocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) connection_id=0x41727101980 transaction_id = 12345 # responses Tracker : Specification UDP [ User Datagaram Protocol ] info_hash = "%1D%D4%D1%EDQn%DB%5CL%83%90%1B%2B%F8%83%A2%19%C0%7C%98" peer_id = "-UT1234-m%09%B2%D5%99%FA%1Fj%88%AC%0D%A7" action =1 # announce downloaded = 0 left = 0 uploaded = 0 event =0 ip = 0 key = 0 num_want = -1 port = 9999 announce_pack = struct.pack(">QLL20s20sQQQLLLLH",connection_id,action,transaction_id,info_hash,peer_id,down loaded,left,uploaded,event,ip,key,num_want,port) clisocket.sendto(announce_pack, ("tracker.ccc.de", 80)) res = clisocket.recv(1024) action=struct.unpack(">HLLLLQQQ20s20sLLQ",res) 

but i get the following error

 DeprecationWarning: struct integer overflow masking is deprecated announce_pack=struct.pack(">QLL20s20sQQQLLLLH",connection_id,action,transaction_id,info_hash,peer_id,downloaded,left,uploaded,event,ip,key,num_want,port) Traceback (most recent call last): action=struct.unpack(">HLLLLQQQ20s20sLLQ",res) struct.error: unpack requires a string argument of length 98 
+4
source share
1 answer

It looks like you are passing a line that is too large, perhaps because you are getting more than one package. Try

 action=struct.unpack(">HLLLLQQQ20s20sLLQ",res[:98]) 

Also, it looks like you are not correctly parsing the announcement response. See here for the UDP tracker packet format.

+3
source

Source: https://habr.com/ru/post/1387879/


All Articles