Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将DNS查询发送到Android中的域_Android_Sockets_Dns_Datagram - Fatal编程技术网

将DNS查询发送到Android中的域

将DNS查询发送到Android中的域,android,sockets,dns,datagram,Android,Sockets,Dns,Datagram,我正在尝试向www.google.com发送DNS查询消息,以获取DNS记录。我阅读了这篇文章以了解DNS查询的结构 我将缓冲区消息创建为: private static final byte[] RequestPacket = { // Transaction ID: 0x0000 0x00, 0x00, // Flags: 0x0000 (Standard query) 0x00, 0x00

我正在尝试向www.google.com发送DNS查询消息,以获取DNS记录。我阅读了这篇文章以了解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(receivepacket)时,我无法收到任何响应(
SocketTimeoutException
发送数据包后

我想我弄乱了发送包的端口,但在搜索了谷歌很长时间后,我找到了用于查询DNS的端口

谁能告诉我我到底做错了什么


谢谢

InetAddress.getByName()
为您执行DNS查询并返回指定主机的IP地址(主机可能有多个IP地址,如果您需要,请全部使用
getAllByName()

在您的示例中,
getByName(“www.google.com”)
返回谷歌HTTP服务器的IP地址,而不是DNS服务器。无法将DNS查询发送到HTTP服务器。这就是你没有得到回复的原因


如果您真的想发送自己的DNS查询,您需要将它们定向到真正的DNS服务器,如Wifi/蜂窝网络提供商提供的服务器(请参阅),或第三方DNS服务器(如)。

谢谢您的回复。实际上,当我查询一个域时,我需要的不仅仅是一个字段,这就是为什么InetAddress是不够的。另外,我把地址改成了谷歌DNS服务器(8.8.8.8),它似乎可以工作。请注意,我必须在最后添加输入RequestPacket才能使其工作。我知道这是一个老问题,但发送您自己的DNS查询而不是随机字节数组的目的是什么?