IP Adresinden MAC adresine ulaşmak : C# ve Process'ler

St.AnGeR

Document Visor..
Katılım
17 Haz 2005
Mesajlar
1,832
Reaction score
0
Puanları
0
Konum
ιѕт              HHuser№: 9          Remote Admi
Giriş

Öncelikle gerekli genel tanımları vererek başlayalım.

IP adresi nedir?

IP adresi, ağ üzerindeki makineleri tanımlamak için kullanılan 32 bit uzunluğunda bir adrestir. Internet'e bağlı olan her makinanın kendine ait bir IP adresi vardır. Bu adres Internet üzerinde makinelerin birbirlerini tanımalarını ve iletişim kurmalarını sağlar. IP adresleri birbirlerinden noktayla ayrılmış 8 bit uzunluğundaki, her biri 0-255 arasında değişen 4 değişik rakam grubundan oluşur ve bu gruplardan her birine Yunanca'da sekizli anlamına gelen "oktet" adı verilir.

Örnek: 209.67.50.203

MAC Adresi nedir?
Açılımı Media Access Control Adress olan 48 bit uzunluğundaki (12 hex dijitle temsil edilen) bu adres her ağ kartının ROM'una üretim aşamasında yazılmıştır ve (son dönemlerde bu işi yapmak üzere özel tasarlanmış programların yardımı hariç) değiştirilemez. Ağ kartı üreticisi firmalar, önce IEEE (Institue of Electrical and Electronics Engineers - http://www.ieee.org ) isimli kuruma başvurur ve 24 bit uzunluğunda (6 hex dijit) bir üretici kodu alır. (Örneğin 0004AC IBM'e, 000142 de Cisco'ya aittir.) Kalan 24 bit (6 hex dijit) ise arabirim seri numarasını temsil eder. Ağ kartları bir diğer ağ kartına veri yollarken alıcıyı diğerlerinden ayırmak için bu MAC adresini kullanır.

Örnek: 00-01-42-AA-BB-CC

Process nedir?


Process, işletim sisteminde çalışmış,çalışan veya çalışacak olan bir işlem olarak tanımlanabilir. Çalıştırdığımız her bir uygulama bir process'dir ve öncelik sırası, çalışma süresi vb. gibi niteliklere göre işletim sistemi tarafından çalıştırılır, düzenlenir ve denetlenir.

nbtstat nedir?

Bir komut olan Nbtstat mevcut TCP/IP bağlantılarını ve protokol istatistiklerini NBT (Net Bios Over TCP/IP) kullanarak gösterir. (Net Bios, IBM ve Sytek tarafından istemci bilgisayarların ağdaki kaynaklara erişimini sağlamak için geliştirdikleri bir API'dir ve Net Bios kullanarak hacking genelde hackerlar için uzaktan yapılan saldırıların en kolay yoludur.)

Kullanımı ise " NBTSTAT [-a RemoteName] [-A IP address] [-c] [-n] [-r] [-R] [-s] [interval] ] " şeklindedir.

Bizi bu yazıda -A parametresi ilgilendirmektedir. -A yani Adapter Status, IP adresi verilen karşı bilgisayarın isim tablosunu ekrana getirir.

cpporhanmak411cz.jpg


Örnekte de görüldüğü gibi ipsi verilen bilgisayarın MAC adresi bu komut ve parametreleri ile elde edilebilmektedir.

Bizde yazacağımız uygulamada yeni bir process olarak nbtstat komutunu çağırarak MAC adresini elde edip ekrana yansıtacağız.

Örnek uygulama

Kodlamaya geçmeden önce kullanacağımız, yabancı gelebilecek bazı sınıfları inceleyelim.

System.Diagnostics isim alanı, Process ve ProcessStartInfo sınıfları

.NET Framework içerisindeki System isim alanlarından birisi olan System.Diagnostics isim alanı, işlemler (process),

olay günlüğü (event log), ve performans sayıcılarla (performance counters) etkileşim sağlayan sınıfları barındırır.

Bizde process'lerle ilgileneceğimizden bu isim alanınına ait sınıfları kullanacağız.

Kullanacağımız sınıflar bu alandaki Process ve ProcessStartInfo sınıflarıdır.Bunlardan Process sınıfı tüm process'lere

erişimi (listeleme vb. gibi işlemler), yerel sistem process'lerini başlatmayı ve bitirmeyi; ProcessStartInfo sınıfı ise bir

process'i başlatırken gerekecek olan değerleri girmeyi (örneğin parametreler) ve gerekli ayarları yapmayı sağlar.

Bu şekilde process üzerinde daha etkin çalışabiliriz.

(Bu isim alanı aynı zamanda Trace ve Debug gibi, kodumuzun çalışmasını denetlememizi sağlayan ve debug

işlemlerini yöneten iki önemli sınıf içermektedir. Fakat konumuzla ilgili olmadığı için bu sınıfları şu anda incelemeyeceğiz.

System.Diagnostics isim alanı hakkında daha detaylı bilgi için

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDiagnostics.asp adresini ziyaret edebilirsiniz.)

Gerekli sınıfları da inceledikten sonra artık kodlamaya geçebiliriz.

ip2mac isimli bir C# konsol uygulaması açarak aşağıdaki kodu projemize
using System;

using System.Diagnostics; // Process ve ProcessStartInfo class'larini barindiran namespace

namespace ip2mac

Kod:
{  class MACAdresi 

      {  

          public static string MacBul(string IP) //Parametre olarak IP adresini alıp MAC adresini dondurur 

           {    string MAC = ""; 

                try   

                  {     ProcessStartInfo psInfo = new ProcessStartInfo(); 

                        Process ps = new Process(); 

                        psInfo.FileName = "nbtstat";    // process'imizin dosya adı 

                        psInfo.Arguments = "-A " + IP;  // ve parametreleri 

                        psInfo.RedirectStandardInput = false; // Girdinin Process sınıfının StandartInput elemanından alınmamasını sağlar 

                        psInfo.RedirectStandardOutput = true; // Çıktının Process sınıfının StandartOutput elemanına yazılmasını sağlar 

                        psInfo.UseShellExecute = false; // Process başlatılırken işletim sistemi kabuğunun kullanılmayacağını belirler            

 

                        ps = Process.Start(psInfo); // girdigimiz başlangıç bilgilerine gore process baslatılır. 

                           

                        string tmpStr = ""; 

                        int num1 = -1; 

                        while (num1 <= -1) 

                        { 

                              num1 = tmpStr.Trim().ToLower().IndexOf("mac address", 0);

                              if (num1 > -1) 

                              { 

                                    break; 

                              } 

                              tmpStr = ps.StandardOutput.ReadLine(); // Yönlendirilen process çıktısı satır satır ele alınır 

                        }                          

 

                        ps.WaitForExit(); // process'in sonlanması beklenir                          

 

                        MAC = tmpStr.Trim(); // Çıktının istenilen kısmı döndürülecek değişkene atanır 

                  } 

 

                  catch (Exception ex) 

                  { 

                        Console.WriteLine(ex.Message); // yakalanan istisnai durumun mesajı ekrana yansıtılır 

                  } 

 

                  return MAC; 

            } 

 

            [STAThread] 

            static void Main(string[] args) 

            {     

try   

                  {           

                  string ip = args[0]; // komut satirinda girilecek ilk parametre ip adresidir

                  string mac = MacBul(ip); 

 

                  Console.WriteLine("\n"); 

                  Console.WriteLine(mac); 

                  Console.WriteLine("\nCikis icin ENTER'a basiniz..."); 

                  }

catch (Exception

 ex) 

                  { 

                   Console.WriteLine(ex.Message); // yakalanan istisnai durumun mesajı ekrana yansıtılır 

                  }           

                  Console.ReadLine();                 

            }            

      } 

}

Aşağıda programımızın ekran görüntüsü görünmektedir:

cpporhanmak420ey.jpg


Son olarak

Bu yazımızda öncelikle IP ve MAC adreslerinin, process'lerin ne olduklarından, nbtstat komutunun

ne işe yaradığından ve nasıl kullanıldığından bahsettik. Daha sonra girdiğimiz IP adresine sahip makinenin

MAC adresini, nbtstat komutunu bir process olarak çalıştırarak elde eden bir C# konsol uygulamasını nasıl

yazacağımızı gördük..
 
Geri
Üst