Przejdź do treści głównej

Net::Whois - Scraper sprawdza dane o domenie przez RDAP i WHOIS

Przegląd scrapera

Przegląd scrapera

Dane o domenie są zbierane przez RDAP (HTTP, JSON), WHOIS (port 43) lub stronę internetową operatora — w zależności od strefy domenowej. Dla każdego TLD w scraperze zdefiniowane są serwery RDAP i WHOIS; jeśli dla danej strefy dostępny jest RDAP, zapytanie jest wykonywane w pierwszej kolejności przez niego, w przypadku błędu — przez WHOIS, a jeśli nie ma żadnego z nich — przez stronę WWW, o ile taka istnieje.

Zestaw metod sprawdzania zależy od operatora, a nie tylko od TLD. Niektóre strefy nie posiadają WHOIS lub RDAP, bądź one nie działają — tak zdecydował operator. Strona internetowa do sprawdzania również nie jest dostępna dla wszystkich: jej obecność także określa operator. Jeśli strona istnieje, scraper pobiera dane za jej pośrednictwem.

Istnieją strefy, w których operator zarządza tylko TLD, a strony są rejestrowane na SLD (drugi poziom, na przykład co.uk, org.uk). Właścicielem SLD może być jeden lub kilku podmiotów — ale nie jest to operator TLD. Zestaw metod sprawdzania określa już właściciel SLD: WHOIS, RDAP, strona WWW, ich kombinacja — lub żadna z nich.

Skład pól w WHOIS i RDAP również może się różnić — ze względu na przepisy prawa, politykę operatora i ograniczenia dotyczące danych osobowych. Jednak zestaw danych jest ogólnie przewidywalny: rejestracja, daty, NS, rejestrator, status.

Przy zbieraniu danych przez WWW nie ma standaryzacji. Zawsze sprawdzane jest, czy domena jest zarejestrowana, czy nie. Reszta zależy od tego, co operator umieścił na stronie: może to być niemal pełny zestaw danych, a może tylko sam fakt rejestracji.

Więcej informacji: RDAP (ang.), WHOIS.

Funkcjonalność A-Parser pozwala zapisywać ustawienia scrapowania do późniejszego wykorzystania (presety), ustalać harmonogram scrapowania i wiele więcej. Możesz korzystać z automatycznego mnożenia zapytań, podstawiania podzapytań z plików, iteracji kombinacji alfanumerycznych oraz list, aby uzyskać maksymalną możliwą liczbę wyników.

Zapisywanie wyników jest możliwe w dowolnej formie i strukturze, dzięki wbudowanemu potężnemu silnikowi szablonów Template Toolkit, który pozwala stosować dodatkową logikę do wyników i wyprowadzać dane w różnych formatach, w tym JSON, SQL i CSV.

Przypadki użycia scrapera

Zbierane dane

Poniższa lista to typowy zestaw dla WHOIS/RDAP; konkretne pola zależą od odpowiedzi serwera i przepisów prawa. Przy zbieraniu przez stronę WWW gwarantowane jest wypełnienie tylko faktu rejestracji; pozostałe pola — jeśli operator je publikuje.

  • $registered — czy domena jest zarejestrowana, czy nie
  • $expire_date — data wygaśnięcia rejestracji domeny
  • $creation_date — kiedy domena została zarejestrowana
  • $free_date — data zwolnienia domeny
  • $whoisserver — używany serwer WHOIS (przy zapytaniu WHOIS; przy RDAP często puste)
  • $rdapserver — URL serwera RDAP (przy udanym zapytaniu RDAP)
  • $registrar — rejestrator domeny
  • $updated_date — data ostatniej aktualizacji wpisu
  • $data — surowa odpowiedź: tekst WHOIS lub JSON RDAP
  • Tablica $ns (Name servers):
    • $ns.$i.server — nazwa serwera NS
  • Tablica $statuses (Statuses list):
    • $statuses.$i.status — status domeny

Możliwości

  • Automatyczny wybór RDAP lub WHOIS na podstawie strefy domenowej (priorytet RDAP)
  • Jeśli strefa nie posiada działającego WHOIS/RDAP, ale ma stronę WWW operatora — sprawdzenie odbywa się przez nią
  • Skład pól WHOIS/RDAP zależy od odpowiedzi serwera i ustawodawstwa
  • Przy zbieraniu przez stronę WWW zawsze sprawdzane jest istnienie domeny; pozostałe pola — tylko jeśli operator je udostępnia
  • Niektóre strefy (TLD i SLD) nie posiadają ani WHOIS/RDAP, ani strony internetowej — dane WHOIS są niedostępne, ale istnienie domeny jest sprawdzane przez Net::DNSNet::DNS
  • Obsługa domen międzynarodowych (IDN, np. яндекс.рф)

Zastosowania

  • Zbieranie wolnych domen lub tych, które wkrótce zostaną zwolnione
  • Zbieranie listy serwerów NS
  • Pobieranie statusów domen

Zapytania

Jako zapytania należy podawać domenę szukanej strony, na przykład:

a-parser.com  
yandex.ru
google.com
vk.com
facebook.com

Opcje wyprowadzania wyników

A-Parser obsługuje elastyczne formatowanie wyników dzięki wbudowanemu silnikowi szablonów Template Toolkit, co pozwala na wyprowadzanie wyników w dowolnej formie, a także w formie strukturalnej, np. CSV lub JSON

Wynik domyślny

Format wyniku:

$query - registered: $registered, expire: $expire_date, creation: $creation_date

W wyniku wyświetlana jest domena, informacja czy jest zarejestrowana, data wygaśnięcia oraz data rejestracji domeny:

facebook.com - registered: 1, expire: 30.03.2028, creation: 29.03.1997
a-parser.com - registered: 1, expire: 25.02.2022, creation: 25.02.2012
vk.com - registered: 1, expire: 23.06.2021, creation: 24.06.1997
yandex.ru - registered: 1, expire: 01.10.2021, creation: 23.09.1997
google.com - registered: 1, expire: 14.09.2028, creation: 15.09.1997

Wyprowadzanie listy NS

Format wyniku:

$ns.format('$server\n')

Przykład wyniku:

demi.ns.cloudflare.com
vern.ns.cloudflare.com

Wyprowadzanie danych o terminach domeny do CSV

Format wyniku:

[% tools.CSVline(query, registered, expire_date, creation_date, updated_date, free_date, whoisserver, rdapserver, registrar) %]

Przykład wyniku (domena .com, odpowiedź przez RDAP — whoisserver jest puste, rdapserver jest wypełnione):

a-parser.com,1,25.02.2027,25.02.2012,10.02.2026,none,,https://rdap.verisign.com/com/v1/domain/a-parser.com,"Squarespace Domains II LLC"

Wyprowadzanie listy NS do tabeli CSV

Format wyniku:

[% FOREACH ns;
tools.CSVline(query, server);
END %]

Przykład wyniku:

a-parser.com,demi.ns.cloudflare.com
a-parser.com,vern.ns.cloudflare.com

Zrzut wyników do JSON

Ogólny format wyniku:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.registered = p1.registered;
obj.expire_date = p1.expire_date;
obj.creation_date = p1.creation_date;
obj.updated_date = p1.updated_date;
obj.free_date = p1.free_date;
obj.whoisserver = p1.whoisserver;
obj.rdapserver = p1.rdapserver;
obj.registrar = p1.registrar;
obj.domains = [];

FOREACH item IN p1.ns;
obj.domains.push({
server = item.server
});
END;

obj.json %]

Tekst początkowy:

[

Tekst końcowy:

]

Przykład wyniku (RDAP):

[{
"registered": 1,
"rdapserver":"https://rdap.verisign.com/com/v1/domain/a-parser.com",
"query":"a-parser.com",
"free_date":"none",
"domains":[
{
"server":"demi.ns.cloudflare.com"
},
{
"server":"vern.ns.cloudflare.com"
}
],
"registrar":"Squarespace Domains II LLC",
"expire_date":"25.02.2027",
"creation_date":"25.02.2012",
"whoisserver":"",
"updated_date":"10.02.2026"
}]
wskazówka

Aby opcje "Prepend text" i "Append text" były dostępne w Edytorze zadań, należy aktywować "More options".

Przetwarzanie wyników

A-Parser pozwala przetwarzać wyniki bezpośrednio podczas scrapowania, w tej sekcji przedstawiliśmy najpopularniejsze przypadki dla scrapera Net::Whois

Pobieranie rejestratora domeny

Przy odpowiedzi przez WHOIS pole $p1.data zawiera tekst; przy RDAP — JSON. Aby uzyskać rejestratora w obu przypadkach, dodaj dwa Konstruktory wyników.

Dodać Result Builders (Konstruktor wyników) i w rozwijanej liście wybrać źródło: $p1.data. Wybrać typ: RegEx Match. W polu wyrażenia regularnego wpisać: Registrar:\s*(.+) i zapisać w zmiennej registrarwhois.

Dodać ponownie Result Builders (Konstruktor wyników) i w rozwijanej liście wybrać źródło: $p1.data. Wybrać typ: RegEx Match. W polu wyrażenia regularnego wpisać: "entities"[\s\S]+?"vcardArray"[\s\S]+?"fn"[\s\S]+?"text"[\s\S]+?"([^"]+?)" i zapisać w zmiennej registrarrdap.

Dodać do Result format (Formatu wyniku): [% IF registrarrdap == 'none' %]$query - $registrarwhois[% ELSE %]$query - $registrarrdap[% END %] — jeśli RDAP nie znalazł nazwy (registrarrdap równa się none), wyświetlana jest wartość z WHOIS, w przeciwnym razie z RDAP.

Pobierz przykład

Jak zaimportować przykład do A-Parser

eJyVVNtO20AQ/RVrFEQoJioPfbGEqkATiSpNKAH1wU6lVTxJt6x3ze46EEX5987Y
jh1TpKpP9lzPmdvuYIPWSaMhugzBC/fk7iw69A6ieAd5+Q8RWFxL562wEEIurKMg
cohhij6Kfvwy0pEhxZUolIdwB36bI4UZym5limSUKckrYzPhKWnpBhuhCnaLT4Lb
cdBg2FTkwdVVcKqNxtPgZNF7LtBug4ug1/i8MCbFjSbz0fsenIUdpl/InmjYLxYh
VNBuXPIg5F5+OaiLbIxzscEHw2ylwlY9JmkqMubbS4VHtg6qgvpnA//KGUSaSk/d
FKpC4Ca1qI9aPnO9K6EchsCUJbqxNRnl9FhmKOs40IuhqgsoR1EGf69imhyOuI4F
MUnfWqRHK7yxs5wJkX4HRg+VmuAGleuQ2F4XUqU00uGKgm7rwPddZn/l2Df1HUPR
4F8scWiylNL17FsblZqJWTd2JTPpSeFuTKGp9o8hPCHmh57B1FB3MmOxQakDa3Ba
2xw1L1k7smHeqjpVdMZypNyBM4VdEl5M+DRlwa2vl5k2C1/L5PyN4P6waVGSuA/9
wfnZwfhQBZDoDU+xu7Ww2If/BZQAak97hS6BmLCSZL44/5zAZilsOrRWbLv6le7K
vFpdTT/+mQD9nSXwT858R0SZ6C2NXsn1rL7pQxML/UDPxkzfmCxXyBPXhVK0sA7v
28sZunpBWWhn9zb4poQgHs1bQnSMcl/nFbfcSmL3iTlntGPHqHXKpVDq8X5ybOFA
500+0yNr3yx2eTIgLqpHbbCkW2wvs6TKRS7p3teGDpEk7kT9BDZP5Y7W+be7q7Qc
Vur2fwBx19yZ

Możliwe ustawienia

ParametrWartość domyślnaOpis
Recursive queryPozwala uzyskać rozszerzoną wersję WHOIS
WHOIS serverPozwala ustawić własny serwer WHOIS
RDAP serverPozwala ustawić własny serwer RDAP
Checking by DNSPozwala sprawdzać, czy domena jest zarejestrowana na podstawie istnienia IP dla domeny
Checking domains by DNS recordSprawdzanie IP; jeśli znajdzie status ALLOCATED, uznaje domenę za zarejestrowaną. Jeśli opcja jest wyłączona, sprawdzanie IP w ogóle się nie odbywa
Force DNS check for not found domainsWymuszone sprawdzenie, jeśli domena została określona jako niezarejestrowana