java通过LookUp获取域名映射的所有ip地址列表

上篇文章通过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.运行结果

如果有更好的方法,欢迎大家在留言区评论指正

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Aggregation和lookup是MongoDB中的两个操作符,用于进行多字段匹配连表查询。在Java中可以使用MongoDB的Java Driver库来实现这些操作。 首先,我们需要创建一个MongoClient实例,并选择要操作的数据库和集合: ```java MongoClient mongoClient = new MongoClient("localhost", 27017); MongoCollection<Document> ordersCollection = mongoClient.getDatabase("mydb").getCollection("orders"); ``` 接下来,我们可以使用Aggregation操作符来进行多字段匹配查询。例如,我们可以根据订单号和客户ID来查询订单项: ```java List<Bson> pipeline = Arrays.asList( Aggregates.match(Filters.eq("customer_id", customer_id)), Aggregates.lookup("order_items", "order_id", "_id", "items"), Aggregates.unwind("$items"), Aggregates.match(Filters.eq("items.product_id", product_id)) ); AggregateIterable<Document> result = ordersCollection.aggregate(pipeline); ``` 在这个例子中,我们首先使用match操作符来筛选出客户ID为指定值的订单。然后,我们使用lookup操作符来连接order_items集合,并将它们映射到订单项数组中。接下来,我们使用unwind操作符将订单项数组展开为单独的文档对象,并使用match操作符来筛选出指定产品ID的订单项。 另外,我们也可以使用lookup操作符来进行多字段匹配查询。例如,我们可以根据订单项中的产品ID和供应商ID来查询产品信息: ```java List<Bson> pipeline = Arrays.asList( Aggregates.match(Filters.eq("supplier_id", supplier_id)), Aggregates.lookup("products", "product_id", "_id", "product"), Aggregates.unwind("$product"), Aggregates.match(Filters.and( Filters.eq("product.product_id", product_id), Filters.eq("product.supplier_id", supplier_id) )) ); AggregateIterable<Document> result = ordersCollection.aggregate(pipeline); ``` 在这个例子中,我们首先使用match操作符来筛选出供应商ID为指定值的订单项。然后,我们使用lookup操作符来连接products集合,并将它们映射到产品文档对象中。接下来,我们使用unwind操作符将产品文档对象展开为单独的文档对象,并使用match操作符来筛选出指定产品ID和供应商ID的产品信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值