如果我有一个域及其IP地址的列表,如何跳过DNS请求?scans.io提供了一个域及其IP的列表,我想使用该列表,而不是向DNS服务器发送查询。有没有可能不设置我自己的dns服务器?
编辑:原因是我有一个很大的文件,他们的IP与百万的域名,我想尽快抓取他们,而不是被禁止从DNS服务器。
发布于 2016-04-19 22:22:14
如果使用InetAddress.getByName(String) (javadoc),则可以提供IP地址的DNS名称或字符串表示形式。在后一种情况下,该方法不会执行不必要的DNS查找。
当一个IP有多个站点时会发生什么?如果我没记错的话,这是可能的,仅仅给出IP地址是不够的。
网站由URL标识,而不仅仅是DNS名称或IP地址。URL为您提供主机名或IP地址,以及要使用的协议、端口号和路径。它们中的任何一个都可能导致您的HTTP请求被定向/重定向到不同的“站点”...不管那是什么意思。
基本上,连接到“站点”的过程如下所示:
如果在相同的IP地址+端口上有多个“站点”(例如,因为多个主机名解析到相同的IP),则服务器会根据开始行(以及可能的其他HTTP标头)确定哪个“站点”应该响应。
如果您的目标是减少HTTP交互的DNS查找,那么最好的选择是配置客户端DNS缓存。详细信息因平台而异。谷歌可以帮你找到细节。
您还可以将DNS条目的大文件转换为"/etc/hosts“语法,并将本地解析器指向它。
发布于 2016-04-19 23:08:38
有几种可能性。
如果不需要限制从数据文件到特定Java进程的DNS查找,则可以将该列表添加到系统的“hosts”文件中。在何处查找该文件是特定于操作系统的,并且您必须考虑到,如果系统上运行的所有进程使用OS API调用从主机名解析IP,则它们将从主机文件中获得匹配的IP。
另一种选择是,如果您的Java VM支持,则将主机名解析器配置为使用常规DNS查找以外的其他数据源。Oracle的Java提供了这种可能性,您可以在网络属性文档的JNDI DNS service provider settings一节中找到该配置的文档。可能有点过时,但是this article还提供了一个完整的示例,告诉您如何使用sun.net.spi.nameservice中的NameService实现您自己的API。
发布于 2016-04-19 23:27:42
您不需要解释您认为需要DNS查找的数据想要做什么。如果您正在尝试在java中创建InetAddress对象,则可以调用InetAddress.getByAddress(host, addr)来构造InetAddress,而无需执行DNS查找。
参见[https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getByAddress(java.lang.String,%20byte[])](https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getByAddress(java.lang.String,%20byte[]%29)
要将地址转换为byte[],请调用InetAddress.getByName(addr).getAddress() (如果您知道它是有效地址)。它不会导致DNS查找。如果您不信任您的数据,您可能想要编写一个小函数来自己解析地址并构建一个字节数组。
https://stackoverflow.com/questions/36721009
复制相似问题