我正在尝试使用python获取DNS服务器IP地址。若要在Windows命令提示符中执行此操作,我将使用
ipconfig -all
如下所示:

我想使用python脚本做完全相同的事情。有什么方法提取这些值吗?我成功地提取了我的设备的IP地址,但是DNS Server IP被证明更具挑战性。
发布于 2018-12-14 18:04:58
最近,我不得不获得一组跨平台主机正在使用的DNS服务器的IP地址(linux、macOS、windows),这就是我最后的做法,我希望这会有所帮助:
#!/usr/bin/env python
import platform
import socket
import subprocess
def is_valid_ipv4_address(address):
try:
socket.inet_pton(socket.AF_INET, address)
except AttributeError: # no inet_pton here, sorry
try:
socket.inet_aton(address)
except socket.error:
return False
return address.count('.') == 3
except socket.error: # not a valid address
return False
return True
def get_unix_dns_ips():
dns_ips = []
with open('/etc/resolv.conf') as fp:
for cnt, line in enumerate(fp):
columns = line.split()
if columns[0] == 'nameserver':
ip = columns[1:][0]
if is_valid_ipv4_address(ip):
dns_ips.append(ip)
return dns_ips
def get_windows_dns_ips():
output = subprocess.check_output(["ipconfig", "-all"])
ipconfig_all_list = output.split('\n')
dns_ips = []
for i in range(0, len(ipconfig_all_list)):
if "DNS Servers" in ipconfig_all_list[i]:
# get the first dns server ip
first_ip = ipconfig_all_list[i].split(":")[1].strip()
if not is_valid_ipv4_address(first_ip):
continue
dns_ips.append(first_ip)
# get all other dns server ips if they exist
k = i+1
while k < len(ipconfig_all_list) and ":" not in ipconfig_all_list[k]:
ip = ipconfig_all_list[k].strip()
if is_valid_ipv4_address(ip):
dns_ips.append(ip)
k += 1
# at this point we're done
break
return dns_ips
def main():
dns_ips = []
if platform.system() == 'Windows':
dns_ips = get_windows_dns_ips()
elif platform.system() == 'Darwin':
dns_ips = get_unix_dns_ips()
elif platform.system() == 'Linux':
dns_ips = get_unix_dns_ips()
else:
print("unsupported platform: {0}".format(platform.system()))
print(dns_ips)
return
if __name__ == "__main__":
main()用于制作此脚本的资源:
https://stackoverflow.com/a/1325603
https://stackoverflow.com/a/4017219
编辑:如果有人有更好的方法做这件事,请分享:)
发布于 2019-12-23 23:16:44
DNS Python (强的松)可能会有所帮助。您可以通过以下方式获得DNS服务器地址:
import dns.resolver
dns_resolver = dns.resolver.Resolver()
dns_resolver.nameservers[0]https://stackoverflow.com/questions/50015586
复制相似问题