如何在Python中操作FQDN变量?

如何在Python中操作FQDN变量?,python,python-3.x,string,dns,python-3.7,Python,Python 3.x,String,Dns,Python 3.7,我有一些函数代码正在做我想做的事情。它接受DNS响应,将响应分解为其所有部分(即主机名、所有可选子域名、域名和tld),然后从整个DNS响应中去除主机名和尾随点,并显示整个域(带有可选子域) 请注意,“FQDN”的变量将是动态DNS响应和/或用户输入 无论hte变量上是否有尾随点(即“hostname.domain.com”和“hostname.domain.com”的函数),我如何设置代码以使其正常工作 我还很好奇,是否有人对如何在生成相同输出的同时整体改进此代码有任何建议。提前谢谢 fqd

我有一些函数代码正在做我想做的事情。它接受DNS响应,将响应分解为其所有部分(即主机名、所有可选子域名、域名和tld),然后从整个DNS响应中去除主机名和尾随点,并显示整个域(带有可选子域)

请注意,“FQDN”的变量将是动态DNS响应和/或用户输入

无论hte变量上是否有尾随点(即“hostname.domain.com”和“hostname.domain.com”的函数),我如何设置代码以使其正常工作

我还很好奇,是否有人对如何在生成相同输出的同时整体改进此代码有任何建议。提前谢谢


fqdn = "computername.subdomainname1.subdomainname2.domainname.com."

dot, tld, domain, *sub_domains, hostname = fqdn.split(".")[::-1]

testname = fqdn.split(hostname + ".")

before = len("")
after = len(".")
parsed_testname = (testname[1][before:-after])

print(hostname)
print(parsed_testname)
输出为:

computername
subdomainname1.subdomainname2.domainname.com

您可以随时在输入端调用
.rstrip(“.”)

>“foo”.rstrip(“.”)
“福”
>>>“foo。”.rstrip(“.”)
“福”

您可以随时在输入端调用
.rstrip(“.”

>“foo”.rstrip(“.”)
“福”
>>>“foo。”.rstrip(“.”)
“福”

获取主机名的快捷方法:

fqdn = "computername.subdomainname1.subdomainname2.domainname.com."
pieces = fqdn.split(".")
hostname = pieces[0]
testname = '.'.join(pieces[1:])
print(hostname)
print(testname)

获取主机名的快速简便方法:

fqdn = "computername.subdomainname1.subdomainname2.domainname.com."
pieces = fqdn.split(".")
hostname = pieces[0]
testname = '.'.join(pieces[1:])
print(hostname)
print(testname)

除了总是对输入调用
.rstrip('.')
之外,您似乎只想将第一个
之前的内容与所有其他内容分开

您可以将
.split
maxplit=1
一起使用:

delimiter = '.'
hostname, parsed_testname = fqdn.rstrip(delimiter).split(delimiter, maxsplit=1)

除了总是对输入调用
.rstrip('.')
之外,您似乎只想将第一个
之前的内容与所有其他内容分开

您可以将
.split
maxplit=1
一起使用:

delimiter = '.'
hostname, parsed_testname = fqdn.rstrip(delimiter).split(delimiter, maxsplit=1)

两个问题:1)您是否需要跟踪
tld
子域
等,或者这只是额外的?2) 如果有尾随的
,您的输出是否应该保留尾随的
;after=len(“.”
是除
0
1
之外的任何东西吗?如果您需要“nornalize”名称,请注意,除了尾随点之外,您还有很多其他事情要做。例如,Case就是一个例子(主机名不区分大小写,您可以使用混合大小写获得回复),如果用户输入受到限制,您可能会得到非ASCII字符,对于主机名,您需要对其应用IDNA以返回ASCII。PS:当您需要使用假名称时,请使用
example.com
.example
TLD。@Chance-我确实需要分别跟踪子域(如果存在)和域。。。但是,tld可以(或不可以)与域变量组合。(例如…它可以是“domain.com”或“domain”和“com”。@DeepSpace-这段代码实际上只是一个让脚本做我想做的事情的黑客。它的唯一目的是去掉尾随。“几个问题:1)你需要跟踪
tld
子域
,等等吗。,或者那只是额外的?2) 如果有尾随的
,您的输出是否应该保留尾随的
;after=len(“.”
是除
0
1
之外的任何东西吗?如果您需要“nornalize”名称,请注意,除了尾随点之外,您还有很多其他事情要做。例如,Case就是一个例子(主机名不区分大小写,您可以使用混合大小写获得回复),如果用户输入受到限制,您可能会得到非ASCII字符,对于主机名,您需要对其应用IDNA以返回ASCII。PS:当您需要使用假名称时,请使用
example.com
.example
TLD。@Chance-我确实需要分别跟踪子域(如果存在)和域。。。但是,tld可以(或不可以)与域变量组合。(例如,它可以是“domain.com”或“domain”和“com”。@DeepSpace-这段代码实际上只是一个让脚本做我想做的事情的黑客。它的唯一目的是去掉尾随部分”。”