我正尝试制作一个DNS跟踪器,以跟踪dns请求到达目的地的路径,以确保它未被重定向或劫持。使用dnstraceroute
工具,一切正常,我可以检测到我所进行的演示dns欺骗攻击。我使用scapy编写了此代码,以执行相同的操作:
from scapy.all import *
import time
for i in range(1, 28):
pkt = IP(dst='8.8.4.4', ttl=i) / UDP(sport=RandShort(),dport=53)/DNS(id = 102, qd=DNSQR(qname="www.google.com"))
# Send the packet and get a reply
reply = sr1(pkt, verbose=0)
if reply is None:
# No reply =(
print(i+ " ======[-]=====")
elif reply.type == 3:
# Destination Unreachable Message
print ("Done!", reply.src)
break
else:
# We're somewhere in the middle
print ("%d hops away: " % i , reply.src)
time.sleep(1)
它工作正常,我可以按预期看到路径。但是,当我将dns查询重定向到我的攻击者计算机时,我无法检测到重定向。我网络中的原始dns服务器使用ICMP数据包响应第一个dns数据包(ttl值为1),甚至认为攻击者机器之前已收到该数据包。但是,再次使用dnstraceroute
工具,攻击者的机器会对这个数据包做出响应,我可以在输出中看到它的地址。
我打开了Wireshk并试图在数据包之间寻找一些不同的东西,但是它们完全相同。Here is the DNS packet which generated by my script和Here is the Dns packet which sent by dnstraceroute
。
我不知道有什么区别。预先感谢!