首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我有IP地址,则跳过使用Java进行DNS查询

问如果我有IP地址,则跳过使用Java进行DNS查询
EN

Stack Overflow用户
提问于 2016-04-19 22:14:58
回答 3查看 1.7K关注 0票数 1

如果我有一个域及其IP地址的列表,如何跳过DNS请求?scans.io提供了一个域及其IP的列表,我想使用该列表,而不是向DNS服务器发送查询。有没有可能不设置我自己的dns服务器?

编辑:原因是我有一个很大的文件,他们的IP与百万的域名,我想尽快抓取他们,而不是被禁止从DNS服务器。

EN

回答 3

Stack Overflow用户

发布于 2016-04-19 22:22:14

如果使用InetAddress.getByName(String) (javadoc),则可以提供IP地址的DNS名称或字符串表示形式。在后一种情况下,该方法不会执行不必要的DNS查找。

当一个IP有多个站点时会发生什么?如果我没记错的话,这是可能的,仅仅给出IP地址是不够的。

网站由URL标识,而不仅仅是DNS名称或IP地址。URL为您提供主机名或IP地址,以及要使用的协议、端口号和路径。它们中的任何一个都可能导致您的HTTP请求被定向/重定向到不同的“站点”...不管那是什么意思。

基本上,连接到“站点”的过程如下所示:

  1. 将主机名(或IP地址字符串)转换为一个地址,然后(根据协议和URL端口号中的可选显式端口号)计算出端口号。
  2. 客户端打开一个到上面确定的IP /端口的
  3. 连接
  4. URL会发送到服务器,监听HTTP行中的IP /端口。

如果在相同的IP地址+端口上有多个“站点”(例如,因为多个主机名解析到相同的IP),则服务器会根据开始行(以及可能的其他HTTP标头)确定哪个“站点”应该响应。

如果您的目标是减少HTTP交互的DNS查找,那么最好的选择是配置客户端DNS缓存。详细信息因平台而异。谷歌可以帮你找到细节。

您还可以将DNS条目的大文件转换为"/etc/hosts“语法,并将本地解析器指向它。

票数 1
EN

Stack Overflow用户

发布于 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。

票数 1
EN

Stack Overflow用户

发布于 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查找。如果您不信任您的数据,您可能想要编写一个小函数来自己解析地址并构建一个字节数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36721009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档