java - 如何在不使用内置库函数 InetAddress.getbyName() 的情况下获取任何主机的 IP 地址?

标签 java sockets dns

我正在制作自己的迭代 DNS 解析器,我需要主机的 ip 才能使用...但是 Datagrampacket 需要 InetAddresstype 对象。所以我不得不使用库函数。

InetAddress ipAddress = InetAddress.getByName(DNSAddress);
....
//some code
....
DatagramPacket dnsReqPacket = new DatagramPacket(dnsFrame, dnsFrame.length,             ip, DNSServerPort);
....
//some code

所以,我在想是否可以在不使用 inetAddress 库的情况下创建我自己的 getbyName() 函数?

最佳答案

您可以使用 java.net.InetAddress.getByAddress(byte[]) .它根据地址的原始(网络)表示形式创建一个 InetAddress 对象。

该方法的命名相当困惑,因为它与 gethostbyaddr 不同。 ,它执行反向查找:

This method doesn't block, i.e. no reverse name service lookup is performed.

使用 getByAddressDatagramPacketDatagramSocket 创建的 InetAddress 不一定会触发名称解析,或者,因此不存在无限递归的风险(以防 Java 实现尝试使用您自己的 DNS 实现执行名称解析)。

关于java - 如何在不使用内置库函数 InetAddress.getbyName() 的情况下获取任何主机的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55195776/

相关文章:

java - 需要对此 Java 语法的解释

java - C# 中用于 Java DES 加密的等效代码?

java - 无法使用 JAVA 将击键发送到 hyper-V 上的 VM

c++ - C++中的事件调度

linux - 如何让两台服务器使用子域 URL 相互通信?

dns - 使用带有自定义 Google 域的 GitHub 页面时出现空白网页

java - Java VM EXCEPTION_ACCESS_VIOLATION 的可能原因?

sockets - 如何调试以下 Go 代码,它试图与 IP 地址和端口建立 TCP 连接?

c# - 最好在依赖网络的代码中使用 IP 地址或主机名?

c# - 如何在C#中通过TCP/IP发送大文件(500MB-1GB)?