Root > Documents > Web Güvenlik Açıkları > WinSock-2-
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > WinSock-2-
Madde
  Yazar : TheMyth
  Date : 23.11.2004 16:16:30
 
# WinSock-2-
 

Arkadaslar bunu ben yazmadim bi siteden direk almisimdir J ama hangisi hatirlamiyorum

Umarim isinize yarar...

 11. INTERNET UYGULAMALARI YARATMA

Internetten bahsederken insanların ne kastettiğini anlamak çok zordur. Çünkü ortada çok farklı türden Internet uygulamaları vardır. Visual Basic farklı türden uygulamalar geliştirebilme olanakları sağlamaktadır. Bu olanakları aşağıdaki tablo ile gösterebiliriz.

Internet Uygulaması Visual Basic Olanağı

Bilgisayarlar arası doğrudan iletişim Winsock Kontrol nesnesi

Dosya Transferi Internet Transfer Kontrol nesnesi

Web sayfalarını dolaşma WebBrowser kontrol nesnesi

Internette çalışan uygulamalar ActiveX dokümanları

Uygulamaların internet üzerinden dağıtılması Setup Wizard

HTML sayfalarında kullanılabilen bileşenler ActiveX kontrol nesneleri

Veritabanı uygulamaları Veri erişimi olan içeren dokümanlar.

Bu bölümde ActiveX Internet Control nesnelerinin kullanımı anlatılacaktır. 
   

11.1. WINSOCK CONTROL NESNESİ KULLANIMI

WinSock kontrol nesnesi, TCP ve UDP protokollerini kullanarak uzaktaki bir makineye bağlanmak, ve veri alışverişinde bulunmak için kullanılır.

Kullanımları:

  • Sunumcu makinesine göndermeden önce kullanıcı bilgilerini toplayan bir istemci uygulama yaratmak
  • Bir çok kullanıcıdan bilgi toplayan bir sunumcu uygulama yaratmak
  • Bir sohbet uygulaması gerçekleştirmek

Protokol seçimi:

  • TCP protokolü bağlantı tabanlı bir protokoldür ve telefon bağlantısı ile benzerlik gösterir. İletişimden önce bağlantının yapılması gerekir.
  • UDP protokolü bağlantısız bir protokoldür, mesajlar bilgisayarlar arasında gönderilirken bağlantı ile ilgilenilmez. Yani uygulamalar bağlantıdan bağımsız davranır.

Bu protokollerden birini seçmeye karar vermek için aşağıdaki soruların cevaplanması gerekir.

  • Gönderilen bir veri için alındı bilgisi gerekiyor mu? TCP
  • Gönderilecek veri büyük mü? TCP. (UDP ile sınırlı miktarda veri gönderilebilir ve veri bütünlüğü bozulabilir.)
  • Verilerin gönderileceği an belirsiz mi ? UDP. Örneğin bir uygulama bittiğinde başka bir uygulama bundan haberdar edilecekse UDP kullanılır.

Protokolün belirtilmesi Winsock kontrol nesnesinin Protocol özelliğine değer atamakla olur. Örneğin

Winsock1.Protocol = sckTCPProtocol

Örnek: TCP protokolünün kullanımı.

WinSock kontrol nesnesinin TCP protokolünü nasıl kullandığını görmek için aşağıdaki adımlar halinde geliştirilen uygulamayı inceleyin.

Öncelikle uygulamanın istemci veya sunumcu olmasına karar verilir. Sunumcu yaratılması demek, uygulamanın belli bir girişi dinlemesi, eğer bir istemciden bağlantı yapılırsa bu istemcinin isteğini alıp bağlantıyı gerçekleştirmek ve daha sonra istemci-sunumcu arasında veri alışverişini sağlamak demektir. Şimdi bir sunumcunun nasıl gerçekleştirildiğini görelim.

  1. Standart EXE türünden bir proje yaratın.
  2. Formun ismini frmSunumcu olarak değiştirin. Caption özelliğini de “TCP Sunumcu” olarak değiştirin.
  3. Form üzerine bir WinSock kontrol nesnesi yerleştirin ve ismini tcpSunumcu olarak değiştirin.
  4. Form üzerine iki tane TextBox yerleştirin, isimlerini txtGonder ve txtAl olarak değiştirin.
  5. Aşağıdaki kodu formun içine ekleyin.

Private Sub Form_Load()

tcpSunumcu.LocalPort = 1001

tcpSunumcu.Listen

frmIstemci.Show

End Sub

Private Sub tcpSunumcu_ConnectionRequest _

(ByVal requestID As Long)

If tcpSunumcu.State <> sckClosed Then _

tcpSunumcu.Close

tcpSunumcu.Accept requestID

End Sub

Private Sub txtGonder_Change()

tcpSunumcu.SendData txtGonder.Text

End Sub

Private Sub tcpSunumcu_DataArrival _

(ByVal bytesTotal As Long)

Dim strVeri As String

tcpSunumcu.GetData strVeri

txtAl.Text = strVeri

End Sub

Bu Sunumcuyu test etmek için bir istemci yaratalım.

  1. frmIstemci adında ve Caption özelliği “TCP Istemci olan bir form ekleyin.
  2. Yukarıdaki forma yerleştirilmiş tüm kontrol nesnelerini bu form üzerine kopyalayın. WinSock kontrol nesnesinin ismini tcpIstemci olarak değiştirin.
  3. CmdBaglan adlı bir CommandButton yerleştirin. Caption özelliğini “BAGLAN” olarak değiştirin.
  4. Kullandığınız bilgisayarın ağ ismini bulun ve aşağıdaki kodu formun kod kesimine ekleyin.

Private Sub Form_Load()

tcpIstemci.RemoteHost = "ilker"

tcpIstemci.RemotePort = 1001

End Sub

Private Sub cmdBaglan_Click()

tcpIstemci.Connect

End Sub

Private Sub txtGonder_Change()

tcpIstemci.SendData txtGonder.Text

End Sub

Private Sub tcpistemci_DataArrival _

(ByVal bytesTotal As Long)

Dim strVeri As String

tcpIstemci.GetData strVeri

txtAl.Text = strVeri

End Sub

Yukarıdaki proje basit bir istemci-sunumcu uygulamasıdır. Projeyi çalıştırın. Önce BAGLAN butonuna basın. Daha sonra txtGonder metin kutusuna yazı yazın. Yazılan yazıların aynı zamanda diğer formun txtAl metin kutusunda belirdiği görülecektir.

Bu projeyi farklı makineler üzerinde denemek de mümkündür. Tek yapılması gereken RemoteHost özelliğine uygun bir değer aktarmaktır.

11.2. INTERNET TRANSFER CONTROL NESNESİ KULLANIMI

Internet Transfer Control nesnesi HTTP ve FTP olarak bilinen ve geniş bir kullanım alanına sahip olan internet protokollerini kullanma olanağı dağlar.

ITC kullanarak bu protokolleri destekleyen herhangi bir web sitesine bağlanmak ve dosya transferi yapmak(OpenURL ve Execute metotlarını kullanarak) mümkündür.

Kullanımları:

  • Bir uygulamanın içine bir FTP ve HTTP tarayıcısı yerleştirme.
  • FTP sitesinden otomatik olarak dosya transferi sağlayan bir uygulama geliştirmek.
  • Web sayfalarının referans gösterdiği grafikleri yüklemek için uygulama geliştirmek.
  • Web sayfasından alınan dinamik verilerin istenen biçimlerde gösterilebilmesine olanak tanıyan uygulamalar geliştirmek.

Şimdi aşağıdaki FTP tarayıcısı örneğini gerçekleştirelim.

  1. Yeni bir proje yaratın, Proje adını prjFTP, form isimini frmFTP ve form Caption özelliğini “FTP BROWSER” OLARAK değiştirin.
  2. Projeyi kaydedin.
  3. Form üzerine txtAdres ve txtDir adında iki tane TextBox yerleştirin. Yerleşimlerini ileride verilecek form görüntüsüne göre yapın.
  4. Form üzerine bir ITC (Inet) nesnesi yerleştirin. İsmini inetBrowse olarak değiştirin.
  5. Aşağıdaki kodu forma ekleyin.

Option Explicit

Dim msTempDir As String

Dim msDir As String

Private Declare Function GetTempPath _

Lib "kernel32" Alias "GetTempPathA" ( _

ByVal nBufferLength As Long, _

ByVal lpBuffer As String _

) As Long

Private Sub Form_Load()

Dim lLen As Long

lLen = 144

msTempDir = Space(lLen)

lLen = GetTempPath(lLen, msTempDir)

msTempDir = Left(msTempDir, lLen)

End Sub

Private Sub txtAdres_KeyPress(KeyAscii As Integer)

If KeyAscii = Asc(vbCr) Then

KeyAscii = 0

txtAdres.SelStart = 0

txtAdres.SelLength = Len(txtAdres)

On Error GoTo errOpenURL

inetBrowse.URL = txtAdres.Text

inetBrowse.Execute , "Dir"

Caption = inetBrowse.URL

End If

Exit Sub

errOpenURL:

Select Case Err.Number

Case icBadUrl

MsgBox " YANLIS ADRES, TEKRAR GIRIN"

Case icConnectFailed, icConnectionAborted, _

icCannotConnect

MsgBox "AG BAGLANTISI YAPILAMIYOR."

Case icInetTimeout

MsgBox "BAGLANTI KAPANDI."

Case icExecuting

inetBrowse.Cancel

If inetBrowse.StillExecuting Then

Caption = "IPTAL EDILEMIYOR."

Else

Resume

End If

Case Else

Debug.Print Err.Number, Err.Description

End Select

End Sub

Private Sub txtDir_DblClick()

If txtDir.SelLength Then

If Right(txtDir.SelText, 1) = "/" Then

txtAdres = txtAdres & "/" & Left(txtDir.SelText, txtDir.SelLength - 1)

On Error GoTo errBrowse

msDir = Right(txtAdres, Len(txtAdres) - Len(inetBrowse.URL))

inetBrowse.Execute , "Dir " & msDir & "/*"

Else

msDir = Right(txtAdres, Len(txtAdres) _

- Len(inetBrowse.URL)) & "/" & txtDir.SelText

msDir = Right(msDir, Len(msDir) - 1)

inetBrowse.Execute , "Get " & msDir & _

" " & msTempDir & txtDir.SelText

End If

End If

Exit Sub

errBrowse:

If Err = icExecuting Then

inetBrowse.Cancel

If inetBrowse.StillExecuting Then

Caption = "Iptal Edilemez."

Else

Resume

End If

Else

Debug.Print Err & " " & Err.Description

End If

End Sub

Private Sub inetBrowse_StateChanged(ByVal State As Integer)

Select Case State

Case icError

Debug.Print inetBrowse.ResponseCode & " " & _

inetBrowse.ResponseInfo

Case icResolvingHost, icRequesting, icRequestSent

Caption = "Araniyor..."

Case icHostResolved

Caption = "Bulundu."

Case icReceivingResponse, icResponseReceived

Caption = "Veriler aliniyor."

Case icResponseCompleted

Dim sBuffer As String

sBuffer = inetBrowse.GetChunk(1024)

If sBuffer <> "" Then

Caption = "Tamamlandi."

txtDir = sBuffer

Else

Caption = "Dosya " & msTempDir & ". dizinine kaydedildi."

End If

Case icConnecting, icConnected

Caption = "Baglaniyor."

Case icDisconnecting

Case icDisconnected

Case Else

Debug.Print State

End Select

End Sub

Bu kod, belirtilen bir ftp adresinden dizin adlarını veya bir dosyayı alır. Eğer dizin adları alınıyorsa bu altta bulunan metin kutusuna yansıtılır. Dosya alınıyorsa dosya Windows Temp dizinine kaydedilir.

Programın çalışması aşağıdaki gibidir.
 
 

 

ITC nesnesinin işlevi kullanılan internet protokolüne göre değişir. Örneğin GetHeader metodu sadece HTTP protokolü için geçerlidir.

Internet Transfer Control nesnesinin Execute metodu ile çalıştırılabilecek komutlar aşağıdaki tablolarda gösterilmiştir.

FTP protokolü için:

CD dosya1 Belirtilen dizine geçer.

CDUP Bir üst dizine geçer.

DELETE dosya1 Belirtilen dosyayı siler.

DIR [dosya1] Belirtilen (veya aktif olan) dizini listeler.

GET dosya1 dosya2 Uzaktaki dosya1 dosyasını dosya2 ile belirtilen dosyaya

kaydeder.

MKDIR dosya1 Belirtilen isimde bir dizin yaratır.

PUT dosya1 dosya2 dosya1 adlı dosyayı uzaktaki bilgisayarda dosya2 olarak

kaydeder.

PWD Aktif olan dizinin adını döndürür.

QUIT Bağlantıyı koparır.

RECV dosya1 dosya2 GET komutu ile aynı işi yapar.

RENAME d1 d2 Belirtilen d1 dosyasının ismini d2 olarak değiştirir.

RMDIR dosya1 dosya1 ile belirtilen dizini siler.

SEND dosya1 dosya1 adlı dosyayı aynı ad ile uzaktaki sisteme kaydeder.

SIZE dosya1 Belirtilen dosyanın uzunluğunu döndürür.

HTTP protokolü için:

GET URL özelliğiyle belirtilen dosyayı getirir.

HEAD Sadece dosya başlıklarını getirir.

POST Belirtilen bir veriyi gönderir.

PUT 3. Parametre ile verilen veriyi uzaktaki veriyle değiştirir.

11.3. WEB BROWSER KONTROL NESNESİ KULLANIMI

WebBrowser kontrol nesnesi, bir web sayfalarını dolaşabilmek için bir kontrol nesnesi sağlar. Bu kontrol nesnesi form üzerine yerleştirilen bir pencere gibidir. Bu kontrol nesnesini kullanarak kendi web tarayıcımızı yapmamız mümkündür.

Bu kontrol nesnesinin kullanımı aşağıda örneklenmiştir. Burada bir form kullanılarak web sayfası görüntülenmektedir.

  1. Yeni bir proje yaratın. Formun üzerine bir WebBrowser kontrol nesnesi yerleştirin ve aşağıdaki isimlendirmeyi kullanın.


Project prjWEB

Form frmWEB

WebBrowser web1

  1. Aşağıdaki kodu formun içine ekleyin.

Private Sub Form_Load()

web1.Navigate "file:\\" & App.Path & "\v-groups.htm"

End Sub

Private Sub Form_Paint()

web1.Left = 0

web1.Top = 0

web1.Width = Me.Width

web1.Height = Me.Height

End Sub

  1. Programı çalıştırın. Çalışma sırasındaki görünüm aşağıdaki gibidir.




11.4. INTERNET EXPLORER İLE OTOMASYONUN KULLANILMASI

Internet Explorer nesnesi SHDOCVW.DLL kitaplıği içinde tanımlıdır. Bu nesnenin otomasyon çerçevesinde kullanımı aşağıda örneklenmiştir.

Örnek: Internet explorer kullanan bir form gerçekleştirimi.

  1. Yeni bir proje başlatın. Projeye aşağıdaki nesneleri ekleyin.

  2.  

Project        

Name                 

prjIE

Form        

Name                 

frmIE

 

MinButton 

False

 

MaxButton 

False 

 

Caption             

“WEB TARAYICI”

TextBox             

Name                 

txtAdres

CommandButton 

Name               

cmdIleri

 

Caption   

“>>”

CommandButton 

Name           

cmdGeri

 

Caption 

“<<”

Label             

Caption 

“Adres:”

  1. Aşağıdaki formu koda ekleyin.

Option Explicit

Dim WithEvents ie As InternetExplorer

Private Sub Form_Load()

Set ie = GetObject("", "InternetExplorer.Application")

ie.Visible = True

txtAdres = "file:\\" & App.Path & "\v-groups.htm"

End Sub

Private Sub ie_NavigateComplete2(ByVal pDisp As Object, URL As Variant)

txtAdres.Text = URL

txtAdres.SelLength = Len(txtAdres)

Caption = ie.LocationName

End Sub

Private Sub txtAdres_KeyPress(KeyAscii As Integer)

If KeyAscii = Asc(vbCr) Then

KeyAscii = 0

txtAdres.SelLength = Len(txtAdres)

ie.Navigate txtAdres

End If

End Sub

Private Sub ie_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)

Select Case Command

Case CSC_NAVIGATEBACK

cmdGeri.Enabled = Enable

Case CSC_NAVIGATEFORWARD

cmdIleri.Enabled = Enable

Case CSC_UPDATECOMMANDS

End Select

End Sub

Private Sub cmdGeri_Click()

ie.GoBack

End Sub

Private Sub cmdIleri_Click()

ie.GoForward

End Sub

Private Sub ie_OnQuit()

End

End Sub

  1. Projeyi çalıştırın. Aşağıdaki form görüntüsü çıkacaktır.

 

Şimdi burada yapılan işlemleri açıklayalım.

Form_Load olayında önce bir Internet Explorer nesnesi yaratılmaktadır. Daha sonra form üzerindek adres metin kutusuna ilk değer atanmaktadır.

Metin kutusu üzerinde ENTER tuşuna basıldığında metin kutusu içindeki adres Internet Explorer nesnesine iletilir ve belirtilen adresin açılması sağlanır.

Internet Explorer nesnesi yukarıda kullanılan WebBrowser kontrol nesnesi ile aynı özellik metot ve olaylara sahiptir.

11.5. KİŞİSEL WEB SUNUMCULARI

Kişisel Web sunumcuları (Personal Web Server) .ASP uzantılı aktif sunumcu sayfalarını kullanırlar. Bu sayfalar standart metin kütükleridir. İçinde HTML kodları ve makrolar yer alır.

Aktif sunumcu sayfaları bir sunumcu üzerinde çalışır ve sunumcunun Dosya Sistemi ile sunumcu üzerinde yüklenmiş nesneleri kullanabilme özelliğine sahiptir. Bu sayfaların en büyük yararlarından biri de yaratılmasının ve kullanılmasının çok kolay olmasıdır.

Kişisel web sunumcularının sağladığı olanaklar:

  • Internet veya Intranet üzerinden kişisel web sayfalarının dağıtılmasını sağlama
  • FTP servislerini kullanarak dosya transferini sağlama

ASP dosyaların tüm kodu sunumcu üzerinde çalışır. İstemciler sonuçları HTML formatında görürler.

ASP dosyalarında makrolar (script code) <% ve %> karakterleri arasında yazılır. Bu karakterler arasına yazılmış kodlar sunumcuda çalışır ve bu kısımlar tarayıcıda gözükmez.

Bu tür bir web sayfasına örnek olarak aşağıdaki ASP dosyası verilebilir.

BILGI.ASP

<HTML>

<HEAD><TITLE> BILGI FORMU</TITLE></HEAD>

<BODY BGCOLOR = #FFFFFF>

<HR>

<%

On Error Resume Next

Dim kisi

If Request.Form("adsoyad")=" " Then

%>

<FORM METHOD=POST ACTION="bilgi.asp">

<P>

AdSoyad: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20

NAME="adsoyad">

<P>

Dogum Yeri: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20

NAME="dyer">

<P>

Adres: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20

NAME="adres">

<P>

Semt/Ilce: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20

NAME="semt">

<P>

Sehir: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20

NAME="sehir">

<P>

Posta Kodu: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20

NAME="pkod">

</FORM>

<%

Else

set kisi = CreateObject("Bilgi.clsBilgi")

kisi.Adsoyad=Request.Form("adsoyad")

kisi.dyer=Request.Form("dyer")

kisi.adres=Request.Form("adres")

kisi.semt=Request.Form("semt")

kisi.sehir=Request.Form("sehir")

kisi.pkod=Request.Form("pkod")

%>
 
 

<P>

Ad soyad: <%kisi.Adsoyad%>

<P>

Dogum yeri: <%kisi.dyer%>

<P>

Adres : <%kisi.adres%>

<P>

Semt/Ilce: <%kisi.semt%>

<P>

Sehir: <%kisi.sehir%>

<P>

Posta kodu: <%kisi.pkod%>

<%

End If

%>

</BODY>

<HTML>

Ana Sayfa 
 

 

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©