Blade
Uyari Seviyesi : Mesaj Sayısı : 3630 Rep Puanı : 1007 Aktiflik Puanı : 111662 Kayıt Tarihi : 23/06/10 Cinsiyet :
Kullanıcı Aktifligi Basari : (3/3) Seviye: (1/1) Güçlülük: (1/1)
| Konu: IP Adresinden MAC adresine ulaşmak : C# ve Process'ler Salı Ekim 05 2010, 20:14 | |
| IP Adresinden MAC adresine ulaşmak : C# ve Process'ler
Bu yazımızda girdiğimiz IP adresine sahip makinenin MAC adresini, nbtstat komutu yardımıyla elde eden bir C# konsol uygulamasını nasıl yazacağımızı göreceğiz.
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 - [Linkleri görebilmek için üye olun veya giriş yapın.] ) 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] [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
[Linkleri görebilmek için üye olun veya giriş yapın.] 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
{ 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. Yazdığımız uygulama birkaç bilgisayarda test edilmiş başarılı sonuçlar alınmıştır.
Öncelikle benim yaptığım gibi, programı kendi ip adresleriniz uzerinde test etmenizi tavsiye ederim.
| |
|