工作中,公司拥有一个内网导航,但内建的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
。愉快的连接上了英特网。