我是靠谱客的博主 俊逸枕头,最近开发中收集的这篇文章主要介绍爬虫获取主机IP地址 解决由于DNS劫持无法访问网站的问题原文地址DNS查询项目说明环境要求项目代码资源下载地址运行方法项目地址,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

原文地址

BY Jason

文章目录

  • 原文地址
  • DNS查询
  • 项目说明
  • 环境要求
    • JDK8解决方案示例
  • 项目代码
    • Jsoup抓取数据
    • 解析数据
    • 选取封装最优地址
  • 资源下载地址
  • 运行方法
    • 打开浏览器,访问`127.0.0.1:10010`页面
  • 项目地址

DNS查询

DNS查询地址:https://www.dnsce.com/
在这里插入图片描述

本项目只针对DNS问题的解决方案

项目说明

  1. 使用Java爬取https://www.ipaddress.com/来获取对应域名的IP地址
  2. 通过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解决方案示例

  1. 对于JDK1.8版本但低于1.8.0_151版本的JDK
    将下载的包里的local_policy.jarUS_export_policy.jar直接覆盖替换本地 {JAVA_HOME}jrelibsecurity中的两文件即可。
  2. 1.8.0_151以后的版本,修改{JAVA_HOME}jrelibsecurityjava.security文件,不注释crypto.policy=unlimited。
  3. 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查询项目说明环境要求项目代码资源下载地址运行方法项目地址所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部