1

Я пытаюсь лучше понять различные инструменты сетевых запросов, такие как nc , curl , whois , dig , nslookup и в то же время немного больше об архитектуре интернет-запросов, серверов и тому подобного (NIC, A Record, MX), хотя уже немного знаком с TCP, серверами имен, регистраторами доменов, анализаторами пакетов, HTTP-заголовками и IP-адресами. Это мое прошлое, вот мой вопрос.

Когда я dig или whois , скажем, www.valgrind.org (или valgrind.org), я получаю как минимум два разных IP-ответа: 178.250.76.80 и 172.16.0.23 # 53.

$ nslookup valgrind.org
Server:         172.16.0.23
Address:        172.16.0.23#53

Non-authoritative answer:
Name:   valgrind.org
Address: 178.250.76.80

Попытка поиска любого из них в w3m или chromium приводит к ошибке 403 Forbidden . Кроме того, я не уверен, к какому из них перейти, но ping каким-то образом способен это выяснить! Если я пингую ping valgrind.org (или ping www.valgrind.org), он выбирает

$ ping valgrind.org
PING valgrind.org (178.250.76.80) 56(84) bytes of data.
64 bytes from 178.250.76.80: icmp_req=1 ttl=50 time=80.2 ms

Откуда он это знает? И какой еще инструмент я должен использовать, чтобы узнать, как мой браузер переходит с 178.250.76.80 на valgrind.org и что-то загружает?

4 ответа4

4

Здесь работают разные программы и протоколы, каждая из которых настроена на ответ независимо от других.

Чтобы найти IP-адрес, хост linux обычно использует директиву hosts: в /etc/nsswitch.conf, чтобы определить, в каком порядке следует запрашивать различные источники. Типичная запись будет

hosts:      files dns

который говорит, проверьте файлы (обычно /etc/hosts ), а затем систему DNS. Поэтому будет произведен поиск файла /etc/hosts, и если он содержит запись для valgrind.org, будет возвращен соответствующий IP-адрес. Если /etc/hosts не содержит записи для valgrind.org, то в DNS будет сделан запрос. Это включает чтение содержимого файла /etc/resolv.conf, чтобы определить, с какими серверами следует связаться для запроса информации DNS ...

Глядя на вывод вашей команды, вы не получаете два разных адреса. Первая часть вывода сообщает вам, с каким сервером связывался nslookup (172.16.0.23), а также по какому порту (# 53) получить ответ. Мы также знаем, что нет правильно настроенной записи PTR для 172.16.0.23, поскольку, как показывает ответ RobM, Сервер будет отображаться как имя, если бы оно было.

Вторая часть вывода - это информация, которую вы запросили, и сообщает, что 178.250.76.80 - это IPv4-адрес valgrind.org.

Когда вы обращаетесь к 178.250.76.80 через порт 80 (http) напрямую, вы получаете запрет 403, потому что именно так настроен http-сервер по этому адресу. Скорее всего, он настроен как виртуальный сервер на основе имени и поэтому требует действительный заголовок http Host: (sec 14.23) для направления вашего запроса к соответствующему vhost.

Команда ping является частью набора протоколов ICMP и является эхо-запросом ICMP, узел 178.250.76.80 отвечает на эхо-запрос, поскольку он настроен на это, и отправляет эхо-ответ ICMP на каждый эхо-запрос.

1

Вы неправильно понимаете вывод nslookup. Он не дает два ответа, а только один. Первый адрес, откуда он получил ответ. ping выполняет точно такую же задачу и получает точно такой же результат. Причина, по которой вы получаете 403 при попытке дать IP-адрес браузеру, заключается в том, что на сервере работает виртуальный хостинг. С помощью виртуального хостинга сервер может иметь несколько сайтов с одним IP-адресом. Он решает, какой сайт будет обслуживать вас, основываясь на имени, которое браузер сообщает, что вы ввели. Когда вы вводите IP-адрес, сервер не знает, какой сайт вы хотели.

1

Вам нужно понять, как работает nslookup.

Nslookup

Первая часть ответа, как должно быть понятнее, - это сервер имен, с которым вы разговариваете. Ответ, который он дает, является второй частью

Поэтому в моем примере я прошу nslookup запросить у моего сконфигурированного в настоящее время DNS-сервера, где, по его мнению, находится www.serverfault.com.

nslookup отвечает адресом сервера, который он использовал для выполнения запроса, и ответом, который он дал. Это важно, если вы указываете определенный DNS-сервер для запуска dig или nslookup, что является довольно обычной частью устранения проблем с разрешением имен.

0

это будет зависеть от вашей ОС и версии ping. если это Linux, вы можете узнать все, что делает, используя strace.

strace ping valgrind.org

шаг за шагом это покажет вам. слишком долго для публикации, но вот мой вывод, так что я знаю, что в какой-то момент он проверяет файл hosts

,

.
.
open("/etc/host.conf", O_RDONLY)        = 3
.
.
.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .