St.AnGeR
Document Visor..
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.
Ö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
Aşağıda programımızın ekran görüntüsü görünmektedir:
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..
Ö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]
Bizi bu yazıda -A parametresi ilgilendirmektedir. -A yani Adapter Status, IP adresi verilen karşı bilgisayarın isim tablosunu ekrana getirir.

Ö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:

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..