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')
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()