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 query☐Pozwala uzyskać rozszerzoną wersję WHOIS
WHOIS serverPozwala ustawić własny serwer WHOIS
RDAP serverPozwala ustawić własny serwer RDAP
Checking by DNS☑Pozwala sprawdzać, czy domena jest zarejestrowana na podstawie istnienia IP dla domeny
Checking domains by DNS record☑Sprawdzanie 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 domains☑Wymuszone sprawdzenie, jeśli domena została określona jako niezarejestrowana