JAVA程序内动态修改DNS解析
in 默认分类 with 0 comment 65 views

JAVA程序内动态修改DNS解析

in 默认分类 with 0 comment 65 views

背景

在撸爬虫,但目标网站上了cloudflare。很奇怪,电浏览器能正常打开,但java程序里请求却需要验证码。刚开始以为是缺了某个请求头,但折腾了半天,没有找到cloudflare的验证逻辑。不过要是那么容易就找到,那人家也防不了ddos了。

曲线救国

既然cloudflare有防御,那就绕过CF直接请求原站。

想到了域名的历史解析,翻了一会后找到了疑似原站的IP。修改电脑的host文件,让域名直接指向原站ip,测试后发现这个ip确实是目标网站的原站。

问题

虽然解决了cloudflare的问题,但不太想每次部署一个新服务器就改一次服务器的host文件,而是希望程序能够自动解析域名成目标网站原服务器IP。

用java原生的方法也能做到,使用java.net.InetAddress这个类可以动态的设置DNS解析的值。

但还发现了个库,对InetAddress相关类进行了封装,还是阿里爸爸的,使用上会比原生类方便些。

maven

springboot项目,pom文件引入库的坐标:

<!-- https://mvnrepository.com/artifact/com.alibaba/dns-cache-manipulator -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dns-cache-manipulator</artifactId>
    <version>1.5.1</version>
</dependency>

使用上只需要修改程序里的DNS缓存即可:

DnsCacheManipulator.setDnsCache("域名", "IP");

简单的测试了下,能够动态的修改DNS解析的ip值,并且在jvm销毁前能一直保持。

Responses