def announce(self): ''' Announces to a tracker Currently returns 1 peer's IP and port, hardcoded ''' payload = {'info_hash': self.info_hash, 'peer_id':'-PYOTR0-dfhmjb0skee6', 'port':'6881', 'uploaded':'0', 'downloaded':'0', 'key':'2c4dec5f', 'left': len(self.sha_list), 'no_peer_id':'0', 'event':'started', 'compact':'1', 'numwant':'30'} response = requests.get(self.torrent['announce'], params = payload) reply = bencode.bdecode(response.content) print(""" Response received, decoded.. peers: {0} complete: {1} interval: {2} incomplete: {3} """.format(repr(reply['peers']), reply['complete'], reply['interval'], reply['incomplete'])) data = reply['peers'] multiple = len(data)/6 #print struct.unpack("!" + "LH"*multiple, data) print "Converting 'peers' to more readable form:" for i in range(0, multiple): self.peer_list.append((inet_ntop(2, data[6*i:6*i+4]), struct.unpack("!H", data[6*i+4:6*i+6])[0])) print self.peer_list
def announce(metainfo, left, info_hash): ''' Announces to a tracker Currently returns 1 peer's IP and port, hardcoded ''' payload = {'info_hash': info_hash, 'peer_id':'-PYOTR0-dfhmjb0skee6', 'port':'57710', 'uploaded':'0', 'downloaded':'0', 'key':'2c4dec5f', 'left': left, 'no_peer_id':'0', 'event':'started', 'compact':'1', 'numwant':'30'} print("Announcing to tracker...") response = requests.get(metainfo['announce'], params = payload) try: reply = bencode.bdecode(response.content) except: print("Not a valid bencoded string '" + response.content + "'") print(""" Response received, decoded.. peers: {0} complete: {1} interval: {2} incomplete: {3} """.format(repr(reply['peers']), reply['complete'], reply['interval'], reply['incomplete'])) data = reply['peers'] print data print "" peer_list = [] for i in range(0, len(data)/6): peer_list.append((inet_ntop(2, data[6*i:6*i+4]), struct.unpack("!H", data[6*i+4:6*i+6])[0])) '''There exists a scenario where even though we've specified compact, we do not get a compact result, the following is to handle this case''' if (peer_list == []): for i in range(0, len(data)): peer_list.append((data[i]['ip'], data[i]['port'])) print peer_list return peer_list