java根据ip查计算机名_java-获取网络中IP地址的所有主机名

查看InetAddress.getAllByName()的源代码,您会发现,如果提供的String是IP地址的文本表示形式,则实际上并没有进行DNS查询.它仅返回一个包含单个包含IP的InetAdddress对象的数组.他们甚至在该方法中添加了一个方便的注释:

// if host is an IP address, we won't do further lookup

如果只有JavaDoc如此清晰.它指出:“如果提供文字IP地址,则仅检查地址格式的有效性.” …我认为这并不能告诉您它不会被查找.

但是,考虑一下……在InetAddress的上下文中是有道理的-该类封装了一个IP地址……您只有一个.它确实需要可以满足您要求的getHostNames()和getAllCanonicalNames()(请注意复数)方法.我正在考虑打开一个问题/提交补丁.

也就是说,目前似乎没有内置的方法可以执行支持多个PTR记录的RDNS查询.所有其他查找方法都简单地从返回的第一条记录中剔除,这就是您所得到的.

您将不得不研究Java的第三方DNS库(对不起,我没有使用它们的经验).

编辑添加:我喜欢弄清楚事情.我没有一个拥有多个PTR记录进行测试的IP手持设备,但是应该可以解决这个问题.

import java.io.IOException;

import java.util.Properties;

import javax.naming.Context;

import javax.naming.NamingException;

import javax.naming.directory.Attribute;

import javax.naming.directory.Attributes;

import javax.naming.directory.InitialDirContext;

public class App

{

public static void main(String[] args) throws IOException, NamingException

{

Properties env = new Properties();

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");

InitialDirContext idc = new InitialDirContext(env);

String ipAddr = "74.125.225.196";

// Turn the IP into an in-addr.arpa name

// 196.225.125.74.in-addr.arpa.

String[] quads = ipAddr.split("\.");

StringBuilder sb = new StringBuilder();

for (int i = quads.length - 1; i >= 0; i--)

{

sb.append(quads[i]).append(".");

}

sb.append("in-addr.arpa.");

ipAddr = sb.toString();

Attributes attrs = idc.getAttributes(ipAddr, new String[] {"PTR"});

Attribute attr = attrs.get("PTR");

if (attr != null)

{

for (int i = 0; i < attr.size(); i++)

{

System.out.println((String)attr.get(i));

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值