【发布时间】:2016-07-25 07:40:21
【问题描述】:
我正在尝试向 www.google.com 发送 DNS 查询消息以获取 DNS 记录。我阅读了this 文章以了解DNS 查询的结构。
我将缓冲区消息创建为:
private static final byte[] RequestPacket = {
// Transaction ID: 0x0000
0x00, 0x00,
// Flags: 0x0000 (Standard query)
0x00, 0x00,
// Questions: 1
0x00, 0x01,
// Answer RRs: 0
0x00, 0x00,
// Authority RRs: 0
0x00, 0x00,
// Additional RRs: 0
0x00, 0x00,
// Queries
// Name: www.google.com
0x03, 0x77, 0x77, 0x77, 0x06, 0x67, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x03, 0x63,
0x6F, 0x6D, 0x00,
// Type: A Record
0x00, 0x01
};
这就是我创建发送、接收数据包和套接字的方式:
DatagramPacket sendPacket = new DatagramPacket(RequestPacket , RequestPacket .length, InetAddress.getByName("www.google.com"), 9876);
DatagramPacket recievePacket = new DatagramPacket(mBuffer, mBuffer.length);
DatagramSocket socket = new DatagramSocket();
发送数据包后拨打socket.receive(recievePacket);时,我无法收到任何回复(SocketTimeoutException)
我想我弄乱了我发送数据包的端口,但在谷歌搜索了很长时间后,我发现这是查询 DNS 的端口。
谁能告诉我我到底做错了什么?
谢谢
【问题讨论】:
标签: android sockets dns datagram