Статьи

Валідація, форматування і перевірка домену по WHOIS за допомогою php

Для одного зі своїх проектів мені треба було виконувати валідацію домену з подальшою перевіркою по WHOIS, але була ще одна тонкість - треба було визначати ще доменну зону, в разі однієї доменної зони - звертатися до одного провайдера WHOIS, у випадку з іншого - до іншого ( мова йде про Байнет)

Для одного зі своїх проектів мені треба було виконувати валідацію домену з подальшою перевіркою по WHOIS, але була ще одна тонкість - треба було визначати ще доменну зону, в разі однієї доменної зони - звертатися до одного провайдера WHOIS, у випадку з іншого - до іншого ( мова йде про Байнет).

Сервіси які я вирішив використовувати для виконання перевірки доменів:

  • cctld.by для білоруських доменів
  • freewhois.us для всіх інших доменів

Рішення потрібно було на php і звичайно ж, не без регулярних виразів.

Писати будемо відразу тестовий скрипт.

На першому етапі давайте визначимося, що це буде функція, а передавати ми будемо параметр «domain».

<? Php $ domain = trim ($ _ GET [ 'domain']); if (isset ($ domain)) {. . . }?>

На другому кроці додаємо функцію, яка буде відповідати за виконання всіх перевірок з переданим в запиті доменом:

<? Php $ domain = domainCheck (trim ($ _ GET [ 'domain'])); if (isset ($ domain)) {function domainCheck ($ domain) {$ detect_zone = preg_match ( "/.+ \. (\ w {2,5}) /", $ domain, $ zoneMatch); $ Validate_domain = preg_match ( "/ ([a-z0-9 \ -] + \. [Az] {2,6}) $ / i", strtolower ($ domain), $ match); }}?>

Змінна $ detect_zone відповідає за визначення доменної зони (прим .: BY або всі інші) для того, щоб правильно визначити оператора WHOIS до якого ми надалі будемо звертатися.

$ Validate_domain - виконує перевірку і віддає нам домен другого рівня навіть в тому випадку, якщо ви захочете виконати перевірку доменів третього рівня (саб-доменів) або вище. Це потрібно для того, щоб коректно відправити whois запит. Така практика стосовно не у всіх випадках, тому як, домен можна реєструвати наприклад третього рівня - site.co.uk, але в моєму випадку такий підхід підходив якнайкраще.

Далі, ми будемо використовувати php cURL для відправки запитів і регулярні вирази для отримання потрібної інформації з відповідей:

<? Php $ domain = domainCheck (trim ($ _ GET [ 'domain'])); if (isset ($ domain)) {function domainCheck ($ domain) {$ detect_zone = preg_match ( "/.+ \. (\ w {2,5}) /", $ domain, $ zoneMatch); $ Validate_domain = preg_match ( "/ ([a-z0-9 \ -] + \. [Az] {2,6}) $ / i", strtolower ($ domain), $ match); if ($ zoneMatch [1] == 'by' || $ zoneMatch == 'бел') {$ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, "http://cctld.by/check/?domain=". $ match [1]); curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true); $ Lookup = curl_exec ($ ch); curl_close ($ ch); $ Get_mail = preg_match ( "/ (\ D + [- a-z0-9] + \ @. +? \. \ W {2,5}) /", $ lookup, $ emailMatch); $ Phone_match = preg_match ( "/ \> (\ + \ d {12}) /", $ lookup, $ phoneMatch); $ Data = $ emailMatch [1]. ";". $ PhoneMatch [1]; } Else {$ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, "http://www.freewhois.us/index.php?query=". $ match [1]. "& submit = Whois"); curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true); $ Lookup = curl_exec ($ ch); curl_close ($ ch); $ Get_mail = preg_match ( "/ ([- a-z0-9] + \ @. +? \. \ W {2,5}) /", $ lookup, $ emailMatch); $ Phone_match = preg_match ( "/.+ (\ + \ d {3} \. \ D +) /", $ lookup, $ phoneMatch); $ Data = $ emailMatch [1]. ";". $ PhoneMatch [1]; } $ Error = 'none'; if ($ emailMatch [1] && $ phoneMatch [1]) {return $ data; } Else {return $ error; }}}}?>

Використовуємо просте умова, яке при визначенні доменній зоні буде виконувати потрібний нам сценарій.

У разі, якщо наш домен збігається з .BY або .БЕЛ, значить ми будемо звертатися до cctld.by, в інших випадках відповідно - буде використовуватися другий сервіс.

$ Get_mail = preg_match ( "/ (\ D + [- a-z0-9] + \ @. +? \. \ W {2,5}) /", $ lookup, $ emailMatch);

Змінна $ get_mail допомагає нам отримати електронну адресу власника домену, а змінна $ phone_match - забирає в свою чергу номер телефону. Так як розмітка сторінки в операторів whois відрізняється, регулярні вирази підлаштовуються індивідуально.

$ Phone_match = preg_match ( "/ \> (\ + \ d {12}) /", $ lookup, $ phoneMatch);

У разі, якщо домену немає або якоїсь інформації бракує - створюємо змінну $ error і віддаємо її.

$ Validate_domain = preg_match ( "/ ([a-z0-9 \ -] + \. [Az] {2,6}) $ / i", strtolower ($ domain), $ match);

При виконанні перевірки регулярним виразом, нам важливо, щоб домен був з маленької літери, для цього використовуємо функцію strtolower (), тому як перевірка whois у багатьох сервісів виконується тільки з доменами в нижньому регістрі.

Може бути цікаво:

Lt;?
By/check/?
Php?
PhoneMatch [1]; } $ Error = 'none'; if ($ emailMatch [1] && $ phoneMatch [1]) {return $ data; } Else {return $ error; }}}}?

Новости