Merhaba, önceki konumda C# ile whois sorgulamasının nasıl yapıldığını anlatmıştım. Bu konuda da C# ile hazırlamış olduğum whois sorgulaması ve DNS sorgulaması yapabileceğiniz bir uygulamayı paylaşacağım. Uygulamayı hazırlarken Heijden.DNS isimli hazır bir DLL dosyasından faydalandım. Uygulama içerisinde bir alan adının whois sorgulaması yapıldığı sırada aynı anda arkaplanda o sitenin DNS sorgulamasını da yapmakta. DNS penceresine geldiğinizde sonuçları görüntüleyebilirsiniz ve ayrıca IDN alan adları için bir çevirme aracı da mevcut. Uygulamayı aşağıdaki bağlantı üzerinden indirebilirsiniz ve kaynak dosyalarına Github üzerinden erişebilirsiniz.
https://depo.niyazialpay.com/CryptographWhoisDNSQueryTools.rar
Merhaba, whois sorgulaması bir web adresinin tescil süresi, kimin adına kayıtlı olduğu gibi bilgilerin öğrenilebilmesi adına yapılan sorgulamadır. Bu işlemi çeşitli whois siteleri aracılığı ile gerçekleştirebilirsiniz veya C# ile bir exe hazırlayarak bu exe üzerinden de sorgulama gerçekleştirebilirsiniz. C# üzerinden bu sorgulamayı yapabilmeniz için sorgulama yapılacak olan whois serverına TCP bağlantısı açılması gerekir. Örnek olarak aşağıdaki komutlar ile birlikte sorgulamayı gerçekleştirebilirsiniz.
TcpClient TCPC = new TcpClient("whois.verisign-grs.com", 43);
string strDomain = "niyazialpay.com" + "\r\n";
byte[] arrDomain = Encoding.ASCII.GetBytes(strDomain);
Stream objStream = TCPC.GetStream();
objStream.Write(arrDomain, 0, strDomain.Length);
StreamReader objSR = new StreamReader(TCPC.GetStream(), Encoding.ASCII);
string icerik = Regex.Replace(objSR.ReadToEnd(), "\n", "
");
webBrowser1.DocumentText=icerik;
TCPC.Close();
Bu sorgulama şekli ile yalnızca sınırlı sayıda uzantıların whois bilgilerini öğrenebilirsiniz. En sağlıklısı her uzantı için ayrı ayrı whois serverlarından sorgulama yapılmasıdır. Aşağıdaki bulunan kodlar ile birlikte bu işlemi gerçekleştirebilirsiniz.
using System;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Text.RegularExpressions;
namespace Cryptograph_Whois_DNS_Tools
{
public class whois
{
private string GetDomainName(string url)
{
var doubleSlashesIndex = url.IndexOf("://");
var start = doubleSlashesIndex != -1 ? doubleSlashesIndex + "://".Length : 0;
var end = url.IndexOf("/", start);
if (end == -1)
end = url.Length;
string domainname = url.Substring(start, end - start);
if (domainname.StartsWith("www."))
domainname = domainname.Substring("www.".Length);
return domainname;
}
private stri
Classlar içerlerinde çeşitli methodları, olayları ve özellikleri barındıran sınıflardır.Bir dll dosyası da çeşitli classların bir araya gelmiş halidir.İlk önce normal bir class yapısını anlatacağım.
class Alpay
{
public string MesajUyarısı(string a)
{
MessageBox.Show(a);
return a;
}
}
Alpay isminde bir class tanımladık, class ın içinde string tipli public MesajUyarısı isimli bir fonksiyon tanımladık, classı kullanmak için programa eklediğimiz herhangi bir butonun click olayına şunları yazıyoruz, ilk önce classımızı çağırıyoruz yeni bir nesne oluşturarak sonra da o nesne içerisindeki fonksiyonumuzu çağırıyoruz
Alpay mesaj = new Alpay();
mesaj.MesajUyarısı("Muhammed Niyazi Alpay");
Alpay isimli classtan mesaj isimli nesne oluşturuyoruz ve mesaj isimli nesne içerisinden MesajUyarısı isimli fonksiyonu çağırıyoruz, ekrana mesajbox ile Muhammed Niyazi Alpay yazdıracaktır.
Şimdi bu classımızı bir dll oluşturarak dll içerisinden çağıralım. DLL dosyası oluşturmak için yeni bir visual studio açalım, yeni Class Library projesi oluşturalım.Şimdi gelen pencerede Class ismi varsayılan olarak Class1 olarak geldi, buraya bir önceki konudaki belirttiğim gibi md5 hesaplayıcı kodlarını ekleyeceğim, ilk önce System.Security.Cryptography; isim uzayını çağırıyoruz, sonra md5 hesaplayıcı kodlarımızı yazıyoruz. Kodlarımız aşağıdaki gibi olmalı:
public class Class1
{
public static string md5(string gelenveri)
{
if (string.IsNullOrEmpty(gelenveri)) return null;
byte[] ByteData = Encoding.ASCII.GetBytes(gelenveri);
MD5 AlpayMd5 = MD5.Create();
byte[] HashData = AlpayMd5.ComputeHash(ByteData);
StringBuilder Cryptograph = new StringBuilder();
for (int x = 0; x < HashData.Length; x++)
{
Cryptograph.Append(HashData[x].ToString("x
C# ta md5 hesaplamak için ilk önce System.Security.Cryptography isim uzayını çağırıyoruz.
Şimdi fonksiyonumuzu yazalım:
public static string md5(string gelenveri)
{
if (string.IsNullOrEmpty(gelenveri)) return null;
byte[] ByteData = Encoding.ASCII.GetBytes(gelenveri);
MD5 AlpayMd5 = MD5.Create();
byte[] HashData = AlpayMd5.ComputeHash(ByteData);
StringBuilder Cryptograph = new StringBuilder();
for (int x = 0; x < HashData.Length; x++)
{
Cryptograph.Append(HashData[x].ToString("x2"));
}
return Cryptograph.ToString();
}
string tipli md5 fonksiyonuna gelenveri isimli string tipli bir parametre belirttik, if (string.IsNullOrEmpty(gelenveri)) return null; burada gelenveri değişkeni boş gelirse boş bir değer döndürmesini istedik.
byte[] ByteData = Encoding.ASCII.GetBytes(gelenveri);
MD5 AlpayMd5 = MD5.Create();
byte[] HashData = AlpayMd5.ComputeHash(ByteData);
Burada gelenveri isimli parametreyi ByteData isimli byte tipine dönüştürdük, AlpayMd5 isminde bir md5 nesnesi tanımlayıp HashData isimli ByteData nesnesinin hashını hesaplayan komutlarımızı yazdık.
StringBuilder Cryptograph = new StringBuilder();Byteları biriktirmek için Cryptograph isimli StringBuilder nesnesi oluşturduk.
for (int x = 0; x < HashData.Length; x++)
{
Cryptograph.Append(HashData[x].ToString("x2"));
}Burada ise döngü tanımladık, x değeri 0 dan başlıyor ve HashData isimli hash nesnesinin uzunluğu kadar döngü devam ediyor, döngü içerisinde ise Cryptograph isimli StringBuilder nesnesine Hexadecimal yani 16lık sistemle formatlıyoruz.
En sonda ise return Cryptograph.ToString(); ile değerimizi dışarıya string tipine dönüştürerek aktarıyoruz.
md5("Cryptograph");
Ekrana a162a5e1f09317397d0c40843b217f3b çıktısını verir.
Fonksiyonlar işlerimizi daha kısa yoldan halletmemizi sağlayan komut kalıplarıdır.C# ta fonksiyonların da değişkenler gibi türleri vardır.En basit haliyle :
string Fonksiyon(string a)
{
MessageBox.Show(a);
return a;
}
şeklinde tanımlanır. Fonksiyon isminde string tipinde bir fonksiyon tanımladık, yine string tipli a değişkenine bağlı bir parametre belirttik, fonksiyonun yaptığı işlem a parametresine göre gelen değeri ekrana mesaj box ile yazdırmak, return a ifadesiyle fonksiyon içindeki a parametresini dışarıya çağırmış olduk. Kısaca anlatmak gerekirse dışarıdan girilen bir değer var ve bu değeri ekrana yazdırıyoruz. Kullanımı da şu şekilde:
Fonksiyon("Cryptograph");
ekrana mesaj box ile Cryptograph yazdıracak.
Fonksiyonlar public veya private olarak da tanımlanabilirler, public olarak tanımlanan fonksiyon farklı bir dosyadan çağırılabilir bir fonksiyondur, private olarak tanımlanan fonksiyon ise sadece bulunduğu dosya üzerinde çalışır.
Dışarıdan girilen iki sayının toplamını yapan public bir fonksiyon tanımlayalım.
public int Fonksiyon3(int a, int b)
{
int c = a + b;
MessageBox.Show(c.ToString());
return c;
}
Fonksiyon3 isimli fonksiyon aynı proje içerisinde farklı bir dosyadan çağırılabilir durumdadır şu anda. Bunu bir butonun click olayında kullanmak istersek yazmamız gereken komut şudur:
Fonksiyon3(Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text));
textboxtan gelen veriler string tipli oldukları için onları integer tipe dönüştürmemiz gerekiyor, dönüşüm fonksiyonu içerisinde gelen verileri fonksiyonda belirtiyoruz ve toplamları ekrana mesaj box ile yazdırılıyor.
Örnek Dosya