İçeriğe geç

PHP ile Domain (WHOIS) Sorgulama

Çeşitli servis sağlayıcılar ile Domain (Alan Adı) kontrolü sağlamak çok kolay. Yerli ve yabancı bir çok firma bu hizmeti vermektedir. Benim en çok kullandığım servis: Instant Domain Search. Oldukça kullanışlı ve bana alan adları konusundan farklı varyasyonlar da sunuyor. Bu ve buna benzer bir alan adı kontrolörü yazmak oldukça kolay bir işlem.

Bugün size; bir alan adı kontrolü PHP ile nasıl sağlanır, bundan bahsetmek istiyorum.

Öncelikli olarak; alan adı uzantılarının farklı servis sağlayıcılarda olduğunu bilmelisiniz. Yani alan adı uzantıları tek bir adreste değiller. Dolayısıyla uzantı ve alan adına göre sorgulama yapacağınız zaman, bu alan adının hangi servis sağlayıcıda olduğunu bilmelisiniz. Bununda en kolay yolu bu adreste! Belirttiğim adreste; uzantılar ve bu uzantıları sağlayan servis sağlayıcıların tam listesini görebilirsiniz.

Alan adı uzantılarının farklı adreslerde tutulduğunu öğrendikten sonra gelelim bu alan adı ve uzantısının uygunluk durumunu kontrol etmeye. Öncelikle; elimizde bir alan adı ve uzantısı olmalı. Örnek alan adlarımız şu şekilde olsun: emrecanoztas.com ve emrecanoztas.net.

Elimizde 2 adet alan adı ve uzantısı var. com ve net alan adları; whois.crsnic.net servis sağlayıcısı tarafından tahsis edilmekte. Dolayısıyla her iki alan adını da aynı servis sağlayıcı üzerinden uygunluğunu kontrol etmeliyiz.

Not: Bu yazıyı hazırlamadan önce herhangi bir hata yapmamak için yerli ve yabancı bir çok kaynağı inceledim. İncelediğim kaynakların neredeyse tümü bu işlemi Socket bağlantısı kullanarak yazmış. Socket kullanmak doğru bir seçim. Socket yerine; cURL kullanılabilir. Daha önce bir yazımda da cURL kullanmıştım ve oldukça performanslı olduğundan bahsetmiştim. Burada da aynı durumla karşı karşıyayız. Dolayısıyla ikisi arasındaki farkı anlamanız için her iki yapıyı (cURL ve Socket) da kullanarak aynı işlemi gerçekleştireceğim.

Socket ile Alan Adı Sorgulama

Öncelikle; Socket kullanarak alan adı sorgulaması yapalım.

define('WHOIS', 'whois.crsnic.net');
$whois = array();

$connection = fsockopen(WHOIS, 43, $errno, $errmessage, 30);

Alan adı sağlayıcısını sabit değişken olarak belirledik. Bunun dışında bir de $whois dizi değişkeni belirledik, gelecek olan veriyi almak için. Daha sonra da belirtilen servis sağlayıcıya; 43 no’lu port’u kullanarak bir socket bağlantısı açtık.  Burada; $errno, bağlantıda bir hata gelmesi durumunda bu hatanın sistemdeki numarasını tutacak olan değişkendir. $errmessage, bağlantıda meydana gelecek hata mesajını tutacak olan değişkendir. Son sıradaki 30 rakamı ise; saniye cinsinden bağlantının zaman aşım süresidir. Yani 30 saniye içerisinde işlem gerçekleşmezse; işlemi iptal et durumu olacaktır.

Soket bağlantısı şayet olumlu ise $errno ve $errmessage değişkenleri boş olacaktır. Biz de bu değerlerden herhangi birini kontrol ederek; doğru yolda olup olmadığımızı anlayabiliriz. Hata yoksa; dönen değeri almalı ve gerekli işlemlerden geçirip kullanmalıyız. Kodlarımızın geri kalan kısmı aşağıdaki gibi olacaktır.

if (!$connection) {
    echo('Connection failed! ' . 'Error no: ' . $errno . ' Error message: ' . $errmessage);
} else {
    ($connection) ? fputs($connection, 'emrecanoztas.com' . "\r\n") : $connection = null;

    if (!is_null($connection)) {
        while (!feof($connection)) {
            array_push($whois, fgets($connection));
        }
    } else {
        trigger_error('$connection variable is null!');
    }

    fclose($connection);
}

Yukarıdaki kodlarımızda yaptıklarımız şunlar; socket bağlantısında bir hata var mı? Hata yoksa; emrecanoztas.com alan adını ve uzantısını sorgula. Dönen değeri $connection değişkenine yaz. Dönen değer resource tipinde bir Stream veri. Yani harici bir kaynaktan gelen veri şeklinde. Daha sonra da $connection değişkenindeki veriyi satır satır oku ve daha önce oluşturmuş olduğumuz $whois dizi değişkeninin indekslerine bu satırları sırasıyla ekle. Gelen veriyi bir değişkene atamak yerine; string veri olarakta alabilirsiniz. Ama okunması kolay olduğu için; dizi şeklinde almayı uygun buldum. Burada $connection değişkenini, is_null() fonksiyonu ile kontrol ettim. Lakin; is_resource() fonksiyonu ile de bu kontrolü yapabilirsiniz. Seçim tamamen size kalmış.

Kodlarımızın tamamı aşağıdaki gibi olacaktır.

define('WHOIS', 'whois.crsnic.net');
$whois = array();

$connection = fsockopen(WHOIS, 43, $errno, $errmessage);

if (!$connection) {
    echo('Connection failed! ' . 'Error no: ' . $errno . ' Error message: ' . $errmessage);
} else {
    ($connection) ? fputs($connection, 'emrecanoztas.com' . "\r\n") : $connection = null;

    if (!is_null($connection)) {
        while (!feof($connection)) {
            array_push($whois, fgets($connection));
        }
    } else {
        trigger_error('$connection variable is null!');
    }

    fclose($connection);
}

Yukarıdaki kodlarımızın çıktısı da aşağıdaki gibi olacaktır.

Array
(
    [0] =>    Domain Name: EMRECANOZTAS.COM

    [1] =>    Registry Domain ID: 2319656740_DOMAIN_COM-VRSN

    [2] =>    Registrar WHOIS Server: whois.PublicDomainRegistry.com

    [3] =>    Registrar URL: http://www.publicdomainregistry.com

    [4] =>    Updated Date: 2018-10-09T19:31:44Z

    [5] =>    Creation Date: 2018-10-09T19:31:44Z

    [6] =>    Registry Expiry Date: 2019-10-09T19:31:44Z

    [7] =>    Registrar: PDR Ltd. d/b/a PublicDomainRegistry.com

    [8] =>    Registrar IANA ID: 303

    [9] =>    Registrar Abuse Contact Email: abuse-contact@publicdomainregistry.com

    [10] =>    Registrar Abuse Contact Phone: +1.2013775952

    [11] =>    Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited

    [12] =>    Name Server: LINUX1.SENKRONET.COM

    [13] =>    Name Server: LINUX2.SENKRONET.COM

    [14] =>    DNSSEC: unsigned

    [15] =>    URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/

    [16] => >>> Last update of whois database: 2018-10-23T23:53:24Z <<< [17] => 

    [18] => For more information on Whois status codes, please visit https://icann.org/epp

    [19] => 

    [20] => NOTICE: The expiration date displayed in this record is the date the

    [21] => registrar's sponsorship of the domain name registration in the registry is

    [22] => currently set to expire. This date does not necessarily reflect the expiration

    [23] => date of the domain name registrant's agreement with the sponsoring

    [24] => registrar.  Users may consult the sponsoring registrar's Whois database to

    [25] => view the registrar's reported date of expiration for this registration.

    [26] => 

    [27] => TERMS OF USE: You are not authorized to access or query our Whois

    [28] => database through the use of electronic processes that are high-volume and

    [29] => automated except as reasonably necessary to register domain names or

    [30] => modify existing registrations; the Data in VeriSign Global Registry

    [31] => Services' ("VeriSign") Whois database is provided by VeriSign for

    [32] => information purposes only, and to assist persons in obtaining information

    [33] => about or related to a domain name registration record. VeriSign does not

    [34] => guarantee its accuracy. By submitting a Whois query, you agree to abide

    [35] => by the following terms of use: You agree that you may use this Data only

    [36] => for lawful purposes and that under no circumstances will you use this Data

    [37] => to: (1) allow, enable, or otherwise support the transmission of mass

    [38] => unsolicited, commercial advertising or solicitations via e-mail, telephone,

    [39] => or facsimile; or (2) enable high volume, automated, electronic processes

    [40] => that apply to VeriSign (or its computer systems). The compilation,

    [41] => repackaging, dissemination or other use of this Data is expressly

    [42] => prohibited without the prior written consent of VeriSign. You agree not to

    [43] => use electronic processes that are automated and high-volume to access or

    [44] => query the Whois database except as reasonably necessary to register

    [45] => domain names or modify existing registrations. VeriSign reserves the right

    [46] => to restrict your access to the Whois database in its sole discretion to ensure

    [47] => operational stability.  VeriSign may restrict or terminate your access to the

    [48] => Whois database for failure to abide by these terms of use. VeriSign

    [49] => reserves the right to modify these terms at any time.

    [50] => 

    [51] => The Registry database contains ONLY .COM, .NET, .EDU domains and

    [52] => Registrars.

)

Yukarıdaki satırlardan da anlaşılacağı üzere; uygunluğunu kontrol ettiğimiz alan adı alınmış durumda ve şuan bu alan adında bulunmaktasınız (Güzel espri tuttum bunu..!). Aynı işlemi; emrecanoztas.net alan adı için yaparsak;

Array
(
    [0] => No match for "EMRECANOZTAS.NET".

ile başlayan bir dizi değişkeni elde edeceğiz. Bu da demektir ki; bu alan adı kayıt edilmemiştir ve kullanıma uygundur.

cURL ile Alan Adı Sorgulama

Socket ile bir alan adı nasıl sorgulanır, yukarıdaki kodlarımız ile bunu gördük. Şimdi daha önce bahsettiğimiz gibi cURL ile alan adımızı kontrol edelim. cURL ile işlem yapmak oldukça kolay ve kısa. Dolayısıyla hemen kodlarımızı geçiyorum.

define('WHOIS', 'whois.crsnic.net');

if (function_exists('curl_version')) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, WHOIS);
    curl_setopt($curl, CURLOPT_PORT, 43);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, 5);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'emrecanoztas.com' . "\r\n");
    $result = curl_exec($curl);
    curl_close($curl);
} else {
    trigger_error('cURL is not found!');
    exit();
}

Yukarıdaki kodlarımızda da socket’te olduğu gibi; belirtilen servis sağlayıcıya 43 no’lu port’tan bağlandık ve emrecanoztas.com alan adı ve uzantısı için dönen verileri aldık. Burada; $result değişkenine gelen verileri string şeklinde atadık. Ayrıca; cURL’un sistemimizde olup olmadığının kontrolünü yaptıktan sonra işlemlerimizi gerçekleştirdik.

Yukarıdaki kodlarımızın ekran çıktısı da aşağıdaki gibi olacaktır.

Domain Name: EMRECANOZTAS.COM Registry Domain ID: 2319656740_DOMAIN_COM-VRSN Registrar WHOIS Server: whois.PublicDomainRegistry.com Registrar URL: http://www.publicdomainregistry.com Updated Date: 2018-10-09T19:31:44Z Creation Date: 2018-10-09T19:31:44Z Registry Expiry Date: 2019-10-09T19:31:44Z Registrar: PDR Ltd. d/b/a PublicDomainRegistry.com Registrar IANA ID: 303 Registrar Abuse Contact Email: abuse-contact@publicdomainregistry.com Registrar Abuse Contact Phone: +1.2013775952 Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Name Server: LINUX1.SENKRONET.COM Name Server: LINUX2.SENKRONET.COM DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of whois database: 2018-10-24T00:33:35Z <<< For more information on Whois status codes, please visit https://icann.org/epp NOTICE: The expiration date displayed in this record is the date the registrar's sponsorship of the domain name registration in the registry is currently set to expire. This date does not necessarily reflect the expiration date of the domain name registrant's agreement with the sponsoring registrar. Users may consult the sponsoring registrar's Whois database to view the registrar's reported date of expiration for this registration. TERMS OF USE: You are not authorized to access or query our Whois database through the use of electronic processes that are high-volume and automated except as reasonably necessary to register domain names or modify existing registrations; the Data in VeriSign Global Registry Services' ("VeriSign") Whois database is provided by VeriSign for information purposes only, and to assist persons in obtaining information about or related to a domain name registration record. VeriSign does not guarantee its accuracy. By submitting a Whois query, you agree to abide by the following terms of use: You agree that you may use this Data only for lawful purposes and that under no circumstances will you use this Data to: (1) allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations via e-mail, telephone, or facsimile; or (2) enable high volume, automated, electronic processes that apply to VeriSign (or its computer systems). The compilation, repackaging, dissemination or other use of this Data is expressly prohibited without the prior written consent of VeriSign. You agree not to use electronic processes that are automated and high-volume to access or query the Whois database except as reasonably necessary to register domain names or modify existing registrations. VeriSign reserves the right to restrict your access to the Whois database in its sole discretion to ensure operational stability. VeriSign may restrict or terminate your access to the Whois database for failure to abide by these terms of use. VeriSign reserves the right to modify these terms at any time. The Registry database contains ONLY .COM, .NET, .EDU domains and Registrars.

Görüldüğü gibi cURL ile basit bir şekilde alan adı sorgulamasını yaptık.

Socket veya cURL kullanarak bir alan adının sorgulamasını daha doğrusu uygunluk kontrolünü yapabilirsiniz. Seçim tabiki size kalmış. Fakat hep dediğim gibi benim seçimim her zaman cURL’den yana ve öyle olmaya da devam edecektir.

Alan adı sorgulama işlemini otomatize etmek için oluşturduğum kodları buradan inceleyebilir veya buradan indirebilirsiniz.

Saygı ve muhabbetle!..

Bu içeriği paylaşmak ister misiniz?

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Buradaki içeriklerin tümü kamu malıdır. Kullanılması ve paylaşılması özgürdür.