Разрешение доменного имени и IP-адрес
Разрешение доменного имени — это услуга, которая связывает доменное имя с IP-адресом веб-пространства, позволяя людям легко получить доступ к веб-сайту через зарегистрированное доменное имя; IP-адрес — это цифровой адрес, который идентифицирует сайт в Интернете. доменное имя используется вместо IP-адреса для идентификации сайта. Разрешение доменного имени — это процесс преобразования доменного имени в IP-адрес, который выполняется DNS-сервером (из энциклопедии Baidu).
Давайте сначала разберемся с двумя точками знаний
1. Доменное имя может одновременно соответствовать только одному IP-адресу.
2. Один IP-адрес может разрешать и связывать несколько доменных имен без ограничений.
Основываясь на приведенных выше знаниях, если мы знаем IP-адрес, как мы можем получить всю информацию о доменном имени, преобразованную в IP-адрес? Один из способов заключается в том, что Министерство промышленности и информационных технологий может открыть интерфейс запросов для запросов (я не знаю, будет ли он открыт?); другой способ, которым я собираюсь поделиться далее, — реализация краулера: reverse- проверять доменные имена на основе IP-адресов.
Принцип реализации
Принцип реализации на самом деле очень прост, и теперь есть веб-сайт для запроса доменного имени по IP-адресу, но необходимо ввести запрос IP-адреса, чтобы человек мог войти в систему. Я хочу реализовать автоматизацию программы запрос, так что я думаю о способе рептилии, просто, это поведение запроса симулятора, синтаксический анализ результатов запроса в список доменных имен, которые я хочу.
отsite.ip138.com
Например, открытьF12
, введите IP-запрос, наблюдайте за консольным запросом и смотрите информацию на рисунке ниже.
Адрес запроса:сайт.IP138.com/119.75.217.…
Метод запроса: ПОЛУЧИТЬ
Затем, проанализировав ответ, вы увидите, что информация о связанном доменном имени, показанная на странице, представляет собой красную рамку на рисунке ниже.Контент, если он может анализировать содержимое Response, доступ кВы можете получить список доменных имен, которые вы хотите.
Приведенный выше ответ представляет собой HTML-страницу, использующуюjsoup
для разбора HTML идеально.
что такое джсуп?
jsoup — это анализатор Java HTML, который может напрямую анализировать URL-адрес и текстовое содержимое HTML. Он предоставляет очень простой API для извлечения данных и манипулирования ими с помощью методов манипулирования, подобных DOM, CSS и jQuery.
//解析成Document对象
Document document = Jsoup.parse(result);
if (document == null) {
logger.error("Jsoup parse get document null!");
}
//根据ID属性“list”获取元素Element对象(有没有感觉很像jQuery?)
Element listEle = document.getElementById("list");
//根据class属性和属性值筛选元素Element集合,并通过eachText()遍历元素内容
return listEle.getElementsByAttributeValue("target", "_blank").eachText();
Содержание результата имитирует HTTP-запрос через httpclient
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
httpGet.setHeader("Accept-Encoding", "gzip, deflate");
httpGet.setHeader("Accept-Language", "zh-CN,zh;q=0.9");
httpGet.setHeader("Cache-Control", "max-age=0");
httpGet.setHeader("Connection", "keep-alive");
httpGet.setHeader("Cookie", "Hm_lvt_d39191a0b09bb1eb023933edaa468cd5=1553090128; BAIDU_SSP_lcr=https://www.baidu.com/link?url=FS0ccst469D77DpdXpcGyJhf7OSTLTyk6VcMEHxT_9_&wd=&eqid=fa0e26f70002e7dd000000065c924649; pgv_pvi=6200530944; pgv_si=s4712839168; Hm_lpvt_d39191a0b09bb1eb023933edaa468cd5=1553093270");
httpGet.setHeader("DNT", "1");
httpGet.setHeader("Host", host);
httpGet.setHeader("Upgrade-Insecure-Requests", "1");
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
String result = HttpUtils.doGet(httpGet);
Инструменты HTTP-запросов
public class HttpUtils {
private static Logger logger = LoggerFactory.getLogger(HttpUtils.class);
public static String doGet(HttpGet httpGet) {
CloseableHttpClient httpClient = null;
try {
httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000).setConnectionRequestTimeout(10000)
.setSocketTimeout(5000).build();
httpGet.setConfig(requestConfig);
HttpResponse httpResponse = httpClient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == 200 ||
httpResponse.getStatusLine().getStatusCode() == 302) {
HttpEntity entity = httpResponse.getEntity();
return EntityUtils.toString(entity, "utf-8");
} else {
logger.error("Request StatusCode={}", httpResponse.getStatusLine().getStatusCode());
}
} catch (Exception e) {
logger.error("Request Exception={}:", e);
} finally {
if (httpClient != null) {
try {
httpClient.close();
} catch (IOException e) {
logger.error("关闭httpClient失败", e);
}
}
}
return null;
}
}
Добавить контроллер
@RestController
public class DomainSpiderController {
private static Logger logger = LoggerFactory.getLogger(DomainSpiderController.class);
@Autowired
private DomainSpiderService domainSpiderService;
/**
* @param ip 119.75.217.109
* @return
*/
@RequestMapping("/spider/{ip}")
@ResponseBody
public List<String> domainSpider(@PathVariable("ip") String ip) {
long startTime = System.currentTimeMillis();
List<String> domains = domainSpiderService.domainSpiderOfIp138(ip);
if(domains == null || domains.size() == 0) {
domains = domainSpiderService.domainSpiderOfAizan(ip);
}
long endTime = System.currentTimeMillis();
logger.info("完成爬虫任务总耗时:{}s", (endTime - startTime) / 1000);
return domains;
}
}
Запустите приложение Spring Boot и войдите в браузер:http://localhost:8080/spider/119.75.217.109Возвращаемые результаты следующие:
Как насчет этого? Разве это не просто?
Оптимизация и улучшение: иногда данные о доменном имени, запрашиваемые только через один веб-сайт, могут быть неточными. Даже если данные невозможно запросить, мы не можем судить, кто из них прав. Поэтому результаты сканирования нескольких веб-сайтов можно объединить и использовать, например:dns.aizhan.com
Задайте вопрос: Как эти веб-сайты, которые предоставляют поиск доменного имени на основе IP Reverse? Я консультировался с другими людьми, и их ответ состоит в том, что эти веб-сайты собирают много переписки между IP и доменными именами. Это реальная ситуация?
Пример исходного кода
- domain-spider
Код загружен на码云
иGithub
Добро пожаловать, скачивайте и изучайте