Я пытаюсь улучшить свое понимание системы DNS и не понимаю, как domaintools.com удается разрешить все DN, связанные с IP-адресом.
Поигравшись с копанием, я застрял.
Пример в домене dressupgames.com
используя dig ::
$ dig +short dressupgames.com
173.231.156.28
$ dig +short -x 173.231.156.28
28.24/29.156.231.173.in-addr.arpa.
$ dig +short 28.24/29.156.231.173.in-addr.arpa
67.215.65.132
$ dig +short -x 67.215.65.132
hit-nxdomain.opendns.com.
$ dig +short hit-nxdomain.opendns.com
67.215.65.132
Предположительно 173.231.156.28 - это псевдоним для 67.215.65.132 (?). Теперь с помощью веб-интерфейса DomainTools http://www.domaintools.com/research/reverse-ip/ я получаю обещание 129 результатов.
Как я могу найти эти результаты с помощью инструментов командной строки?
DNS не содержит механизма автоматического поиска IP-адреса для имени хоста. У него есть записи PTR, но они настраиваются вручную и в большинстве случаев не соответствуют записям A. Такие сайты, как domaintools.com, просто имеют большую базу данных всех обнаруженных ими прямых сопоставлений, и они запрашивают ее при поиске IP-адреса. Не гарантируется, что результаты будут полными или актуальными.
Я создатель host.io, который также показывает вам список всех доменов, размещенных на одном IP-адресе (вместе со списком доменов, которые ссылаются на домен, и т. д.). Например, вот список доменов, размещенных на том же IP-адресе, что и stackoverflow.com: https://host.io/stackoverflow.com
Как вы обнаружили, получение IP-адреса для одного домена - это лишь очень небольшая часть решения. Не существует единой команды или сценария, которые вы могли бы написать для этого - вам нужно создать свою собственную базу данных доменов с IP-адресами, что и делают DomainTools, мы и другие подобные нам.
Для начала нужно получить (или создать) список всех доступных доменных имен. Сейчас их около 250 миллионов. Следующим шагом будет преобразование всех этих доменов в IP-адрес. Затем вам нужно сохранить все эти пары домена и IP в базе данных, а затем вы можете запросить список всех доменов на одном IP. И затем вам нужно делать это регулярно, чтобы быть в курсе последних событий.
Чтобы дать полный пример, давайте создадим файл с 4 доменами и разрешим их по IP-адресам:
$ cat domains.txt
facebook.com
fb.com
stackoverflow.com
stackexchange.com
# Let's resolve the domains to IPs with dig - could use nslookup or similar
$ cat domains.txt | xargs -I% bash -c "dig +short % | tail -n1" > ips.txt
31.13.76.68
31.13.76.68
151.101.129.69
151.101.193.69
# Let's combine the domains and IPs using paste
$ paste domains.txt ips.txt > combined.tsv
$ cat combined.tsv
facebook.com 31.13.76.68
fb.com 31.13.76.68
stackoverflow.com 151.101.129.69
stackexchange.com 151.101.129.69
# Let's create a DB table and import the data, and write a query
# to find any domains in our dataset that are hosted on the same
# domain as stackoverflow.com
$ psql $DB_URL
=> create table details (domain text, ip text);
=> \copy details from ~/combined.tsv;
=> select domain from details where ip = (select ip from details where domain = 'stackoverflow.com');
domain
-------------------
stackoverflow.com
stackexchange.com
(2 rows)