我使用 python 套接字发送 DNS 查询数据包套接字并监听响应。socket.recvfrom(2048)
最后,我按预期得到了函数的DNS响应包。但奇怪的是,我将响应数据包与 Wireshark 抓取的数据包进行比较,发现存在很多差异。
3f
在第二张图片中会发现差异。
Wireshark爬取的DNS响应包(高亮部分)
收到的DNS响应包socket.recvfrom(2048)
创建插座零件代码:
ipv = check_ip(dst)
udp = socket.getprotobyname(Proto.UDP)
if ipv == IPV.ERROR:
return None
elif ipv == IPV.IPV4:
return socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
elif ipv == IPV.IPV6:
return socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, udp)
else:
return None
接收 DNS 响应数据包部分代码:
remained_time = 0
while True:
remained_time = self.timeout - timeit.default_timer() + sent_time
readable = select.select([sock], [], [], remained_time)[0]
if len(readable) == 0:
return (-1, None)
packet, addr = sock.recvfrom(4096)