Exemplo n.º 1
0
    def get(self):
        info_hash = global_info_hash
        peer_id = "XXX"
        ip = self.get_argument('remote_ip')
        port = self.get_argument('remote_port')

        if not ip or not port:
            self.write("FFF")
            return

        # store the peer info
        print "[+] storing FAKE peer %s:%s" % (ip, port)
        utils.store_peer_info(info_hash, peer_id, ip, port, 1)

        self.set_header('content-type', 'text/plain')
        self.write("OK")
Exemplo n.º 2
0
    def get(self):
        info_hash = global_info_hash
        peer_id = "XXX"
        ip = self.get_argument('remote_ip')
        port = self.get_argument('remote_port')

        if not ip or not port:
            self.write("FFF")
            return

        # store the peer info
        print "[+] storing FAKE peer %s:%s" % (ip, port)
        utils.store_peer_info(info_hash, peer_id, ip, port, 1)

        self.set_header('content-type', 'text/plain')
        self.write("OK")
Exemplo n.º 3
0
    def get(self):
        global global_info_hash
        failure_reason = ''
        warning_message = ''

        # get all the required parameters from the HTTP request.
        info_hash = self.get_argument('info_hash')
        if info_hash:
            global_info_hash = info_hash
        peer_id = self.get_argument('peer_id')
        try:
            ip = self.get_argument('remote_ip')
        except:
            ip = self.request.remote_ip
        if not ip:
            ip = self.request.remote_ip

        port = self.get_argument('port')

        # send appropirate error code.
        if not info_hash:
            return self.send_error(utils.MISSING_INFO_HASH)

        if not peer_id:
            return self.send_error(utils.MISSING_PEER_ID)

        if not port:
            return self.send_error(utils.MISSING_PORT)

        # if len(info_hash) != utils.INFO_HASH_LEN:
        #    return self.send_error(utils.INVALID_INFO_HASH)
        # if len(peer_id) != utils.PEER_ID_LEN:
        #    return self.send_error(utils.INVALID_PEER_ID)

        # get the optional parameters.
        # uploaded = int(self.get_argument('uploaded', 0))
        # downloaded = int(self.get_argument('downloaded', 0))
        # left = int(self.get_argument('left', 0))
        compact = int(self.get_argument('compact', 0))
        # no_peer_id = int(self.get_argument('no_peer_id', 0))
        event = self.get_argument('event', '')
        numwant = int(self.get_argument('numwant',
                                        utils.DEFAULT_ALLOWED_PEERS))

        if numwant > utils.MAX_ALLOWED_PEERS:
            # cannot request more than MAX_ALLOWED_PEERS.
            self.send_error(utils.INVALID_NUMWANT)

        # FIXME: What to do with these parameters?
        # key = self.get_argument('key', '')
        tracker_id = self.get_argument('trackerid', '')

        # store the peer info
        if event:
            print "[+] storing peer %s" % ip
            utils.store_peer_info(info_hash, peer_id, ip, port, event)

        # generate response
        response = {}
        # Interval in seconds that the client should wait between sending
        #    regular requests to the tracker.
        response['interval'] = utils.get_config().getint('tracker', 'interval')
        # Minimum announce interval. If present clients must not re-announce
        #    more frequently than this.
        response['min interval'] = utils.get_config().getint('tracker',
                                                             'min_interval')
        # FIXME
        response['tracker id'] = tracker_id
        response['complete'] = utils.no_of_seeders(info_hash)
        response['incomplete'] = utils.no_of_leechers(info_hash)

        # get the peer list for this announce
        response['peers'] = utils.get_peer_list(info_hash, numwant, compact,
                                                True)

        # set error and warning messages for the client if any.
        if failure_reason:
            response['failure reason'] = failure_reason
        if warning_message:
            response['warning message'] = warning_message

        # send the bencoded response as text/plain document.
        self.set_header('content-type', 'text/plain')
        print "<<<", response
        self.write(bencode(response))
Exemplo n.º 4
0
    def get(self):
        global global_info_hash
        failure_reason = ''
        warning_message = ''

        # get all the required parameters from the HTTP request.
        info_hash = self.get_argument('info_hash')
        if info_hash:
            global_info_hash = info_hash
        peer_id = self.get_argument('peer_id')
        try:
            ip = self.get_argument('remote_ip')
        except:
            ip = self.request.remote_ip
        if not ip:
            ip = self.request.remote_ip

        port = self.get_argument('port')

        # send appropirate error code.
        if not info_hash:
            return self.send_error(utils.MISSING_INFO_HASH)

        if not peer_id:
            return self.send_error(utils.MISSING_PEER_ID)

        if not port:
            return self.send_error(utils.MISSING_PORT)

        # if len(info_hash) != utils.INFO_HASH_LEN:
        #    return self.send_error(utils.INVALID_INFO_HASH)
        # if len(peer_id) != utils.PEER_ID_LEN:
        #    return self.send_error(utils.INVALID_PEER_ID)

        # get the optional parameters.
        # uploaded = int(self.get_argument('uploaded', 0))
        # downloaded = int(self.get_argument('downloaded', 0))
        # left = int(self.get_argument('left', 0))
        compact = int(self.get_argument('compact', 0))
        # no_peer_id = int(self.get_argument('no_peer_id', 0))
        event = self.get_argument('event', '')
        numwant = int(self.get_argument('numwant',
                                        utils.DEFAULT_ALLOWED_PEERS))

        if numwant > utils.MAX_ALLOWED_PEERS:
            # cannot request more than MAX_ALLOWED_PEERS.
            self.send_error(utils.INVALID_NUMWANT)

        # FIXME: What to do with these parameters?
        # key = self.get_argument('key', '')
        tracker_id = self.get_argument('trackerid', '')

        # store the peer info
        if event:
            print "[+] storing peer %s" % ip
            utils.store_peer_info(info_hash, peer_id, ip, port, event)

        # generate response
        response = {}
        # Interval in seconds that the client should wait between sending
        #    regular requests to the tracker.
        response['interval'] = utils.get_config().getint('tracker', 'interval')
        # Minimum announce interval. If present clients must not re-announce
        #    more frequently than this.
        response['min interval'] = utils.get_config().getint(
            'tracker', 'min_interval')
        # FIXME
        response['tracker id'] = tracker_id
        response['complete'] = utils.no_of_seeders(info_hash)
        response['incomplete'] = utils.no_of_leechers(info_hash)

        # get the peer list for this announce
        response['peers'] = utils.get_peer_list(info_hash, numwant, compact,
                                                True)

        # set error and warning messages for the client if any.
        if failure_reason:
            response['failure reason'] = failure_reason
        if warning_message:
            response['warning message'] = warning_message

        # send the bencoded response as text/plain document.
        self.set_header('content-type', 'text/plain')
        print "<<<", response
        self.write(bencode(response))