Exemplo n.º 1
0
    def parse(self, domain, data):
        data = WhoisDataParser.parse(self, domain, data)

        for l in data:
            if l.count(': ') == 0:
                continue
            try:
                k, v = [x.strip() for x in l.split(':', 1)]
            except ValueError:
                raise WhoisError('Error parsing line %s' % l)

            try:
                k = FIELD_MAP[k]
            except KeyError:
                raise WhoisError('Unknown field on line %s' % l)

            if k in DATE_FIELDS:
                v = DATE_PARSER(v)

            elif k == 'nameservers':
                m = RE_NS_STATUS.match(v)
                if not m:
                    raise WhoisError('Error parsing line %s' % l)
                v = m.groupdict()['ns']

            elif k in DNS_FIELDS:
                v = v.lower()

            elif k == 'dnssec':
                v = v != 'no' and True or False

            self.set(k, v)
Exemplo n.º 2
0
    def parse(self, domain, data):
        data = WhoisDataParser.parse(self, domain, data)

        for l in data:
            if l.count(': ') == 0:
                continue
            try:
                k, v = [x.strip() for x in l.split(':', 1)]
            except ValueError:
                raise WhoisError('Error parsing line %s' % l)

            try:
                k = FIELD_MAP[k]
            except KeyError:
                raise WhoisError('Unknown field on line %s' % l)

            if k in DATE_FIELDS:
                v = DATE_PARSER(v)

            elif k == 'nameservers':
                m = RE_NS_STATUS.match(v)
                if not m:
                    raise WhoisError('Error parsing line %s' % l)
                v = m.groupdict()['ns']

            elif k in DNS_FIELDS:
                v = v.lower()

            elif k == 'dnssec':
                v = v != 'no' and True or False

            self.set(k, v)
Exemplo n.º 3
0
    def parse(self, domain, data):
        data = WhoisDataParser.parse(self, domain, data)

        for l in data:
            if not l.startswith(' ') or l.strip()=='':
                continue

            try:
                k, v = [x.strip() for x in l.split(':', 1)]
            except ValueError:
                raise WhoisError('Error parsing line %s' % l)

            try:
                k = FIELD_MAP[k]
            except KeyError:
                raise WhoisError('Unknown field on line %s' % l)

            if k in DATE_FIELDS:
                v = DATE_PARSER(v)

            elif k in DNS_FIELDS:
                v = v.lower()

            self.set(k, v)
Exemplo n.º 4
0
    def parse(self, domain, data):
        """Parse data

        Parse Nominet whois data

        """

        def next_section(name, section, value):
            if section is not None and value is not None:
                self.set(section, value)
            return (name, None)

        def push_value(value, new_value):
            if value is None:
                value = new_value
            else:
                if type(value) != list:
                    value = [value]
                value.append(new_value)
            return value

        data = WhoisDataParser.parse(self, domain, data)

        section = None
        value = None
        for l in [l.strip() for l in data]:
            if l.startswith('% ') or l == '':
                continue
            l = l.decode('utf-8')

            if l[:len(END_HEADER_PREFIX)] == END_HEADER_PREFIX:
                break

            if l[-1]==':' and l[:-1] in SECTION_HEADERS.keys():
                (section, value) = next_section(SECTION_HEADERS[l[:-1]], section, value)
                continue

            if section == 'dates':
                for key, field in DATE_FIELD_MAP.items():
                    if l[:len(key)] == key:
                        datevalue = l[len(key):].strip()
                        if datevalue != OLD_DATE_BANNER:
                            datevalue =  DATE_PARSER(datevalue)
                        else:
                            datevalue = OLD_DATE_VALUE
                        self.set(field, datevalue)
                        break

            elif section == 'nameservers':
                m = RE_NS_LIST.match(l)
                if m:
                    ns = m.groupdict()['ns'].strip()
                    glue = [x.strip() for x in m.groupdict()['addresses'].split(',')]
                    self.set('glue_%s' % ns, glue)
                else:
                    ns = l.strip()
                value = push_value(value, ns)

            else:
                value = push_value(value, l)

        if section is not None and value is not None:
            self.set(section, value)
Exemplo n.º 5
0
    def parse(self, domain, data):
        """Parse data

        Parse SaudiNIC whois data

        """
        def next_section(name, section, value):
            if section is not None and value is not None:
                self.set(section, value)
            return (name,None)

        def push_value(value, new_value):
            if value is None:
                value = new_value
            else:
                if type(value) != list:
                    value = [value]
                value.append(new_value)
            return value

        data = WhoisDataParser.parse(self, domain, data)

        section = None
        value = None
        for l in [l.strip() for l in data]:
            if l.startswith('% ') or l == '':
                continue
            l = l.decode('utf-8')

            if l[:12] == 'Domain Name:':
                self.set('domainname', l[12:].lstrip())
                continue

            if l == 'Registrant:':
                (section, value) = next_section('registrant', section, value)
                continue

            if l == 'Administrative Contact:':
                (section, value) = next_section('admin_contact', section, value)
                continue

            if l == 'Technical Contact:':
                (section, value) = next_section('technical_contact', section, value)
                continue

            if l == 'Name Servers:':
                (section, value) = next_section('nameservers', section, value)
                continue

            if l[:11] == 'Created on:':
                self.set('created', datetime.strptime(l[12:], '%Y-%m-%d').date())
                continue
            if l[:16] == 'Last Updated on:':
                self.set('modified', datetime.strptime(l[17:], '%Y-%m-%d').date())
                continue

            if section == 'registrant':
                if l[:8] == 'Address:':
                    (section, value) = next_section('registrant_address', section, value)
                    value = l[9:]
                    continue
                else:
                    value = push_value(value, l)

            if section == 'admin_contact':
                if l[:8] == 'Address:':
                    (section, value) = next_section('admin_address', section, value)
                    value = l[9:]
                    continue
                else:
                    value = push_value(value, l)

            if section == 'technical_contact':
                if l[:8] == 'Address:':
                    (section, value) = next_section('technical_address', section, value)
                    value = l[9:]
                    continue
                else:
                    value = push_value(value, l)

            if section in ( 'registrant_address', 'admin_address', 'technical_address', ):
                value = push_value(value, l)

            elif section == 'nameservers':
                m = RE_NS_LIST.match(l)
                if m:
                    ns = m.groupdict()['ns'].strip()
                    glue = [x.strip() for x in m.groupdict()['addresses'].split(',')]
                    self.set('glue_%s' % ns, glue)
                else:
                    ns = l.strip()

                value = push_value(value, ns)

        if section is not None and value is not None:
            self.set(section, value)
Exemplo n.º 6
0
    def parse(self, domain, data):
        """Parse data

        Parse Nominet whois data

        """
        def next_section(name, section, value):
            if section is not None and value is not None:
                self.set(section, value)
            return (name, None)

        def push_value(value, new_value):
            if value is None:
                value = new_value
            else:
                if type(value) != list:
                    value = [value]
                value.append(new_value)
            return value

        data = WhoisDataParser.parse(self, domain, data)

        section = None
        value = None
        for l in [l.strip() for l in data]:
            if l.startswith('% ') or l == '':
                continue
            l = l.decode('utf-8')

            if l[:len(END_HEADER_PREFIX)] == END_HEADER_PREFIX:
                break

            if l[-1] == ':' and l[:-1] in SECTION_HEADERS.keys():
                (section, value) = next_section(SECTION_HEADERS[l[:-1]],
                                                section, value)
                continue

            if section == 'dates':
                for key, field in DATE_FIELD_MAP.items():
                    if l[:len(key)] == key:
                        datevalue = l[len(key):].strip()
                        if datevalue != OLD_DATE_BANNER:
                            datevalue = DATE_PARSER(datevalue)
                        else:
                            datevalue = OLD_DATE_VALUE
                        self.set(field, datevalue)
                        break

            elif section == 'nameservers':
                m = RE_NS_LIST.match(l)
                if m:
                    ns = m.groupdict()['ns'].strip()
                    glue = [
                        x.strip()
                        for x in m.groupdict()['addresses'].split(',')
                    ]
                    self.set('glue_%s' % ns, glue)
                else:
                    ns = l.strip()
                value = push_value(value, ns)

            else:
                value = push_value(value, l)

        if section is not None and value is not None:
            self.set(section, value)