BÖLÜM 3. UZAKTAN ERİŞİM
Winsock Object Kullanarak Socket Programlama: Projedeki programlar TCP/IP protokolüyle haberleşecektir. ” Microsoft Winsock Control”, iki program arasında haberleşmeyi sağlayan VB componentidir.
Winsock Object Temel Method’lar ve Property’ler
Winsock Objesinin en çok kullanılan metodları şunlardır;
Accept: Gelen bağlantıları kabul etmek için kullanılır
Listen: Belirli bir portta dinlemede kalmak için kullanılır
Connect: Belirli bir ip’ye, belirli bir porttan bağlanmak için kullanılır.
Close: Socketi kapatır.
LocalHostName: Yerel Bilgisayar adı (bkz Denetim Masası->Ağ->Tanımlama)
LocalIp: O anki Ip numaranız
RemoteHost: Bağlanmak istediğiniz bilgisayarın ip numarası veya domain name’i
LocalPort: Yerel port
RemotePort: Bağlanılmak istenen makinenin port numarası
Event’ ler
Close: Socket kapatılırken oluşur.
Connect: Socket karsı bilgisayara bir bağlantı gerçekleştirirse oluşur. Burada ilginç bir nokta vardır. Karsı taraf sizin bağlantı isteğinizi kabul veya ret etmeden önce aslında sizin bilgisayarını da bir connect event’ i oluşur. Bu da socket uygulamalarında bir takım problemler oluşturuyor.
ConnectionRequest: Bilgisayarınıza başka bir makineden bağlantı isteği geldiğinde oluşur.
DataArrival: bilgisayarınıza veri yollandığında oluşur.
Error: Scokette hata olması durumunda bu event çalışır
SendComplete: Yollama işlemi tamamlandığında..
SendProgress: Yollama işlemi devam ederken.
Socket Durumları
Bir socket 10 durumda bulunabilir. Socket’ in o anki durumu State isimli property ile öğrenilebilir.
Socketimizin adi winsock1 olsun;
Winsock1.state = 0 ise socket kapalı durumda
Winsock1.state = 1 ise Acık durumda
Winsock1.state = 2 ise Belirli bir porttan dinleme (Listen State)
Winsock1.state = 3 ise Bağlantıda belirsizlik var
Winsock1.state = 4 ise Karşı bilgisayar bulunuyor
Winsock1.state = 5 ise Karşı bilgisayar bulundu
Winsock1.state = 6 ise Bağlanılıyor
Winsock1.state = 7 ise Bağlanıldı
Winsock1.state = 8 ise Karşı taraf bağlantıyı kesiyor
Winsock1.state = 9 ise Hata oluştu
Bir socketi dinlemeye almak ve gelen bağlantıları kabul/ret etmek
Örnek bir VB kodu;
Private Sub Form_Load() Winsock1.LocalPort = 15000 '15000 numaralı port Winsock1.Listen 'Bu porttan dinlemede kal Txt_localip.text = Winsock1.LocalIP 'Kendi ip numaramızı textbox'a yazdırıyoruz End Sub
Şimdi şu kodu inceleyelim. Bir bağlantı gelmiş ve connectionRequest Event’ i otomatik olarak oluşmuş ve bizim daha önceden yazdığımız kod otomatik olarak işletilecek;
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) Dim cevap ziyaretçi = Winsock1.RemoteHostIP DoEvents cevap = MsgBox ( ziyaretçi+ " isimli bilgisayardan bağlanma isteği geldi. Kabul ediyor musunuz?", vbYesNo + vbQuestion) If cevap = vbYes Then 'Kabul ediyorsak If Winsock1.State <> sckClosed Then Winsock1.Close 'burası çok önemli 'bir socket listen state'ti ise, close edilmeden 'accept state'e geçirilemez. Winsock1.Accept (requestID) 'Bağlantıyı kabul ettik, RequestID event'in parametresi Txt_remoteip.text = Winsock1.RemoteHostIP 'Karşı tarafın ip numarasını textbox a yaz. Else 'Kabul etmiyorsak Winsock1.Close 'Socketi kapat Winsock1.LocalPort = 15000 'Daha sonra gelecek istekler için tekrar aç Winsock1.Listen 'Dinlemede kal End If End Sub
Bilgisayarınızda 65535 adet port bulunur ve bunlardan 1000′ in altındakiler işletim sistemi tarafından kullanılır. İşimizi şansa bırakmayıp genelde programdaki port numaralarını 10000 ve ustu olarak seçelim. Su ana kadar sadece bir socket yarattık ve onu 15000 numaralı porttan dinlemeye aldık.
Bir Socket İle Belirli Bir Port’a Bağlanmak
Aşağıdaki kodu inceleyelim;
Private Sub btn_baglan_Click() Winsock2.RemoteHost = txt_remoteip.text '212.23.23.3 gibi bir ip ya da irc.xnet.org gibi bir adres Winsock2.RemotePort = 15000 'Karşı tarafın port numarası.. Bağlanabilmek için karşı taraf bu porttan 'dinlemede olmalıdır. Winsock2.Connect 'Bağlan End Sub
Bundan sonra sizin bilgisayarınızda Connect isimli Event oluşurken, karşı tarafta ise ConnectionRequest isimli event oluşur. Ama o sizin bağlantınızı kabul etmese bile sizde Connect Event’ i oluşacaktır. Basit nuke programları Connect Event’ i oluşur oluşmaz bu eventin içinden illegal data yollamaya başlarlar. Eğer bu portlardan (mesela 139) dinlemede kalan ve gelen bağlantıları ret eden bir program yazarsanız, karşı tarafın nuke programı hata verecektir. Eğer daha kotu bir programcı tarafından yazıldıysa çökecektir.
Data Yollamak
Aşağıdaki kodu inceleyelim,
Diyelim ki bir düğmeye bastınız ve karşı tarafa bir cümle yollamak istiyorsunuz;
If Winsock2.State <> sckConnected Then 'Eğer socket connect olmamışsa Winsock2.Close 'socketi kapat MsgBox "karşı tarafa bağlı değilsiniz" Exit Sub End If If Trim(txt_mesaj.text) <> "" Then 'Eğer textbox bos değilse mesaj = "<" + isim + "> " + txt_mesaj.text + Chr(10) 'irc tipinde bir mesaj formatı hazırla Winsock2.SendData (mesaj) 'Yolla End If
Bunu yaptığınızda sizin bilgisayarınızda SendProgress ve SendComplete Event’leri oluşurken, karşı tarafta DataArrival Event’ i oluşur.
Data Almak
Bilgisayarımıza karşı taraftan data geldiğinde DataArrival Event’ i oluşur.
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim msg_al As String Winsock1.GetData msg_al, vbString, bytesTotal 'vbString mesajın tipini temsil eder Txt_ekran.text=Txt_ekran.text+msg_al End Sub
Bu kodla da data alınıyor ve ekrana yazdırılıyor. Ancak önümüze her gelen datayı böyle almamalıyız. En basitinden mesajın uzunluğunu kontrol etmek gerekebilir.
TCP/IP Port Numaraları Ve Karşılıkları
Not: Bu bilgiler Windows 98 işletim sisteminin service adlı dosyasından alınmıştır
# Copyright (c) 1993-1995 Microsoft Corp. # # This file contains port numbers for well-known services as defined by # RFC 1060 (Assigned Numbers). # # Format: # # / [aliases...] [#] # echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote qotd 17/udp quote chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp-data 20/tcp ftp 21/tcp telnet 23/tcp smtp 25/tcp mail time 37/tcp timserver time 37/udp timserver rlp 39/udp resource # resource location name 42/tcp nameserver name 42/udp nameserver whois 43/tcp nicname # usually to sri-nic domain 53/tcp nameserver # name-domain server # / [aliases...] [#] domain 53/udp nameserver nameserver 53/tcp domain # name-domain server nameserver 53/udp domain mtp 57/tcp # deprecated bootp 67/udp # boot program server tftp 69/udp rje 77/tcp netrjs finger 79/tcp link 87/tcp ttylink supdup 95/tcp hostnames 101/tcp hostname # usually from sri-nic iso-tsap 102/tcp dictionary 103/tcp webster x400 103/tcp # ISO Mail x400-snd 104/tcp csnet-ns 105/tcp pop 109/tcp postoffice pop2 109/tcp # Post Office pop3 110/tcp postoffice portmap 111/tcp portmap 111/udp sunrpc 111/tcp sunrpc 111/udp auth 113/tcp authentication sftp 115/tcp path 117/tcp uucp-path 117/tcp nntp 119/tcp usenet # Network News Transfer ntp 123/udp ntpd ntp # network time protocol (exp) nbname 137/udp nbdatagram 138/udp nbsession 139/tcp NeWS 144/tcp news Sgmp 153/udp sgmp tcprepo 158/tcp repository # PCMAIL snmp 161/udp snmp snmp-trap 162/udp snmp print-srv 170/tcp # network PostScript vmnet 175/tcp load 315/udp vmnet0 400/tcp # / [aliases...] [#] sytek 500/udp biff 512/udp comsat exec 512/tcp login 513/tcp who 513/udp whod shell 514/tcp cmd # no passwords used syslog 514/udp printer 515/tcp spooler # line printer spooler talk 517/udp ntalk 518/udp efs 520/tcp # for LucasFilm route 520/udp router routed timed 525/udp timeserver tempo 526/tcp newdate courier 530/tcp rpc conference 531/tcp chat rvd-control 531/udp MIT disk netnews 532/tcp readnews netwall 533/udp # -for emergency broadcasts uucp 540/tcp uucpd # uucp daemon klogin 543/tcp # Kerberos authenticated rlogin kshell 544/tcp cmd # and remote shell new-rwho 550/udp new-who # experimental remotefs 556/tcp rfs_server rfs# Brunhoff remote filesystem rmonitor 560/udp rmonitord # experimental monitor 561/udp # experimental garcon 600/tcp maitrd 601/tcp busboy 602/tcp acctmaster 700/udp acctslave 701/udp acct 702/udp acctlogin 703/udp acctprinter 704/udp elcsd 704/udp # errlog acctinfo 705/udp acctslave2 706/udp acctdisk 707/udp kerberos 750/tcp kdc # Kerberos authentication--tcp kerberos 750/udp kdc # Kerberos authentication--udp kerberos_master 751/tcp # Kerberos authentication # / [aliases...] [#] kerberos_master 751/udp # Kerberos authentication passwd_server 752/udp # Kerberos passwd server userreg_server 753/udp # Kerberos userreg server krb_prop 754/tcp # Kerberos slave propagation erlogin 888/tcp # Login and environment passing kpop 1109/tcp # Pop with Kerberos phone 1167/udp ingreslock 1524/tcp maze 1666/udp nfs 2049/udp # sun nfs knetd 2053/tcp # Kerberos de-multiplexor eklogin 2105/tcp # Kerberos encrypted rlogin rmt 5555/tcp rmtd mtb 5556/tcp mtbd # mtb backup man 9535/tcp # remote man server w 9536/tcp mantst 9537/tcp # remote man server, testing bnews 10000/tcp rscs0 10000/udp queue 10001/tcp rscs1 10001/udp poker 10002/tcp rscs2 10002/udp gateway 10003/tcp rscs3 10003/udp remp 10004/tcp rscs4 10004/udp rscs5 10005/udp rscs6 10006/udp rscs7 10007/udp rscs8 10008/udp rscs9 10009/udp rscsa 10010/udp rscsb 10011/udp qmaster 10012/tcp qmaster 10012/udp
Yayım tarihi: 2008/01/12 Etiketler: c++ paralel port, paralel port, robot arm, robot kol, robot projesi, step motor, Visual Basic, winsock object
hocam bu kadar güzel bir kaynağı paylaştığınız için gerçekten yürekten teşekkür ediyorum.
Yaptığın ve paylaştığın projeye göz attım. Hocam bir çok kaynaktan yararlanarak toparlamışsın emeğin için tşk ederiz. Benim gibi bu işe merak sarmış ve yeni başlayan arkadaşlar için büyük bir imkan. Çok Tşk ediyorum tekrar. Izmir/ Bornova
oldukça basit yerine kullanımı oldukça basit desek:)
Emeğe saygı hocam ilerleyen günlerde size ulaşma imkanı bulabilirim inşallah ben bitirme tezi olarak aldım bu konuyu ve suan için pek fazla bilgiye sahip değilim iyi günler
hocam emeginize saglık teşekkur ederim
gerçekten güzel ama benim merak ettigim kendi bilgisayarımızda kac tane acık port var ve bunları nasıl buluruz trojenlerdemi portları acıyor bunları merak ediyorum birde kendimizde portları acacak bir prg yazabilirmiyiz bu yazdıgımız portlar bir link yardımı ile acabilirmi veya virüslere takılırmı
elinize beyninize sağlık…
hocam gayet anlaşılır ve basit anlatmışsın.
Elinize sağlık.
gerçekten çok güzel bir çalışma emeğe saygı
hocam emeğinize sağlık Allah razı olsun uzun zamandır yazılarınızı takip ediyorum sayenizde 1 7D sinema (8kişilik) 1 cnc router (250×180) imal ettim şimdi sayenizde üretim bantı kurmayı hedefliyorum