Giriş
Halihazırda en popüler programlama ortamı diyebileceğimiz C# ile bilgisayar dünyasının en heyecan verici ve merak uyandırıcı konularının başında gelen ağ programlama konusunu detaylı olarak öğrenmek istiyorsanız hoşgeldiniz diyorum. Bu dökümandan faydalanabilmeniz için illa ki C# programcısı veya bilişim profesyoneli olmanız gerekmiyor. Bilgisayar ağları ve ağların ağı olan İnternet in nasıl çalıştığı hakkında detaylı bilgi sahibi olmak için de ilk kısımları inceleyebilirsiniz. Eğer bilgisayar ağları ve internetin nasıl çalıştığı hakkında hiç bilginiz yoksa ve temel bir ingilizceniz varsa http://www.nexyazilim.com/lookme.php?No=7linkimizde bulunan videoyu dikkatle izlemenizi ve konu ile ilgili temel birkaç doküman okumanızı tavsiye ederim. Dökümana başlamadan önce ağ ve internetin nasıl çalıştığı ile ilgili az çok birşeyler bilmeniz gerekir.
Bilgisayar ağları ve ağ programlamanın geçmişi aşağı yukarı 25 yıla dayanmaktadır. İlk dönemlerde sadece profesyonel programcılar C dili ile ağ yazılımları geliştiriyorlardı. Zaman geçtikte ve yazılım üretme ortamları geliştikçe ağ programlama konusu daha geniş bir yelpazeye hitap eder oldu. Çünkü artık network her yerde, en büyük şirketlerden en küçük ev kullanıcısına kadar herkesin hayatında önemli bir yer işgal etmeye başladı.
Bu dökümandan tam anlamıyla faydalanmak istiyorsanız C# ile programlama konusunda biraz tecrübeli ve ağ konusunda ilgili olmalısınız. Ağ programlama konusuna neden ilgi duyduğunuz önemli değil, işiniz gereği veya tamamen merak kaynaklı veya uçuk bir sebepten de olabilir. Bu dökümanda network programlamaya giriş ile ilgili çok şey bulacaksınız. C# ile programlama boyutunu bir kenara bırakacak olursak dökümanın ilk kısımlarında networkun ne olduğu, IP, Protokol, DNS, Ethernet, Router vs. kavramların ne anlama geldiği ile ilgili birçok faydalı bilgi edinebilirsiniz. Zamanım yettikçe düzgün bir sıra ile bölüm bölüm anlatacağım.
İlk başta network programcısı için iyi bir temel olması açısından IP programlamaya giriş başlığı altında IP kavramı, windows yüklü sistemlerde ağ trafiğini izleme ve analiz etme konularına değineceğim.
Dökümandan verim almak istiyorsanız acele etmemenizi, konuları belli zaman aralıklarıyla okuyup üzerinlerde çalışmanızı, atlama yapmamanızı ve uygulamaları belirtilen sıra ile yapmanızı tavsiye ediyorum.
www.nexyazilim.com/blog
IP Programlamaya Giriş
Internet Protocol (IP) network programlamanın çekirdeğinde bulunan temel kavramdır. IP yi bilgiyi sistemler arasında taşıyan bir aygıt gibi düşünebilirsiniz, bu sistemler bir yerel alan ağında (LAN=Local Area Network) veya bir geniş alan ağında (WAN=Wide Area Network) bulunabilir. Windows ortamında network programlama ile uğraşanlar için diğer network protokolleri bulunsa da IP, network aygıtları arasında özellikle internet üzerinde veri iletimi için en kullanışlı teknikleri sunmaktadır.
IP kullanarak programlama genellikle çok komplike bir süreçtir. Bilginin ağ üzerinde nasıl iletileceğine karar vermede etken olacak birçok faktör mevcuttur: istemci ve sunucu aygıtların sayısı, ağın tipi, ağdaki trafik ve ağda oluşabilecek hatalar. Bu faktörlerin tümü iletmek istediğiniz bilginin ağdaki seyrini etkilediğinden bu faktörlerin etkilerini anlamanız network programlamadaki başarınızı oldukça etkileyecektir. Genellikle sizin yazdığınız programda tasarladığınız işler ile programınız network üzerinde çalışırken oluşan işler aynı olmaz, yani network programlama üzerinde çalışıyorsanız evdeki hesabın çarşıya uymaması durumuyla sık sık karşılaşacaksınız. Bu yüzden C# ile network programlamaya giriş konulu bu bölümün ilk kısmında ağdaki trafiği analiz edebilmeniz ve bu şekilde yazdığınız programların gerçekte, kablo üzerinde tam olarak ne yaptığını görebilmeniz için ağ üzerindeki IP trafiğini izlemeyi anlatacağım.
Bu bölümde ayrıca network bağlantılarınız için gerekli, IP ile iletişimin en önemli iki parçasına en çok kullanılan ve IP aygıtının kullandığı iki iletişim protokolüne değineceğim: TCP (Transmission Control Protocol = İletişim Kontrol Protokolü) ve UDP (User Datagram Protokol = Kullanıcı Veri Aktarım Protokolü). Bölüm sonunda da en çok kafa karıştıran network konularından biri olan IP ağ adreslemeyi ineceleyeceğiz. En sonunda da Microsoft Windows yüklü sistemlerin IP ile çalışma şekli ve yazılım yoluyla sistemin IP adres konfigürasyonunu nasıl görebileceğimizi anlaşılır bir şekilde anlatmaya çalışıp bölümü bitireceğim.
www.nexyazilim.com/blog
Network trafiğini izlemek
Ağ programcıları için en önemli sorunlardan biri ağ üzerinde gerçekleşen işlemleri tam olarak bilememektir. Genellikle mükemmel bir istemci/sunucu programı yazdığınızı düşünürsünüz. Saatlerinizi harcayarak makinalar arasında bilgi alışverişi yapacak bir yazılım üretmişsinizdir. Programınız uygulanmaya başlar başlamaz network üzerinde çıkacak birçok soruna hazır olmalısınız. Bu durumda bir "Network Analizörü" işlevi gören bir yazılım ağ programcısı için çok iyi bir arkadaş olacaktır. Böyle bir program yardımıyla kabloların içinde gerçekte ne olduğu görülebilir ve bu şekilde bilgiler bir cihazdan diğerine gönderilirken oluşan programlama hataları kolaylıkla tespit edilerek düzeltilebilir.
Bu başlıkta windows işletim sistemi yüklü istemci / sunucu bilgisayarınıza kullanışlı bir network analiz edici program yüklemeyi ve kullanmayı detaylı olarak anlatacağım.
WinPcap Programlarını Yükleyelim
İtalyan Politecnico di Torino - NetGroup ekibi windows yüklü sistemlerde network trafiğinin analiz edilmesini sağlayan WinPcap sürücüsünü geliştirmiştir. NetGroup WinPcap sürücüsünü kullanarak tüm windows işletim sistemi yüklü bilgisayarlarda network trafiğini analiz etmeye yarayan komple bir seti kendi sitesinde paylaşıma sunmuştur. (üstelik bedava :). Bu sette bulunan araçlar network programcısına ağın perde arkasında (kabloların içinde) neler olduğunu görebilme olanağı sağlamaktadır. Bu bölümde WinPcap sürücüsüyle beraber çalışarak network trafiğini izlemeye yarayan iki programı anlatacağım : WinDump, komut istemi modunda çalışan paket yakalama programı ve Analyzer : Windows grafiksel modunda çalışan gelişmiş bir paket yakalama programı.
WinPcap sürücüsü bu paketin çekirdeğidir. Windows yüklü sunucu veya istemciler için karmaşık düzende hemen hemen tüm ethernet kartlarını desteklemektedir. Karmaşık düzende ethernet kartı paketlerin hedeflerinden bağımsız olarak ağdaki tüm trafikte akan bilgileri alabilmektedir. Ne kadar ilginç değil mi! Normalde ağda iletilen bilgi paketlerinin belirli hedeflere doğru gittiğini düşünürüz ama ağdaki tüm paketleri görebiliyoruz!. (Normalde ethernet kartınız ağ üzerinde sadece kendi adresine gönderilmiş paketleri yakalar.) Windump ve Analyzer programları network üzerindeki okunabilir bilgileri Ethernet ve IP paketleri şeklinde gösterebilme yeteneğine sahiptirler. Bu sayede programınızın ağ üzerindeki cihazlar arasında iletmeye / almaya çalıştığı veriyi görebilirsiniz.
Şimdi bahsettiğimiz yazılımları bilgisayarımıza kurup çalışmaya başlayalım. WinPcap sürücüsünü ve WinDump ağ izleyicisini http://www.winpcap.org/ adresinden indirebilirsiniz. Bu dökümanı hazırladığım Ocak 2009 da mevcut WinPcap sürücüsü 4.0.2, Windump ağ izleme programı ise 3.9.5 versiyon numarasıyla yayınlanıyorlardı. Eğer sisteminizde spesifik bir problem yoksa WinPcap sürücüsü ve WinDump Windows XP sonrası tüm işletim sistemler üzerinde de sorunsuz çalışıyorlar. Ben Windows Vista Ultimate 64 Bit üzerinde sorunsuz kullanıyorum. WinDump a göre daha kullanışlı ve yakışıklı olan Analyzer programını ise http://analyzer.polito.it/ adresindeki download linkinden indirebilirsiniz. Programın sitesinde for win32 yazıyor ama ben 64 bit işletim sisteminde de uzun süredir sorunsuz kullanıyorum.
Bu üç programı da bilgisayarınıza indirdikten sonra önce WinPcap sürücü paketini kurarak işe başlamalısınız. WinPcap sürücüsü kurulum paketini indirdikten sonra kurmanız çok kolay olacaktır. Ayrıca istediğiniz zaman Denetim Masasında bulunan Program Ekle Kaldır ekranından kaldırabilirsiniz. Analyzer programını da basit bir program kurar gibi bilgisayarınıza kurabilir, istediğiniz zaman kaldırabilirsiniz. WinDump için ise kurulum işlemi gerekmiyor, Windump.exe dosyasını MS DOS komut kipinde ileride anlatacağım şekilde kullanarak ağ trafiğinizi izleyebiliyorsunuz.
Kurulum işlemlerini yaptınız, şimdi Analyzer e göre daha sıkıcı görünen WinDump ile ağ trafiğimizi izlemeye başlayarak sabrımızı sınayalım.
www.nexyazilim.com/blog
WinDump ile ağ trafiğini izlemek
Eğer Uniz işletim sistemine aşinaysanız popüler bir metin tabanlı ağ analizörü olan TCPDump programını biliyorsunuzdur. Bu program ağ üzerinde gördüğü tüm paketlerin bir özetini veya hexadecimal olarak içeriğini verebilmekteydi. TCPDump hangi tip paketlerin yakalanacağını belirleyen basit komut satırı parametreleriyle çalışmaktaydı. WinDump programını da TCPDump ın windows komut istemi ortamına uyarlanmış ve biraz gelişmiş bir şekli gibi düşünebilirsiniz.
WinDump Komut Satırı Parametreleri
WinDump programının ilk parametresi hangi network arayüzünün trafiğini izlemek istediğinizi belirlemenize yarar. Birçok bilgisayarın birden fazla ağ arayüzü vardır, bunlar İnternet Servis Sağlayıcı (ISP = Internet Service Provider) lara ulaşmak için kullanılan modemler, ethernet kartları veya yazılım yoluyla oluşturulmuş sanal arayüzler olabilir. Bilgisayarınızdaki network arayüzlerini listelemek için WinDump ı "-D" parametresiyle kullanın.

Yukarıda gördüğünüz benim sistemin Realtek Chipsetli bir ethernet kartı ve Vista İşletim Sisteminin oluşturduğu bir sanal arayüz içermektedir. WinDump ile ağ trafiğiniz izlemeye başladığınızda normalde ilk sıradaki arayüz üzerinden izleme yapar. Eğer başka bir arayüz üzerinden ağ trafiğini izlemek istiyorsanız WinDump ı "-i" parametresiyle kullanmalısınız.

WinDump çok becerikli bir programdır. Tahmin edeceğiniz gibi özelliklerinden istifade etmek için kullanabileceğiniz onlarca parametresi vardır. Aşağıda bunların bir kısmının listesini görebilirsiniz.
|
Parametre |
İşlev |
|
-a |
Ağ adreslerini isimlere dönüştürmeye çalışır. |
|
-B büyüklük |
İzleme arabelleğini büyüklükle belirtilen miktarda byte kadar ayarlar. |
|
-c sayı |
Sadece sayı ile belirttiğiniz kadar paketi yakalar |
|
-D |
Sistemde yüklü tüm ağ arayüzlerini listeler |
|
e |
Çıktının her satırı için bağlantı seviyesi bilgisini verir. |
|
F dosya |
Okuma filtresi deyimlerini dosya ile belirtilen dosyadan okur |
|
i arayüz no |
D parametresiyle listelenen ağ arayüzlerinden belirtilen numaradaki arayüz üzerinden trafiği izler |
|
n |
Adresleri isimlere dönüştürmeyi engeller |
|
N |
Domain adlarının tam olarak yazılmasını engeller |
|
q |
Mümkün olan en hızlı şekilde paket bilgilerini görüntülemeye çalışır |
|
r dosya |
Dosya ile belirtilen dosyadan izleme kayıtlarını okur |
|
S |
Kesin TCP paket sıra numaralarını yazar |
|
s uzunluk |
Paketlerden uzunluk ile belirtilen byte kadar bilgi okur. Varsayılan değer 68 dir. |
|
t |
Her satıra zaman bilgisinin yazılmasını engeller |
|
w dosya |
Çıktıyı dosya ile belirtilen dosyaaya kaydeder. |
|
X |
Tüm paketleri hem ASCII hem de hex olarak görüntüler |
|
x |
Tüm paketleri sadece hex olarak görüntüler |
Bu parametrelerin çeşitli kombinasyonlarını kullanarak izlemeyi özelleştirebilirsiniz. Örneğin şu komut her paketin 128 byte ını okuyacak, hex olarak ekranda gösterecek ve izleme.txt adlı dosyaya kaydedecektir.
WinDump -s 128 -x -w izleme.txt
WinDump Filtre Deyimleri
WinDump normalde ağ arayüzü üzerinde gördüğü tüm paketleri analiz etmeye çalışır. Bu durum bilgisayarınızın bağlı olduğu ağın durumuna bağlı olarak ağda ciddi bir trafik yoğunlaşmasına sebep olabilir. Ağ trafiği içinden tek bir IP paketini yakalamak oldukça zor bir iştir. WinDump a bazı filtreler belirleyerek ağ üzerindeki ilgilendiğiniz paketleri izlerken ağ trafiğinin yoğunlaşmasının önüne geçebilirsiniz.
WinDump filtreleme işlemi için kısa ve kullanışlı bir metod sunmaktadır. Bir filtre deyimi ile ağ trafiği üzerinde izlemek istediğiniz paketleri belirleyerek ve filtreleme parametrelerinizi özelleştirerek istediğiniz paketleri izlemede ustalaşabilirsiniz. Bir filtre deyimi bir ya da birkaç parçadan oluşur. Her parça filtrelenecek özel bir öğeyi tanımlar ve bir ya da birkaç niteleyici ile çalışır. Üç tip niteleyici vardır:
- Tanımlayıcı isim ya da numarayla atıfta bulunulan obje
- Objeye ulaşan paketlerin akış yönü
- Adres üzerinde izleme yapabilmek için özel bir protokol
Kafanız karışmasın, WinDump ile bu niteleyicileri pratikte kullanmak çok kolaydır. Örneğin sadece ağ üzerindeki IP paketlerini izlemek istiyorsanız:
WinDump ip
Bu komut protokol, kaynak - hedef adres ayrımı yapmadan tüm IP paketlerini izlemenizi sağlayacaktır. Eğer özel olarak bir adres üzerindeki IP trafiğini izlemek istiyorsanız, örneğin:
WinDump ip 192.168.1.19
www.nexyazilim.com/blog
komutu ile 192.168.1.19 IP adresine sahip bilgisayara gelen veya giden tüm IP paketlerini izleyebilirsiniz. Biraz daha özelleştirecek olursak, sözgelimi 192.168.1.19 IP nolu bilgisayardan gelen (ağa çıkan) paketleri izlemek için
WinDump ip src 192.168.1.19
ile ağ izlemeyi özelleştirebilirsiniz.
Veya bir alt ağ (subnet) üzerindeki tüm trafiği izlemek için örneğin
WinDump ip host 192.168.1
şeklinde parametre belirtebilirsiniz.
Dikkat : Network uygulamaları geliştirmek istiyorsanız kullandığınız ağ tipi konusunda bilgili olun. Eğer bir switch ile bağlıysanız ağ üzerindeki trafiği switch in blokajı yüzünden göremeyebilirsiniz. Ama bir hub yoluyla bağlanıyorsanız ağ üzerindeki tüm trafiği izleyebilirsiniz. Hub ile switch arasındaki farka kısaca değinelim. Hub, bir porttan gelen veriyi geriye kalan tüm portlara dağıtır. Gelen verinin hangi bilgisayara gönderileceğine bakılmaksızın bu işlem gerçekleştirilir. Switch ise kendisine ulaşan veriyi hangi bilgisayara veya cihaza gönderilmesi gerekiyorsa o istemciye iletir. Tabii bu durumda bir switchin bir huba göre daha performanslı olduğunu görüyoruz.
WinDump ile ağ trafiğini izlemek
WinDump çıktısı ağ üzerinde izlenebilen her paketle ilgili gerekli bilgileri gösterir. Aşağıda bir http işlemi (www.google.com.tr adresine girdim) sırasında kendi bilgisayarımda WinDump ın verdiği çıktıyı görüyorsunuz.

WinDump çıktısının her satırı farklı bir ağ paketi ile ilgili bilgileri göstermektedir. Yukarıdaki örnekteki ilk iki satır istemci bilgisayarımın arp protokolünü kullanarak sunucu bilgisayarın (google) adresini bulmaya çalıştığını gösteriyor. Bilgisayarım internet ağına bir DHCP sunucusu (ADSL Modem) üzerinden bağlandığından DHCP sunucumun IP adresi olan 192.168.1.1 i görüyoruz. Doğru adresi aldıktan sonra IP oturumu başlıyor.
WinDump çıktısındaki her IP satırı aşağıdaki bilgileri verir:
- Zaman bilgisi
- Kaynak IP adresi (veya sunucu adı) ve TCP / UDP port numarası
- Hedef IP adresi (veya sunucu adı) ve TCP / UDP port numarası
- TCP veya UDP paket bilgileri.
WinDump çıktısı her ağ paketi için gerekli bilgileri vermektedir. Daha detaylı bilgi almak istiyorsanız yukarıda belirttiğim gibi -s parametresiyle her paketten alınacak bilginin boyutunu byte olarak arttırabilir, ASCII veya hex olarak paket içeriklerini görüntüleyebilirsiniz.
Bir sonraki kısımda WinDump a göre daha yakışıklı ve kullanışlı bir şekilde aynı işi yapan Analyzer programını anlatacağım. İzlemeye devam edin :)
www.nexyazilim.com/blog