如何判断一个IP地址是否是DNS服务器

这几天做子域名爆破,看了几个online的app。发现很多软件里都有一个DNS的list,里面一大堆的IP地址。然后我就问了自己一个问题,这里面的难道都是DNS服务器嘛?抱着好奇的心态,我决定试一试,查询一下。那么问题就来了,如何判断一个IP地址是否是DNS服务器呢

 

想了想,没有啥好的方法可以直接查询到。最后就是可以用反证法。比如我有一个IP地址是a.a.a.a,然后我假设这个地址是DNS服务器,我用这个地址去(DNS)查询www.baidu.com的IP地址,如果有返回结果,就说明这个地址a.a.a.a是DNS服务器;反之,则说明这个地址不是DNS服务器。

比如在Ternimal里,我们可以看出:

 

所以,决定用python试一试,去实现这个判断。

首先要安装nslookup的包。link:https://pypi.org/project/nslookup/

pip3 install nslookup

然后大概写了一个例子,假设我有三个IP地址,8.8.8.8是Google的DNS服务器,然后1.1.1.1我随便打的一个地址。最后128.232.132.8是网站www.cam.ac.uk的IP地址。然后有:

from nslookup import Nslookup

domain = "www.st-andrews.ac.uk"
server = "8.8.8.8"
server_test = "1.1.1.1"
server_cam = "128.232.132.8"

def verification_process(ip_address):
	dns_query = Nslookup(dns_servers=[ip_address])
	try:
		result = dns_query.dns_lookup(domain)
		return result
	except Exception as e:
		print(e)
		return False

result = verification_process(server)
result1 = verification_process(server_test)
result2 = verification_process(server_cam)

print("======Regarding Server 8.8.8.8=========")
print(result)
print(result.response_full)

print("======Regarding Server 1.1.1.1=========")
print(result1)
print(result1.response_full)

print("======Regarding Server 128.232.132.8=========")
print(result2)
print(result2.response_full)

result是个object,想看具体的内容需要result.response_full。最后的输出结果:

所以,可以看出来,只有用8.8.8.8,也就是Google的DNS服务器查询的时候,才可以查出来www.st-andrews.ac.uk对应的IP地址,其他的都查不出来。所以我们可以判断,IP 8.8.8.8是一个DNS服务器。

最后附上一份,把一个.txt文件里,所有的IP进行检测,看是否是DNS服务器。

import sys
from nslookup import Nslookup

domain = "www.st-andrews.ac.uk"

dns_list = []
not_dns_list = []

def read_file(path):
	text_ip_add = open(path,'r')
	detail_ip_add = text_ip_add.readlines()
	content = []
	for i in detail_ip_add:
		i = i.strip('\n')
		i = i.strip(' ')
		content.append(i)
	text_ip_add.close()
	return content

def dns_verify(ip_address):
	dns_query = Nslookup(dns_servers=[ip_address])
	try:
		result = dns_query.dns_lookup(domain)
		if len(result.response_full) > 0:
			dns_list.append(ip_address)
		else:
			not_dns_list.append(ip_address)
	except Exception as e:
		print(ip_address,"with Exception",e)

def verification_process(content):
	for i in content:
		dns_verify(i)
	print("dns_list is:",dns_list)
	print("not_dns_list is:", not_dns_list)


file_path = sys.argv[1]
content = read_file(file_path)
verification_process(content)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值