Você não especificou qual é o seu ambiente, mas se estiver usando o Unix, acho que uma combinação de dig e grep deve funcionar. ns.example.com
deve ser o nome do host do seu servidor de nomes, example.com
é o domínio do qual seu host faz parte e HOST é o host para o qual você deseja localizar todos os registros CNAME. Na verdade, é um caractere de tabulação no comando grep, não literalmente <TAB>
(talvez você precise ajustar a sequência do grep).
Além disso, seu servidor de nomes precisa ser configurado para permitir transferências de zona, cujos detalhes serão dependentes da implementação.
dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'
Ou, se estiver no Windows, você pode usar o nslookup :
C:\> nslookup
> name ns.example.com
> ls -a example.com FILE
Isso deve exibir todos os registros do domínio example.com
que ns.example.com
"conhece" para FILE. Você pode então usar qualquer ferramenta que você queira ordenar através do arquivo de texto procurando pelo CNAMES correspondente.
Ou com este não testado (mas aparentemente com aparência correta) perl script :
#!/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."."));
}
Alguns pontos para completar:
- Como afirmado @womble, não há equivalente de um registro PTR para um CNAME. Você terá que usar algum conhecimento contextual classificando todas as informações de zona para o CNAMES que correspondem aos registros A do seu host.
- Isso só funciona para o seu servidor DNS (e se você tiver permissão para visualizar as informações da zona). Não há como "rastrear" o CNAMES para seu host que pertença a outras zonas.
- Como afirma @BillThor, há outras maneiras de aliases um nome de host além do CNAMES. Mais uma vez, você precisará de alguma consciência contextual.