Zapytanie DNS dla CNAME dla serwera

Odpowiedzi:

6

Nie określiłeś, jakie jest twoje środowisko, ale jeśli używasz Uniksa, myślę, że kombinacja dig i grep powinna działać. ns.example.compowinna być nazwą hosta serwera nazw, example.comjest domeną, której częścią jest twój host, a HOST to host, dla którego chcesz znaleźć wszystkie rekordy CNAME. W rzeczywistości jest to znak tabulacji w poleceniu grep, a nie dosłownie <TAB>(może być konieczne dostosowanie ciągu grep).

Twój serwer nazw musi również zostać skonfigurowany, aby umożliwić transfery stref, których szczegóły będą zależały od implementacji.

dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'

Lub jeśli korzystasz z systemu Windows, możesz użyć nslookup :

C:\> nslookup
> name ns.example.com
> ls -a example.com FILE

Powinno to wygenerować wszystkie rekordy dla domeny, example.comktóra ns.example.com„wie o”, do PLIKU. Następnie możesz użyć dowolnego narzędzia, które chcesz posortować w pliku tekstowym, szukając odpowiednich CNAMES.

Lub z tym nieprzetestowanym (ale pozornie poprawnym) skryptem perla :

#!/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."."));
}

Kilka punktów za kompletność:

  • Jak stwierdził @womble, nie ma odpowiednika rekordu PTR dla CNAME. Będziesz musiał użyć świadomości kontekstowej, sortując wszystkie informacje o strefie dla CNAMES, które odpowiadają rekordom A twojego hosta.
  • Działa to tylko na serwerze DNS (i jeśli masz uprawnienia do wyświetlania informacji o strefie). Nie ma możliwości „śledzenia” CNAMES dla twojego hosta, który należy do innych stref.
  • Jak stwierdza @BillThor, istnieją inne sposoby aliasu nazwy hosta poza CNAMES. Znowu będziesz potrzebować pewnej świadomości kontekstowej.

źródło
Pytanie zaktualizowane, korzystamy z systemu Windows.
PhilPursglove
4

Jeśli masz dostęp do konfiguracji DNS, odkrywanie tych danych jest dość proste. Jednak każdy może mieć CNAME wskazujący na twój serwer. Nie będziesz w stanie ich wyśledzić.

Jak zauważył @wombie, nie można przeprowadzić wstecznego wyszukiwania CNAMES. Nie ma odpowiednika PTR dla CNAMES, a nawet jeśli istnieje prawdopodobieństwo, że istnieją tylko niektóre rekordy. Szybkie sprawdzenie losowego wyboru domen wykazałoby, że rekordy PTR często nie wskazują na rekord A. Podobnie podczas wyszukiwania wstecznego rekordów PTR dla losowych adresów często nie można znaleźć odpowiedniego rekordu A.

EDYCJA: CNAME to nie jedyny sposób na alias systemu. DNS pozwala wielu rekordom A wskazywać ten sam adres. Funkcjonalnie jest to to samo, co dodanie CNAME, ale metoda jest inna. Te same problemy dotyczą poza domeną. Aby wyszukać różne rekordy A, należy wyszukać adresy IP danego systemu.

BillThor
źródło
3

Protokół DNS nie pozwala na wykonanie tego rodzaju „wstecznego” wyszukiwania. Musisz wyjść poza protokół, na przykład korzystając z sugestii grep dostarczonych przez kce.

womble
źródło
2

użyj PowerShell:

sprawdź nazwę podstawową na serwerze Microsoft DNS:

Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_AType -Filter "IPAddress = 'xx.xx.xx.xx (IP)'" -ComputerName mydnsservername

pobierz wszystkie nazwy dla tego hosta z serwera Microsoft DNS:

Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_CNAMEType -Filter "nazwa_podstawowa = 'nazwa_podstawowa od pierwszego zapytania zakończonego kropką.'” -ComputerName nazwa_serwera_dresora | wybierz nazwę użytkownika, nazwa_podstawowa

Josef Aschauer
źródło
1
  1. Znajdź wszystkie strefy obsługiwane przez twoje maszyny.
  2. Dla każdej strefy użyj, dnscmdaby wyeksportować dane strefy:
    dnscmd a.ns.example.com / zoneexport zone.example.com some-filename-for-this-zone
  3. Wyszukaj w eksportowanych plikach CNAMErekordy zasobów wskazujące nazwę docelowej domeny.
JdeBP
źródło