0

在关于 DNS 的 RFC 1035 中,它是这样写的:

4.2.2. TCP 使用情况

通过 TCP 连接发送的消息使用服务器端口 53(十进制)。消息以给出消息长度的两字节长度字段为前缀,不包括两字节长度字段。此长度字段允许低级处理在开始解析之前组装完整的消息。

我想用 TCP 发送一个 DNS 请求,但我不知道如何在 DNS 请求之前添加这两个字节。我尝试使用该代码:

from scapy.all import *

ip=IP(dst="216.239.32.10")

request = DNS(rd=1, qd=DNSQR(qname = "google.be", qtype="A")) #size = 27(dec) = 1b (hex)
twoBytesRequestSize = "\x1b\x00" 
completeRequest = str(request) + twoBytesRequestSize

SYN=ip/TCP(sport=RandNum(1024,65535), dport=53, flags="S", seq=42)
SYNACK=sr1(SYN)

ACK=ip/TCP(sport=SYNACK.dport, dport=53, flags="A", seq=SYNACK.ack, ack=SYNACK.seq + 1)
send(ACK)

DNSRequest = ip/TCP(sport=SYNACK.dport, dport=53, flags="PA", seq=SYNACK.ack, ack=SYNACK.seq + 1) / completeRequest
DNSReply = sr1(DNSRequest, timeout = 1)

但是我的 paquet 被解释为没有 DNS 层的简单 TCP 数据包。

您是否有在 DNS 请求之前添加这两个字节前缀的想法?

谢谢 !

4

1 回答 1

0

该解决方案使用大端表示法。\x00\x1b而不是\x1b\x00. 但是上面的其余代码是正确的。谢谢阿明。

于 2013-03-26T14:53:49.473 回答