上篇文章通过Java自带的inetAddress类我们知道只能获取到单个ip地址,
这种方法是不适用与大多数情况的,因为大多数情况下我们的一个域名可能会映射到多个nginx主机ip
1.通过maven依赖jar包
<!--dns地址解析工具包-->
<dependency>
<groupId>org.xbill</groupId>
<artifactId>dnsjava</artifactId>
<version>2.0.8</version>
</dependency>
如果只依赖了aliyun的中央仓库是没法直接下载成功的 因为该包的仓库位置并不在中央仓库中
针对这种情况需要我们下载源码然后将该jar发布到我们私有的中央仓库进行使用
可参考我的这篇文章https://mp.csdn.net/postedit/90721499
将jar发布到公司私有的中央仓库中再进行依赖使用
2.jar包依赖成功后就可以使用下面的代码获取对应域名的ip列表
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.TextParseException;
import org.xbill.DNS.Type;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
public class NXLookUP {
private static final Logger logger = LoggerFactory.getLogger(NXLookUP.class);
public static void main(String[] args) throws UnknownHostException, TextParseException {
urlToIp("baidu.com");
}
/**
* 通过域名获取远程地址ip集合
* @param url
* @return
*/
public static List<String> urlToIp(String url) {
ArrayList<String> ipList = new ArrayList<>();
Lookup lookup ;
try {
lookup = new Lookup(url, Type.A);
lookup.run();
if (lookup.getResult() != Lookup.SUCCESSFUL) {
logger.error("ERROR: " + lookup.getErrorString());
return null;
}
Record[] answers = lookup.getAnswers();
int i = 1;
for (Record rec : answers) {
logger.info("解析出ip地址{}>>>>>{}",i++,rec.rdataToString());
ipList.add(rec.rdataToString());
}
} catch (TextParseException e) {
e.printStackTrace();
}
return ipList;
}
}
3.运行结果
如果有更好的方法,欢迎大家在留言区评论指正