Makale Özeti

Bu makalemizde aradığınız domainin başkası tarafından alınıp alınmadığını sorgulayan bir kütüphane yazacağız .

Makale

Whois Alan Adı sorgusu
1-Alan adlarının kimlere ait olduğunun  sorgulaması .
2-Sorgulanan Alan Adının kayıtlı olup olmadığı .
 
Bu makalemizde aradığınız domainin başkası tarafından alınıp alınmadığını sorgulayan bir kütüphane yazacağız .
 
 
Aramak istediğimiz alan adlarını whois sunucularını kullanarak sorgulayabiliriz.Dünya üzerinde yüzlerce whois server vardır.tr uzantılı isimlerin kime ait olduğunu ülkemizde ODTU yapmaktadır. Odtu’nün whois server’ı "whois.metu.edu.tr" dir. Net ve com ile biten alan adlarını internic.net whois serverından sorgulayacağız.
Uzantıları .net,com.org ... bitiyorsa onu bulup ,doğru alan adı sunucusuna sorgumuzu göndermek için EndsWith methodunu kullanıyoruz.
 
     if (AlanAdi.EndsWith(".net"))
        {
            who.Whoisserver = "whois.internic.net";
        }
        if (AlanAdi.EndsWith(".com"))
        {
            who.Whoisserver = "whois.internic.net";
        }
        if (AlanAdi.EndsWith(".org"))
        {
            who.Whoisserver = "whois.publicinterestregistry.net";
        }
        if (AlanAdi.EndsWith(".tr"))
        {
            who.Whoisserver = "whois.metu.edu.tr";
        }
 
 
 
Alan Adı sorgusunda kullanacağımız adres http://www.erkansaldir.com şeklinde olmamalıdır.webde geçerli olan adreslerimizde gerçek alan adı kısmı erkansaldir.com kısmıdır.www domain tarafından iis servera yönlendirecek alt alanı temsil eder.http ise browserın kullanmış olduğu protokolü belirtir.
 
Mail.erkansaldir.com www.erkansaldir.com ftp.erkansaldir.com ... mail,ftp,www gibi sub domainler olmadan alan adımızı whois serverlara göndermemiz gerekir.
Alan Adımızın başındaki http ve www ifadelerini bulmak için StartsWith methodunu ve fazlalık ifadeyi kaldırmak içinde Replace methodunu kullanıyoruz.
 
      /////////////// Domain Kalıbını Düzenle Ve Kontrol Et
            string sonuc="";
            if (_Domain.StartsWith("http://"))
            {
                _Domain = _Domain.Replace("http://", "");
            }
            if (Domain.StartsWith("www."))
            {
                _Domain = _Domain.Substring(4, Domain.Length - 4);
            }
 
 
Regular ifadeler ilede girilen alan adı sorgusunu whois serverlara göndermeden son kez geçerliliğini kontrol ediyoruz.
 
Regex regexKalibi = new Regex(@"^[a-z0-9](?:[a-z0-9\-](?!\.)){0,61}[a-z0-9]?\.(?:com|net|org|com\.tr|net\.tr|org\.tr|gen\.tr)$");
            if (regexKalibi.IsMatch(_Domain) == false)
            {
                return "Hatalı Domain Girişi";//
            }
 
Whois servera bağlanıp alanadımızı kontrol edip gelen sonucu geriye döndürmek için System.Net.Sockets kütüphanesini kullanıyoruz.
 
      try
            {
                TcpClient client=new TcpClient();
                client.Connect(_whoisserver, 43);               
                NetworkStream stream=client.GetStream();
                Byte[] buffer = ASCIIEncoding.ASCII.GetBytes((_Domain + "\r\n"));
                stream.Write(buffer,0,buffer.Length);
                buffer = new Byte[8192];
                int i=stream.Read(buffer, 0, buffer.Length);
                 while (i >0)
                   {
                   i = stream.Read(buffer, 0, buffer.Length);
                   sonuc += ASCIIEncoding.ASCII.GetString(buffer);
                   }
                stream.Close();
                client.Close();
 
                return sonuc;
            }
            catch (Exception hata)
            {
                return hata.Message;
            }
Uzaktaki whois servera bağlanmak için client.Connect(_whoisserver, 43); methodunu kullanıyoruz.43 portu genel olarak whois serverlarının kullandığı porttur.
Whois serverlardan Dönen sonuç alan adının kime ait olduğunu yada bu alan adının bulunamadığı bilgisini içerir.
 
Musait_mi methodumuzla ise dönen alan adında
Aşağıdaki ifadelerden birinin olup olmadığımı kontrol edeceğiz.Eğer bu ifadelerden birine rastlanırsa alan adı alınmamış demektir.
 
"No match", "NOT FOUND", "no entries", "not found", "no data", "no such domain", "not a registered", "no encontr", "do not have an entry", "no entry", "no relevent", "no existe", "nomatch", "220 Available", "no information"
Regex.IsMatch(icerik,Aranan kalip) methosu ile metinde aradığımız kelime grubu geçiyormu kontrol ediyoruz.
 
public Boolean Musait_mi(string icerik)
        {
            Boolean bayrak = false;
            string[] kalip ={ "No match", "NOT FOUND", "no entries", "not found", "no data", "no such domain", "not a registered", "no encontr", "do not have an entry", "no entry", "no relevent", "no existe", "nomatch", "220 Available", "no information" };
        
            for (int i = 0; i <= kalip.Length - 1; i++)
            {
              if (Regex.IsMatch(icerik, kalip[i]))
                {
                    bayrak = true;
                    break;
                  
                }
            }
            return bayrak;
 
        }
Hosting servisi veren ve whois sorgusu yaptırmak isteyen herkes bu kütüphaneden faydalanarak whois sorgusu yapabilir. Umarım ilgilenen arkadaşlara faydası olmuştur.
Whois kütüphanesini ve örneği içeren Kodları download bölümünden indirebilirsiniz.
Erkan SALDIR
erkan@erkansaldir.com
www.erkansaldir.com
Ornek Uygulama