def generate_message(self,zeroaccess_nodes,zeroaccess_file_list):
        ret = urllib2.urlopen('https://enabledns.com/ip')
        self.local_ip = ret.read()
        get_local_ip_info = 'Retrieve local ip : '+self.local_ip
        logger.info(get_local_ip_info)

        #faked_ip = self.local_ip
        faked_ip = '96.8.117.251'

        self.getL_message = ZeroAccessUtil.buildZeroAccessGetLMessage()
        self.newL_message = ZeroAccessUtil.buildZeroAccessNewLMessage(faked_ip)

        faked_node_info = ZeroAccessNode()
        faked_node_info.set_ip(struct.unpack("I",socket.inet_aton(faked_ip))[0])
        faked_node_info.set_time(time.time())

        seed_node_size = 15
        seed_node_list = random.sample(zeroaccess_nodes,seed_node_size)
        seed_node_list.append(faked_node_info)

        print 'bootstrap nodes len : ' + str(len(zeroaccess_nodes))
        print 'bootstrap file len : ' + str(len(zeroaccess_file_list))
        file_list = random.sample(zeroaccess_file_list,5)
        self.retL_message = ZeroAccessUtil.buildZeroAccessretLMessage(seed_node_list,file_list)
        print 'retL message length  ' + str(len(self.retL_message))
        print 'retL message :\n' 
        #print ''.join( [ "%02X" % x for x in self.retL_message]).strip()
        print self.retL_message.encode('hex')
    def generate_message(self, zeroaccess_nodes, zeroaccess_file_list):
        ret = urllib2.urlopen('https://enabledns.com/ip')
        self.local_ip = ret.read()
        get_local_ip_info = 'Retrieve local ip : ' + self.local_ip
        logger.info(get_local_ip_info)

        #faked_ip = self.local_ip
        faked_ip = '96.8.117.251'

        self.getL_message = ZeroAccessUtil.buildZeroAccessGetLMessage()
        self.newL_message = ZeroAccessUtil.buildZeroAccessNewLMessage(faked_ip)

        faked_node_info = ZeroAccessNode()
        faked_node_info.set_ip(
            struct.unpack("I", socket.inet_aton(faked_ip))[0])
        faked_node_info.set_time(time.time())

        seed_node_size = 15
        seed_node_list = random.sample(zeroaccess_nodes, seed_node_size)
        seed_node_list.append(faked_node_info)

        print 'bootstrap nodes len : ' + str(len(zeroaccess_nodes))
        print 'bootstrap file len : ' + str(len(zeroaccess_file_list))
        file_list = random.sample(zeroaccess_file_list, 5)
        self.retL_message = ZeroAccessUtil.buildZeroAccessretLMessage(
            seed_node_list, file_list)
        print 'retL message length  ' + str(len(self.retL_message))
        print 'retL message :\n'
        #print ''.join( [ "%02X" % x for x in self.retL_message]).strip()
        print self.retL_message.encode('hex')
Ejemplo n.º 3
0
    def retL_process(self,original_message,host):
        crc32,command,b_flag,ip_count = struct.unpack('IIII',original_message[:16])

        node_in_info = 'this node ' + str(host) + ' has ' + str(ip_count) + ' descendant ip'  
        logger.debug(node_in_info)
        base_pointer = 16
        if(ip_count > 20):
            return
            #raise Exception(str(host)+ ' IP Count return from P2P Node Two Large : '+str(ip_count),'memory error')
        
        private_ip_count = 0.0
        for i in xrange(ip_count):
            ip =  struct.unpack('I',original_message[base_pointer:(base_pointer+4)])[0]
            times_tamp =  struct.unpack('I',original_message[base_pointer+4:base_pointer+8])[0]
            node = ZeroAccessNode()
            node.set_ip(ip)
            node.set_udpport(self.udp_port)
            node.set_time(times_tamp)
            base_pointer = base_pointer + 8

            z_ip = IP(socket.ntohl(ip))            
            if(z_ip.iptype() == 'PRIVATE'):
                logger.debug('Private IP '+  socket.inet_ntoa(struct.pack('I',ip))+' from '+host[0])
                private_ip_count+=1                
                continue

            if not self.AlreadyQueryed(node):
                self.insertGlobalMap(node)
                self.nonQueryedNodes.put(node)
                self.node_size_count+=1
                if(self.node_size_count % 1000 == 0):
                    info = 'ZeroAccess Nodes Size Mounts to :'+str(self.node_size_count)
                    logger.info(info)
                    print info

        if(private_ip_count > 0):
                self.UpdateFakedRatioInfoOfNode(host[0],(private_ip_count/ip_count))
        

        file_count = struct.unpack('I',original_message[base_pointer:base_pointer+4])[0]
        base_pointer += 4
        for i in range(file_count):
            file_name =  struct.unpack('I',original_message[base_pointer:base_pointer+4])[0]
            file_timestamp =  struct.unpack('I',original_message[base_pointer+4:base_pointer+8])[0]
            file_size =  struct.unpack('I',original_message[base_pointer+8:base_pointer+12])[0]
            file_signature = struct.unpack(str(self.ZEROACCESS_FILE_HEADER_LENGTH)+'B',
                    original_message[base_pointer+12:base_pointer+12+self.ZEROACCESS_FILE_HEADER_LENGTH])

            file_info = ZeroAccessFileInfo()
            #file_info.set_filename(str(hex(file_name)))
            file_info.set_filename(file_name)
            file_info.set_timestamp(file_timestamp)
            file_info.set_filesize(file_size)
            file_info.set_sig(file_signature)

            self.insertFileInfo(file_info,host)

            base_pointer+=12+self.ZEROACCESS_FILE_HEADER_LENGTH
        logger.debug('received file count : '+str(file_count))
        self.sendDatagram()