def _dns_info_mapper(self, raw_dns):
        """The method maps the specific fields/flags in a DNS record to human readable form"""
        output = {}

        # Indentification
        output['identification'] = raw_dns['id']

        # Pull out all the flags
        flags = {}
        flags['type'] = 'query' if raw_dns['qr'] == 0 else 'response'
        flags['opcode'] = self.opcodes.get(raw_dns['opcode'], 'UNKNOWN')
        flags['authoritative'] = True if raw_dns['aa'] else False
        flags['truncated'] = True if raw_dns['tc'] else False
        flags['recursion_desired'] = True if raw_dns['rd'] else False
        flags['recursion_available'] = True if raw_dns['ra'] else False
        flags['zero'] = raw_dns['zero']
        flags['return_code'] = self.rcodes.get(raw_dns['rcode'], 'UNKNOWN')
        output['flags'] = flags

        # Question/Answer Counts
        counts = {}
        counts['questions'] = len(raw_dns['qd'])
        counts['answers'] = len(raw_dns['an'])
        counts['auth_answers'] = len(raw_dns['ns'])
        counts['add_answers'] = len(raw_dns['ar'])
        output['counts'] = counts

        # Queries/Questions
        queries = []
        for query in raw_dns['qd']:
            q = {'class': self.query_classes.get(query['cls'], 'UNKNOWN'),
                 'type': self.query_types.get(query['type'], 'UNKNOWN'),
                 'name': query['name'],
                 'data': query['data']}
            queries.append(q)
        output['queries'] = queries


        # Responses/Answers (Resource Record)
        output['answers'] = {}
        for section_name, section in zip(['answers', 'name_servers', 'additional'], ['an', 'ns', 'ar']):
            answers = []
            for answer in raw_dns[section]:
                ans_output = {}
                ans_output['name'] = answer['name']
                ans_output['type'] = self.query_types.get(answer['type'], 'UNKNOWN')
                ans_output['class'] = self.query_classes.get(answer['cls'], 'UNKNOWN')
                ans_output['ttl'] = answer['ttl']

                # Get the return data for this answer type
                rdata_field = self._get_rdata_field(answer)
                if rdata_field != 'unknown':
                    ans_output['rdata'] = answer[rdata_field]
                answers.append(ans_output)

            # Add data to this answer section
            output['answers'][section_name] = answers

        # Add any weird stuff
        weird = self._dns_weird(output)
        if weird:
            output['weird'] = weird

        return output
The method maps the specific fields/flags in a DNS record to human readable form