Есть ли способ запросить наши внутренние записи DNS, чтобы обнаружить все записи CNAME, указывающие на конкретный сервер?
Изменить: мы - среда Windows, Server 2003.
Вы не указали, какая у вас среда, но если вы используете Unix, я думаю, что комбинация dig и grep должна работать. ns.example.com
должно быть имя хоста вашего сервера имен, example.com
- это домен, частью которого является ваш хост, а HOST - это хост, для которого вы хотите найти все записи CNAME. На самом деле это символ табуляции в команде grep, а не буквально <TAB>
(возможно, вам придется настроить строку grep).
Также ваш сервер имен должен быть настроен для передачи зон, детали которых будут зависеть от реализации.
dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'
Или, если вы работаете в Windows, вы можете использовать nslookup:
C:\> nslookup
> name ns.example.com
> ls -a example.com FILE
Это должно вывести все записи для домена example.com
который ns.example.com
"знает о" в ФАЙЛ. Затем вы можете использовать любой инструмент, который хотите отсортировать в текстовом файле, ища соответствующие CNAMES.
Или с этим непроверенный (но выглядит правильно) perl сценарий:
#!/usr/bin/perl
use Net::DNS;
($target, $zone) = @ARGV;
$res = new Net::DNS::Resolver;
foreach $rr ($res->axfr($zone)) {
print $rr->name."\n" if (($rr->type eq "CNAME") && ($rr->rdatastr eq $target."."));
}
Пара пунктов для полноты:
Если у вас есть доступ к конфигурации DNS, обнаружить эти данные довольно просто. Однако у любого может быть CNAME, указывающее на ваш сервер. Вы не сможете их отследить.
Как отметил @wombie, вы не можете выполнять обратный поиск для CNAMES. Для CNAMES нет эквивалента PTR, и даже если там, вероятно, будут существовать только некоторые записи. Быстрая проверка случайного выбора доменов покажет, что записи PTR часто не указывают на запись A. Точно так же при обратном поиске записей PTR для случайных адресов часто не удается найти соответствующую запись A.
РЕДАКТИРОВАТЬ: CNAME - не единственный способ создать псевдоним для системы. DNS позволяет нескольким записям A указывать на один и тот же адрес. Функционально это то же самое, что и добавление CNAME, но метод другой. Те же проблемы возникают и за пределами вашего домена. Для поиска различных записей A вы должны искать IP-адрес (а) рассматриваемой системы.
Протокол DNS не позволяет выполнять такого рода «обратный» поиск. Вам нужно будет выйти из протокола, например, используя предложения grep, предоставленные kce.
использовать powershell:
проверьте основное имя на вашем DNS-сервере Microsoft:
Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_AType -Filter "IPAddress = 'xx.xx.xx.xx (IP)'" -ComputerName mydnsservername
получить все cnames для этого хоста с вашего DNS-сервера Microsoft:
Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_CNAMEType -Filter "primaryname = 'primaryname из первого запроса, завершенного точкой.'" -ComputerName mydnsservername | выберите имя владельца, основное имя
dnscmd
для экспорта данных зоны:dnscmd a.ns.example.com /zoneexport zone.example.com some-filename-for-this-zone
CNAME
записи ресурсов, указывающие на имя целевого домена.