Başlangıç > Dökümanlar > Visual Basicde Winsock Kullanımı

Visual Basicde Winsock Kullanımı

Merhabalar arkadaşlar, Visual Basic’de, Winsock kontrolünün kullanımını açıklamaya çalışacağım.

TCP/IP ya da UDP protokolü aracılığı ile farklı bilgisayarlarla bağlantı kurabilir,onları kontrol edebilirsiniz. Trojan diye bildiğimiz programlar da winsock nesnesi kullanılır.

Günümüzde Adsl modemlerde firewall dediğimiz güvenlik tekniği geliştirilmiştir. Bu yüzden local bir ağa (yerel ağa) bağlandığımız gibi aynı ağ üzerinde bulunmayan (internet üzerinden) başka bir bilgisayara bağlanmak için farklı yollar deneyeceğiz.

Firewall’lar normal olarak bağlanmamıza izin vermediğinden dolay Reverse Connection (Ters Bağlantı) yöntemi geliştirilmiştir.Bu sayede firewall ı aşmış olabileceğiz. Bunu olayı genki arkadaşımız gayet güzel bir şekilde anlatmış. İsteyen arkadaşlar BURDAN yararlanabilir. Ama öncelikle winsock nesnesi ile ilgili temel bilgilendirmeleri okumanızı tavsiye ediyorum. Sonra diğer adıma geçebilirsiniz

Ben, bir ağ ile (local ağ ile) birbirine bağlanmışbilgisayarlarla iletişim kurma kısmını anlatmaya çalışacağım.

Server (Sunucu): Server bizim bağlanmak istediğimiz bilgisayara göndereceğimiz küçük programcıktır.Bu programcık bizim belirlediğimiz portu dinlemeye alır ve bir bağlantı istediği geldiği zaman (yani biz bağlanmak istediğimizde) o isteği kabul eder. Reverse Connection yönteminde ise tam tersi olur.Biz server a bağlanmayız, server bize bağlanır..

Client (Terminal): Client, server a belirlediğimiz ip numarası (burdaki ip numarası net ip si değil, local ip dir) ve port numarasıyla bağlanır.Burda önemli olan,port numaralarının birbirinin aynı olmasıdır.65535 tane port vardır.Server ve Client aynı port numarasından haberleşmesi gerekmektedir ve o portun meşgul olmaması gerekir.. Mesela

21 numaralı port; FTP nin kullanıldığı porttur
23 numaralı port; TELNET in kullanıldığı porttur
25 numaralı port; SMTP  (mail işlemleri) nin kullandığı porttur
80 numaralı port; HTTP (internet) nin kullandığı porttur

Bu liste devam eder..Biz dolu portları kullanmayacağız,aksi halde veri iletişimi gerçekleşmez..

Bir başka sorun ise server ın dinleme durumunda olmaması.. Eğer böyle bir durum varsa Client, Server a bağlanamaz.Onun için server bağlantı isteği gelene kadar sürekli dinlemede olmalı

Port (Liman): Daha önce açıkladığım gibi port server ve clientin haberleşmesini sağlayan kısımdır.

Winsock Kullanımı

Winsock, msnwinsock.ocx dosyası içinde bulunur.Bu ocx i projenize ekleyin ve artık winsock nesnesini kullanabilirsiniz

Winsock nesnesini üç biçimde inceleyeceğiz. Özellikler # Yöntemler # Olaylar

İlerleyen sayfalarda Özellikler,Yöntemler,Olaylar diye farklı kategorileri göreceksiniz..Bunları karıştırmamaya özen gösterin..

1-       Winsock’da Özellikler

Kırmızı ile işaretlenmiş kısım winsock un özelliği oluyor..Dikkat ederseniz ilk başta el ile gösterilmiş bir simge var.İşte o tarz simgeler olan kısımlar Winsock un Özellik diye bahsedeceğimiz kısımlarıdır. Ayrıca winsock seçiliyken sağ tarafta çıkan properties kısmıda winsock un özelliklerini barındırır.(Örnek 2. resim)

Portların Genel Özelliği: Windows da internet haberleşmeleri port dediğimiz kısımlar ile yapılır. Bir bilgisayarda 65535 port bulunmaktadır. Bu portlar aracılığı ile veri iletişimi sağlanır. Internet programları bir şey ile haberleşmek isteyince kullanılmayan bir port aracılığı ile bunu yapabilir.

Local port ve Remote Port

Local Port, kendi bilgisayarımızda kullanmak istediğimiz “boş” olan bir portun numarası, Remoteport ise bağlantı kurmak istediğiniz bilgisayarın kullanmak istediğiniz “boş” port numarası. Bazı portlar standart olarak kullanılmaktadır. Mesela 80. port Internet explorer tarafından, 23 telnet tarafından, 25 Mail Gönderme Programları tarafından, 21 ftp programları tarafından… kullanılır.

Protocol: Bağlantının hangi protokol ile yapılacağı belirlenir

Alacağı değerler ve anlamları:

0- sckTCPProtocol (TCP/IP Protokolu)
1-sckUDPProtocol (UDP Protokolü)

TCP/IP ve UDP Protokollerinin Karşılaştırılması

TCP/IP protokolü ile bağlanmak isterseniz öncelikle karşıdaki bilgisayarla bağlantı kurmamız gerekmektedir. UDP protokolünde ise herhangi bir bağlantı kurulmaksızın iletişim sağlanabilir.

UDP Protokolü hızlı ancak güvenilir değildir. TCP/IP protokolü ise UDP ye göre biraz yavaş ama güvenilirdir.

Resim,müzik,dosya v.b. şeyleri TCP/IP protokolü ile, Text dediğimiz yazıları ise UDP ile gönderilmesi daha doğru olur

TCP/IP protokolünde gönderdiğiniz verinin karşı tarafa ulaşıp ulaşmadığı kontrol edilirken aynı şey UDP protokolünde yapılmaz

Remote Host: Bağlanmak istediğimiz bilgisayarın adresidir. Genellikle IP numarası şeklindedir.Ancak dns şeklindede olabilir
Remote Port: Belirlediğimiz bir port numarası ile, Remote Host da belirlenen IP ya da DNS ye bağlanmayı sağlar
State: Bu özellik bize winsock un durumunu verir. Bu da bize çok yarar sağlar, hata yapma olasılığmızı düşürür. Mesela winsock kontrolüne bağlanmadan veri göndermeye kalkarsak hatalar ile karşılaşabiliriz.Bu da pek hoş olmaz.Bu kısma dikkat ediniz !!!

State’in Alacağı değerler ve anlamları:

0     sckClosed : Kapalı
1     sckOpen : Açık
2     sckListening :Port Dinlemede – Bağlantı Beklenmede
4     sckResolvingHost :Bağantı için verilen  adres (IP ya da DNS) çözülüyor
5     sckHostResolved :Verilen Adres Çözüldü
6     sckConnection : Bağlanıyor
7     sckConnected : Bağlandı
8     sckClosing : Karşı taraf bağlantıyı kapatıyor
9     sckError : Hata oluştu

Örnek: Şuana kadar gördüğümüz özelliklerin kullanılmasını yazdım…. Formunuza winsock nesnesi ekleyin… Ve aşağıdaki kısmı yazın. Winsock un diğer yapılarını öğrendiğimizde yaptığımız bu programı genişleteceğiz.

Not: Winsock un ismi Winsock1 olarak kalsın..

2-       Winsock’da  Yöntemler

Kırmızı ile işaretlenmiş kısıma dikkatli baktığımızda başında yeşil bir şekere benzeyen bi kısım görülmektedir.Başında böyle simgeler olan kısımlarda Winsock’un Yöntemleri oluyor..

Listen – Accept: Karşıdaki bilgisayara bağlanmak için önce bağlanma isteği göndermeniz gerekir, karşı taraf ise bu bağlantının gerçekleşmesi için sürekli olarak belirtilen portu Listen Yöntemi ile dinlemeli.Bağlantı isteği geldiğinde ise ConnectionRequest olayı meydana gelir ve Accep yöntemi kullanılarak bağlantı kabul edilir

Connect: Protokol olarak TCP/IP protokolü kullanıyorsanız bağlantı için Connect Yöntemini kullanmamız gerekir

Uyarı: Connect aynı zamanda olaylarda da mevcut. Ancak onun kullanımı farklıdır!

Connect yöntemini şeklinde kullanabiliriz

Yani..

Remotehost ve remoteport u daha önce açıkladım.

Close: Bağlantıyı kesmek için bu yöntem kullanılır. Eğer yöntem başarılırsa Close olayı meydana gelir. (Olay ve Yöntemleri birbirine karıştırmayın)

Senddata, Getdata: Senddata karşı tarafa bilgi göndermek için getdata karşı taraftan gönderilen bilgiyi almak için kullanılır.

Not: Karşı taraftan veri geldiğinde DataArrival Olayı meydana gelir,o yüzden getdata yöntemini DataArrival Olayında kullanmak doğru olur

3-       Winsock da  Olaylar

Yukarıdaki resimde ok ile gösterilen kısımlarda Winsock’un özellikleridir..

ConnectionRequest: Karşı taraftan bir bağlantı isteği geldiğinde bu olay meydana gelir. Bağlantıyı kabul etmek için Accept Yöntemi kullanılmalıdır. Burda dikkat edilmesi gereken şey, daha önce bir bağlantının olup olmadığının belirlenmesidir.Bunu state özelliği ile yapabiliriz.Eğer aktif bir bağlantı varsa Close metodu ile kapatıp yeni bağlantımızı kabul etmeliyiz.
Connect: Connect olayı connect metodu ile karıştırılmamalıdır.Connect yöntemi– bağlanır, Connect Olayı ise bağlantı sağlandığında meydana gelir
Close: Close olayı, Close yöntemi ile karıştırılmamalıdır.Close yöntemi; bağlantıyı koparır. Close Olayı ise bağlantı koptuğunda meydana gelir
DataArrvival: Bağlantı kurulan bilgisayardan veri geldiğinde bu olay gerçekleşir. Veriyi almak için ise GetData Metodu kullanılır

Not: Eğer sohbet programı tarzı bir program yapmak istiyorsanız ve verileri bir text kutusunda alt alta gelmesini istiyorsanız (msnin yazışma ekranını düşünün) textbox un multiline özelliğini true yapın

Error: Bir hata meydana geldiğinde bu olay meydana gelir.

Bu olaydaki Number parametresi hata kodunu verir, Description ise hata mesajını verir (Hatanın ingilizcesini verir).

Burda siz hata numarasına göre Türkçe hataları yazabilirsiniz. Select Case yöntemini kullanarak hata numaralarına göre uygun mesajlar yazabilirsiniz

Evet şimdi basit bir client-server programı yapacağız.Programa geçmeden önce bir kaç açıklama yapayım. Kodları yazı şeklinde değil de resim olarak verdim.Çünkü kendiniz yaparak daha iyi öğrenebilirsiniz.C/P nin bir anlamı yok. Ip numarası yerine herkes kendi yerel ip sini yazsın.

Başlat-çalıştır a cmd yazın,sonra ipconfig yazıp enterlayın.Bu şekilde yerel ip nizi görebilirsiniz Dikkat edilecek bir husus da kullandığınız port numarasının o an için kullanılmamış olmasıdır.65 bin porttan artık tutturun kullanılmayan bi port 🙂

Server ve clienti kendi bilgisayarınızda da deneyebilirisiniz.Bir ağ şart değil yani. Nesnelerin isimlerini verirken ” “ işareti kullandım.Programa yazarken onlar ile yazmayın sakın 🙂

Şimdi geçelim yapacağımız client-server ikisilisine.. .

İki tane Visual Basic Programı açın birine client birine de serveri oluşturacağız..

CLIENT İÇİN;

1 tane winsock, ismi “sck”

4 label, ##### şeklinde olan labelin ismi “durum” olacak.Diğer labellerin ismi önemli değil

3 textbox. ip girilecek olan textin ismi “ip”, port girilecek textin ismi “port”, veri girilecek olan textin ismi “veri”.Ayrıca “veri” isimli textboxun multiline özelliği true olsun

3 buton.Bağlan butonunun ismi “baglan”, bağlantıyı kes butonunun ismi “kes”, gönder butonunun ismi “gonder”

Clientimiz bitti..bunu kaydetip isterseniz exe ye çevirip server yapımına geçebiliriz..

SERVER İÇİN;

1 tane winsock, ismi “sck”

4 label. ##### şeklinde olan labelin ismi “durum”

2 tane textbox.port numarası girilecek olanın ismi “port”, diğerinin ismi “veri” olacak ve onunda multiline özelliği true olsun

1 tane buton, ismi “bekle” olsun

İsterseniz sürekli port dinleyen bir program yazabilirsiniz. Benim buton olarak kullandığım yere siz bir timer ekleyerek sürekli portu dinlemeye alabilirsiniz.Bağlantı kesilse de tekrar dinletebilirsiniz.

Eğer kodları yazıp da çalıştıramadıysanız http://www.tahribat.com/download/winsockproje.rar adresinden projeyi indirebilirsiniz ama tavsiyem hazıra konmak yerine kodları kendiniz yazmanızdır!

Yukarıdaki programı değiştirerek ağda çalışan bir chat programı yapabilirsiniz 🙂

Reverse Connection yöntemini kullanarak trojan yaparsınız artık. İsterseniz önce ağda çalışan bir trojan yapın. Mesela karşı taraftaki bilgisayarın cd-romunu nasıl açtırabiliriz. Bunun için client programımızda veri göndereceğimiz kısma “cdromac” diye bir veri göndeririz. Server programımıza da gelen veriyi kontrol ettiriz.Verimiz “cdromac” ise api kullanarak cd-rom u açtırabiliriz. Daha farklı şeylerde yaptırabilirsiniz tabii. Winsock u iyi kavrayın. Yakında Reverse Yöntemi ile çalışan (net üzerinde çalışan) bir basit Trojan örneğini sizinle paylaşacağım.. Ezber yapmamak için winsock u iyi öğrenin…

Umarım herkesin anlyabileceği bir şekilde anlatabilmişimdir.Yazarlık deneyimim olmadığından dolay, bazı cümlelerde düşüklük olabilir ve iyi ifade edilmemiş olabilir.Ayrıca makaleyi çok önceden yazmıştım, belki içinde bilgi eksiklikleri- yanlışlıkları olabilir.. Anlamadığınız noktalarda benimle iletişime geçebilirsiniz..Başka bir konuda görüşmek üzere.Kolay gelsin. Hoşçakalın arkadaşlar

Kaynak: Tahribat

Reklamlar
  1. 06/06/2013, 14:27

    arkadaşlar, vb yeni başladım. kaç gündür araştırıyorum ama bir türlü çözüme ulaşamadım. heryerde aynı şekilde anlatımlarvar. benim sorunuma nolur tam detaylı bir çözüm sunun. bu winsock nesnelerini yada inet kullandığımda başka bilgisayarda çalışmıyor. benim bilgisayarımda vb6 kurulu olduğu için tüm ocxler mevcut ama her bilgisayarda mswnsck.ocx yok. dolayısıyla bunu bulamayınca çalışmıyor. karşıdaki adamada hadi mswnsck.ocx yükle diyemezsin. bu sorunun çözümü var olduğunu biliyorum ama nasıl birtürlübulamadım. galiba declare komutları ile çözülüyor. ben bu private declare lib… diye devam eden kodları nasıl eklerim. bunları ezberemi bilmek gerekiyor? yoksa vb6 ile otomatik yazdırılabiliyormu?

    arkadaşlar nolur bu sorulara bir çözüm önerisinde bulunun. şimdiden çok teşekkürler…

    Beğen

Comment pages
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: