2014-12-31 53 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 Python庫

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 

另外請注意,這僅適用於像comnetorg

+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」,它會返回「com」而不是「mail」。做你需要的東西,你不需要任何圖書館;只需搜索域名「」。並取其前面的子字符串。