概述
原文地址
BY Jason
文章目录
- 原文地址
- DNS查询
- 项目说明
- 环境要求
- JDK8解决方案示例
- 项目代码
- Jsoup抓取数据
- 解析数据
- 选取封装最优地址
- 资源下载地址
- 运行方法
- 打开浏览器,访问`127.0.0.1:10010`页面
- 项目地址
DNS查询
DNS查询地址:https://www.dnsce.com/
本项目只针对DNS问题的解决方案
项目说明
- 使用Java爬取https://www.ipaddress.com/来获取对应域名的IP地址
- 通过ping延迟时间(10次)选取最优的IP地址
环境要求
需要jdk1.8.0_162
以上版本
162
之上的版本已经将crypto.policy,默认设置为unlimited,忽略SSL证书不会报错。
javax.net.ssl. : Remote host closed connection during handshake
问题产生原因:
请求https地址需要安全认证,通过TLS握手建立连接,需要在服务器、客户机进行通讯认证。151之前的版本仅能支持TLSv1.2的AES128,所以我们需要对jdk的security包做拓展来支持。
扩展包下载地址:
jdk7:下载javase-jce7.jar
https://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
jdk8:下载javase-jce8.jar
https://www.oracle.com/java/technologies/javase-jce8-downloads.html
JDK8解决方案示例
- 对于JDK1.8版本但低于1.8.0_151版本的JDK
将下载的包里的local_policy.jar
和US_export_policy.jar
直接覆盖替换本地 {JAVA_HOME}jrelibsecurity中的两文件即可。 - 1.8.0_151以后的版本,修改{JAVA_HOME}jrelibsecurityjava.security文件,不注释crypto.policy=unlimited。
- jdk1.8.0_162 之上的版本已经将crypto.policy,默认设置为unlimited,不存在该问题。
项目代码
Jsoup抓取数据
SslUtils.ignoreSsl();
Connection conn = Jsoup.connect("https://ipaddress.com/website/github.com");
conn.header("referer", "https://www.ipaddress.com/");
conn.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
conn.header("Accept-Encoding", "gzip, deflate, sdch");
conn.header("Accept-Language", "zh-CN,zh;q=0.8");
conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
String content = conn.execute().body();
解析数据
Elements elements = Jsoup.parse(content).select("table[class=panel-item table table-stripes table-v]").get(0)
.select("tr").last().select("td ul li");
选取封装最优地址
//如果只有一个,就直接封装对象,如果有多个,去ping其中耗时最短的ip,再封装
if(elements.size() == 1){
hostVO = new HostVO(elements.get(0).text(),host);
}else{
List<IpPingVO> ipPingVOList = new ArrayList<>();
for (Element element : elements) {
String ip = element.text();
//ping 10次所用的平均时间
long ping10TimesAvg = URLUtil.ping10TimesAvg(ip);
ipPingVOList.add(new IpPingVO(ip,ping10TimesAvg));
}
//按ping的耗时正序排
ListUtil.sort(ipPingVOList, Comparator.comparing(IpPingVO::getPingTime));
//取第一个,也就是最小的耗时放入resultList
String bestIp = ipPingVOList.get(0).getIp();
hostVO = new HostVO(bestIp, host);
}
资源下载地址
JAR包下载
运行方法
正常运行【默认端口10010】
java -jar github-host.jar
指定端口参数【port】
java -jar github-host.jar --port=8080
打开浏览器,访问127.0.0.1:10010
页面
项目地址
https://gitee.com/feizhaiyou/github-host
最后
以上就是俊逸枕头为你收集整理的爬虫获取主机IP地址 解决由于DNS劫持无法访问网站的问题原文地址DNS查询项目说明环境要求项目代码资源下载地址运行方法项目地址的全部内容,希望文章能够帮你解决爬虫获取主机IP地址 解决由于DNS劫持无法访问网站的问题原文地址DNS查询项目说明环境要求项目代码资源下载地址运行方法项目地址所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复