ping出网页中所有连接中的ip

工作中,公司拥有一个内网导航,但内建的dns速度很慢,由于个人有科学上网查阅资料的需求,所以需要将首选DNS设置为114.114.114.114,次选DNS设置为8.8.8.8的需求。不跳过了公司的内网dns则无法在反问内网的网址。所以需要ping出内网中的所有ip设置到C:\Windows\System32\drivers\etc\hosts文件中。通过以下Java代码即可实现:

package com.company;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    private static final String baseUrl = "https://xxx.hao123.com/";
    public static void main(String[] args) {
        if (args != null && args.length > 0) {
            for (String url : args) {
                pingUrl(url);
            }
        } else {
            pingUrl(baseUrl);
        }
    }

    public static void pingUrl(String url) {
        try {
            Document document = Jsoup.connect(url).get();
            Element bodyElement = document.body();
            Elements aElements = bodyElement.getElementsByTag("a");
            for (Element element : aElements) {
                String ahref = element.attr("href");
                if (ahref.startsWith("http://"))
                    ahref = ahref.replace("http://", "");
                if (ahref.startsWith("https://"))
                    ahref = ahref.replace("https://", "");
                if (ahref.indexOf("/") > 0)
                    ahref = ahref.substring(0, ahref.indexOf("/"));
                ahref = ahref.replace(" ", "");
                //为空或者直接为ip的时候不处理
                if (ahref.equals("")||isIP(ahref)) continue;
                Runtime runtime = Runtime.getRuntime();
                Process mProcess = runtime.exec("ping " + ahref);
                InputStream inputStream = mProcess.getInputStream();
                BufferedReader mBufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
                String lin = null;
                while ((lin = mBufferedReader.readLine()) != null) {
                    String regex = "\\d+\\.\\d+\\.\\d+\\.\\d+";
                    Pattern pattern = Pattern.compile(regex);
                    Matcher matcher = pattern.matcher(lin);
                    if (matcher.find()) {
                        String ip = matcher.group(0);
                        //通过打印 ip地址  域名 在拷贝到C:\Windows\System32\drivers\etc\hosts文件中
                        System.out.println(ip + "  " + ahref);
                        break;
                    }
                }
                mBufferedReader.close();
                inputStream.close();
                mProcess.destroy();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 判断是否为ip
     * @param test
     * @return
     */
    private static boolean isIP(String test) {
        String regex = "\\d+\\.\\d+\\.\\d+\\.\\d+";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(test);
        return matcher.find();
    }
}

通过控制台完美得到以下信息

。。。
x.x.x.x sss.ccc.com
。。。

黏贴到C:\Windows\System32\drivers\etc\hosts文件中,dns设置为114.114.114.114,8.8.8.8 cmd执行ipconfig /flushdns。愉快的连接上了英特网。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

CAPTCHAis initialing...