如何在 python 中测试域是“www”域或子域或名称服务器域或邮件域?
Posted
技术标签:
【中文标题】如何在 python 中测试域是“www”域或子域或名称服务器域或邮件域?【英文标题】:How to test Domain is it 'www' domain or subdomain or name server domain or mail domain in python? 【发布时间】:2014-12-31 08:12:19 【问题描述】:我有我要测试的域列表,它们是主域还是子域或名称服务器或邮件服务器:
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
【问题讨论】:
它没有做什么?你遇到了什么错误? 此列表中有多种名称服务器,但如何区分邮件域和名称服务器以及子域的问题 域类型总是错误或错误 您是否考虑过检查 DNS?在 DNS 中查询example.com
的 NS 和 MX 记录,然后查看您拥有的内容是否与实时记录名称匹配。 DNSPython 是一个可以帮助做到这一点的库。
【参考方案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
另请注意,这仅适用于“简单”TLD,例如 com
、net
、org
等。
【讨论】:
这很有用,谢谢,但我想区分'mx3'或'mx'是用于子域或邮件域,'ns12'和'aspmx.l'是邮件域,子- 域或名称服务器?是否有任何库或脚本可以区分? @JonB 您会假设 FQHN 实际上反映了主机的目的。例如,如果我将我的邮件服务器命名为george.example.com
,你能区分它的用途吗?而且,是的,它们就在那里。
您可以尝试使用nmap
来查找打开的端口并猜测主机的用途,但对于提供多种服务的主机而言,它并非 100% 准确。【参考方案2】:
tldextract 库的作用与您的需要相反:给定字符串“mail.example.com”,它将返回“com”而不是“mail”。做你需要的,你不需要任何库;只需在域名中搜索“。”并取其前面的子字符串。
【讨论】:
以上是关于如何在 python 中测试域是“www”域或子域或名称服务器域或邮件域?的主要内容,如果未能解决你的问题,请参考以下文章