背景
在撸爬虫,但目标网站上了cloudflare。很奇怪,电浏览器能正常打开,但java程序里请求却需要验证码。刚开始以为是缺了某个请求头,但折腾了半天,没有找到cloudflare的验证逻辑。不过要是那么容易就找到,那人家也防不了ddos了。
曲线救国
既然cloudflare有防御,那就绕过CF直接请求原站。
想到了域名的历史解析,翻了一会后找到了疑似原站的IP。修改电脑的host文件,让域名直接指向原站ip,测试后发现这个ip确实是目标网站的原站。
问题
虽然解决了cloudflare的问题,但不太想每次部署一个新服务器就改一次服务器的host文件,而是希望程序能够自动解析域名成目标网站原服务器IP。
用java原生的方法也能做到,使用java.net.InetAddress这个类可以动态的设置DNS解析的值。
但还发现了个库,对InetAddress相关类进行了封装,还是阿里爸爸的,使用上会比原生类方便些。
maven
springboot项目,pom文件引入库的坐标:
com.alibaba
dns-cache-manipulator
1.5.1
使用上只需要修改程序里的DNS缓存即可:DnsCacheManipulator.setDnsCache("域名", "IP");
简单的测试了下,能够动态的修改DNS解析的ip值,并且在jvm销毁前能一直保持。
本文由 visionki 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Oct 18, 2020 at 04:02 pm