无法通过 TCP 接收 DNS 查询



当我通过UDP向com名称服务器的根服务器发送DNS查询时,它运行得很好,但消息被截断了。当我通过TCP重试时,根服务器不会超时。

use std::net::TcpStream;
use std::io::Write;
fn main() {
let mut stream = TcpStream::connect("199.9.14.201:53")
.unwrap();
stream.write(&[251, 188, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 99, 111, 109, 0, 0, 2, 0, 1])
.expect("ugh");
let mut buf: [u8; 1000] = [1; 1000];
match stream.peek(&mut buf) {
Ok(..) => {
println!("{:?}", buf);
}
Err(e) => {
println!("{:?}", e);
}
}

println!("Hello, world!");
}

来自RFC 1035第4.2.2节:

通过TCP连接发送的消息使用服务器端口53(十进制(。这个消息的前缀是一个两字节长度字段,该字段提供消息长度,不包括两字节长度的字段。这个长度字段允许低级处理组装完整的消息在开始解析之前。

看起来您的代码没有包含所需的消息长度。因此,消息的前两个字节被视为长度,它描述的长度远大于您发送的长度。因此,服务器正在等待更多的数据。

最新更新