2014-12-31 4 views
-1

У меня есть список доменов, я хочу, чтобы проверить они основной домен или поддомен или сервер имен или почтовый_сервер:Как протестировать домен - это домен или домен домена или домена доменного имени или доменного имени «www» в домене python?

  • www.domain.com
  • ns1.domain.com
  • mail.domain.com
  • community.domain.com
  • mx.domain.com
  • mx3.domain.com
  • aspmx.l.google.com
  • forums.domain.com

и я использовал tldextract питона библиотека

from tld import get_tld 
    import tldextract 

    class DomainOpt(object): 
    """docstring for DomainOpt""" 
    _domainname = '' 
    _tldextract = None 
    _domaintype = '' 

     def __init__(self, domainname): 
      super(DomainOpt, self).__init__() 
      self._domainname = domainname 
      self._tldextract = tldextract.extract("http://%s/" % self._domainname) 
      if self._tldextract.subdomain == 'mail': 
       self._domaintype = 'maildomain' 
      elif self._tldextract.subdomain in ['ns1','ns2','ns3','ns4','ns5','ns6', 
      'ns7','ns8','ns9','ns10','ns11','ns12','ns13','ns14', 'ns15', 'ns16']: 
       self._domaintype = 'dnsdomain' 
      elif self._tldextract.subdomain is not None: 
       self._domaintype = 'subdomain' 
      else: 
       self._domaintype = 'domain' 

     @property 
     def domainname(self): 
      return get_tld(str('http://%s/' % self._domainname), fail_silently=True) 

     @property 
     def domain(self): 
      return self._tldextract.domain 
     @property 
     def subdomain(self): 
      return self._tldextract.subdomain 
     @property 
     def suffix(self): 
      return self._tldextract.suffix 
     @property 
     def domaintype(self): 
      return self._domaintype 
+1

Что он не делает? Какие ошибки вы получаете? – Withnail

+0

В этом списке много типов серверов имен, но проблема, как различать между почтовым доменом и сервером имен и поддоменом –

+0

domaintype всегда ошибочна или ложна –

ответ

1

Попробуйте это:

hostList = [ 
    'www.domain.com', 
    'ns1.domain.com', 
    'mail.domain.com', 
    'community.domain.com', 
    'mx.domain.com', 
    'mx3.domain.com', 
    'aspmx.l.google.com', 
    'forums.domain.com' 
    ] 

for h in hostList: 
    splitHost = h.split('.') 
    tld = splitHost.pop() 
    dom = splitHost.pop() 
    host = '.'.join(splitHost) 
    print 'FQHN: : ', h 
    print 'Host : ', host 
    print 'Domain: ', dom 
    print 'TLD : ', tld 
    print 

Также обратите внимание, что это работает только для 'простых' ДВУ как com, net, org и т.д.

+0

полезно, но я хочу отличать между «mx3» или «mx» для поддомена или почтового домена, а «ns12» и «aspmx.l» - это почтовый домен, поддомен или сервер имен? есть ли библиотека или сценарий для ** различия **? @JonB –

+1

Вы предполагаете, что FQHN фактически отражает цель хоста. Например, если бы я назвал свой почтовый сервер 'george.example.com', вы могли бы сделать какое-либо различие в его назначении? И да, они там. – JonB

+1

Вы можете попробовать использовать ['nmap'] (http://nmap.org/book/vscan.html), чтобы найти открытые порты и угадать цель хоста, но это не на 100% точно для хостов, которые предоставляют более одного оказание услуг. – JonB

0

tldextract библиотека делает противоположное тому, что вам нужно: дана строка «mail.example.com», это будет return "com", а не "mail". Чтобы сделать то, что вам нужно, вам не нужна библиотека; просто найдите доменное имя для "." и возьмите подстроку, предшествующую ей.

Смежные вопросы