ﺗﻮﺟﻪ : ﻗﺒﻞ ﺍﺯ ﻣﻄﺎﻟﻌﻪ ﺍﻳﻦ ﺩﺭﺱ ﺷﻤﺎ ﺑﺎﻳﺪ ﺣﺪﺍﻗﻞ ﺁﺷﻨﺎﻳﻲ ﺟﺰﺋﻲ ﺑﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ VisualBasicﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻭ ﻧﻴﺰ ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺗﻤﺎﻡ ﺍﻳﻦ ﺩﺭﻭﺱ ﻓﻘﻂ ﺑﺮﺍﻱ ﺁﺷﻨﺎﻳﻲ ﺑﺎ ﻧﺤﻮﻩ ﻛﺎﺭ ﺍﺳﺖ ، ﻧﻪ ﺳﻮﺀ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻳﮕﺮﺍﻥ .
ﻣﻘﺪﻣﻪ :
ﺗﺮﻭﺟﺎﻥ ﻫﺎ ( (Trojansﻳﻜﻲ ﺍﺯ ﺟﺎﻟﺒﺘﺮﻳﻦ ﻭ ﺩﺭ ﻋﻴﻦ ﺣﺎﻝ ﺧﻼﻗﺎﻧﻪ ﺗﺮﻳﻦ ﺭﻭﺷﻬﺎﻱ ﻧﻔﻮﺫ ﺑﻪ ﻛﻼﻳﻨﺖ ﻫـﺎ می باشد . ﻣـﻦ ﻫﻤﻴﺸﻪ ﺑﻪ ﺍﻳﻦ ﻣﺒﺤﺚ ﻋﺸﻖ ﻣﻲ ﻭﺭﺯﻳﺪﻡ ﻭ ﻟﻲ ﺑﻌﻀﻲ ﺍﺯ ﺩﻭﺳﺘﺎﻥ ﺑﺎ ﻛﺎﺭﻫﺎﻱ ﺑﭽﻪ ﮔﺎﻧـﻪ ﺧـﻮﺩ ﺍﺭﺯﺵ ﻭ ﻛـﺎﺭﺍﻳﻲ ﺍﻳـﻦ ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺭﺍ ﺑﻪ ﭘﺎﻳﻴﻦ ﺗﺮﻳﻦ ﺳﻄﺢ ﺧﻮﺩ ﺗﻨﺰﻝ ﺩﺍﺩﻩ ﺍﻧﺪ . ﻣﻦ ﺳﻌﻲ ﺩﺍﺭﻡ ﻳﻚ ﺁﻣﻮﺯﺵ ﺗﺼﻮﻳﺮﻱ ﺍﺯ ﻧﻮﺷﺘﻦ ﻳﻚ ﺗﺮﻭﺟﺎﻥ ﺳﺎﺩﻩ ﻛﻪ ﻳﻚ ﭘﻴﻐﺎﻡ ﺭﺍ ﺑﺮﺍﻱ ﻗﺮﺑﺎﻧﻲ ﻣﻴﻔﺮﺳﺘﻨﺪ ، ﺩﻫﻢ .
۱ – ﺍﺑﺘﺪﺍ ﻭﻳﮋﻭﺍﻝ ﺑﻴﺴﻴﻚ ﺭﺍ ﺑﺎﺯ ﻛﺮﺩﻩ ﻭ ﺳﭙﺲ ﭘﺮﻭﮊﻩ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ .
۲ – ﺳﭙﺲ ﺩﺭ ﻗﺴﻤﺖ ﺍﺑﺰﺍﺭ ﻛﻠﻴﻚ ﻛﺮﺩﻩ ﻭ ﺳﭙﺲ ﮔﺰﻳﻨﻪ componentsﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ .
۳ – ﺍﺯ ﺻﻔﺤﻪ ﺍﻱ ﻛﻪ ﺑﺎﺭ می شود ﮔﺰﻳﻨﻪ ۶٫۰ Microsoft Winsock Controlﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ .
۴ – ﺧﻮﺏ ﺑﻌﺪ ﺍﺯ ﺯﺩﻥ ، okﺩﻭ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻛﻮﭼﻚ ﭘﺸﺖ ﺳﺮ ﻫﻢ ﻛﻨﺎﺭ ﻧﻮﺍﺭ ﺍﺑﺰﺍﺭ ﻇﺎﻫﺮ ﻣﻴﺸﻮﺩ .
۵ – ﺣﺎﻻ ﺭﻭﻱ ﺁﻥ ﻫﺎ ﻛﻠﻴﻚ ﻛﺮﺩﻩ ﻭ ﻳﻜﻲ ﺍﺯ ﺁﻧﻬﺎ ﺭﺍ ﺩﺭ ﺻﻔﺤﻪ ﻗﺮﺍﺭ ﺩﻫﻴﺪ ﻭ ﺳﭙﺲ ﻧﺎﻡ ﺁﻥ ﺭﺍ ﺑﻪ TCP1 ﺗﻐﻴﻴﺮ ﺩﻫﻴﺪ .
ﻛﻤﻲ ﺗﻮﺿﻴﺢ : Winsockﻳﻜﻲ ﺍﺯ ﺍﺑﺰﺍﺭ ﻫﺎﻱ ﺑﺮﻗﺮﺍﺭﻱ ﺍﺭﺗﺒﺎﻁ ﺍﺯ ﻃﺮﻳـﻖ پورت ﻫـﺎﻱ UDPﻭ TCPﺑـﻴﻦ ﺳـﺮﻭﺭ ﻭ ﻛﻼﻳﻨﺖ ﺩﺭ vbﻣﻴﺒﺎﺷﺪ . ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ ﺑﺎﻓﺮ ﺍﻭﺭ ﻓﻠﻮ ﻫﺎ ﻧﻴﺰ ﺩﺭ ﻭﻳﮋﻭﺍﻝ ﺑﻴﺴﻴﻚ ﻧﻴﺰ ﺍﺯ ﺍﻳﻦ ﻛﺎﻣﭙﻮﻧﻨـﺖ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻴﻜﻨﻨﺪ . ﻭ ﺗﻘﺮﻳﺒﺎ ﺗﻤﺎﻡ ﺍﺭﺗﺒﺎﻃﺎﺕ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺩﺭ vbﺑﻪ ﺍﻳﻦ ﻃﺮﻳﻖ ﺍﻧﺠﺎﻡ ﻣﻴﺸﻮﺩ .
۶ – ﺣﺎﻻ ﻳﻚ ﺑﺎﺭ ﺩﻳﮕﺮ vbﺭﺍ ﺑﺎﺯ ﻛﺮﺩﻩ ﻭ ﻳﻚ ﭘﺮﻭﮊﻩ ﺩﻳﮕﺮ ﻧﻴﺰ ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ .ﻭ ﻣﺮﺍﺣﻞ ۱ ﺗﺎ ۵ ﺭﺍ ﺭﻭﻱ ﺁﻥ ﻫﻢ ﺍﻧﺠﺎﻡ ﺩﻫﻴﺪ . ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﻳﻜﻲ ﺍﺯ ﺍﻳﻦ ﭘﺮﻭﮊﻩ ﻫﺎ ﺑﺮﺍﻱ ﺳﺮﻭﺭ ﻭ ﺩﻳﮕﺮﻱ ﺑﺮﺍﻱ ﻛﻼﻳﻨﺖ ، ﺗﺮﻭﺟﺎﻥ ﻣﺎ ﻫﺴﺘﻨﺪ.
ﺳﺎﺧﺖ : Client
ﻫﻤﺎﻥ ﻃﻮﺭ ﻛﻪ ﻣﻴﺪﺍﻧﻴﺪ ﻳﻚ ﻧﺮﻭﺟﺎﻥ ﺩﺍﺭﺍﻱ ﺩﻭ ﻗﺴﻤﺖ ﺍﺻﻠﻲ ﺍﺳﺖ ، Server , Clientﻭ ﻣﺎ ﺑﺎﻳﺪ ﺍﻳﻦ ﺩﻭ ﺭﺍ ﺟﺪﺍﮔﺎﻧﻪ ﺑﺴﺎﺯﻳﻢ ، ﺍﻟﺒﺘﻪ ﻣﻴﺸﻮﺩ ، ﺳﺮﻭﺭ ﻭ ﻛﻼﻳﻨﺖ ﺑﺎ ﻫﻢ ﺑﺎﺷﻨﺪ ﻭﺍﻱ ﺑﻪ ﻋﻠﺖ ﭘﻴﭽﻴﺪﻩ ﺷﺪﻥ ﺑﺤﺚ ﻭ ﺧﺎﺭﺝ ﺑﻮﺩﻥ ﺍﺯ ﺣﻮﺻﻠﻪ ﻣﻘﺎﻟﻪ ، ﺑﻪ ﺍﻳﻦ ﻣﻮﺿﻮﻉ ﻧﻤﻲ ﭘﺮﺩﺍﺯﻳﻢ .
ﺧﻮﺏ ﺣﺎﻻ ﻛﺎﺭ ﺭﺍ ﺷﺮﻭﻉ ﻣﻴﻜﻨﻴﻢ :
۱ – ﻳﻚ ﺍﺯ ﺩﻭ ﭘﺮﻭﮊﻩ ﺍﻱ ﺭﺍ ﻛﻪ ﺑﺎﺯ ﻛﺮﺩﻩ ﺍﻳﺪ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ ﻭ ﻫﻤﺎﻧﻨﺪ ﺷﻜﻞ ﺯﻳﺮ ﺑﺮﺍﻱ ﺁﻥ … , command , text ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ :
ﺍﺳﻢ ﻫﺮ ﻳﻚ ﺭﺍ ﻃﺒﻖ ﺁﻧﭽﻪ ﻛﻪ ﺟﻠﻮﻱ ﺁﻧﻬﺎ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ، ﺑﻨﻮﻳﺴﻴﺪ. (ﺗﺎ ﺍﻳﻨﺠﺎ ﻛﻪ ﻣﺸﻜﻠﻲ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ) ﺣﺎﻻ ﻧﻮﺑﺖ ﺑﻪ ﻛﺪ ﻧﻮﻳﺴﻲ ﺑﺮﺍﻱ ﻫﺮ ﻳﻚ ﺍﺯ ﻣﻮﺍﺭﺩ ﺑﺎﻻﺳﺖ :
ﺗﻮﺿﻴﺢ ﻣﻬﻢ : ﻳﻜﻲ ﺍﺯ ﻣﻬﻤﺘﺮﻳﻦ ﻗﺴﻤﺖ ﻫﺎﻱ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﺗﺮﻭﺟﺎﻥ ﻫﺎ ﺭﻓﻊ ﺍﺷﻜﺎﻝ ﺩﺭ ﺁﻧﻬﺎﺳﺖ ، ﭼﻮﻥ ﺩﺭ ﺻﻮﺭﺕ ﺑﺮﻭﺯ ﻣﺸﻜﻞ ﺗﺮﻭﺟﺎﻥ ﺑﻪ ﻃﻮﺭ ﺍﺗﻮﻣﺎﺗﻴﻚ ﺍﺯ ﻛﺎﺭ ﺑﺎﺯ ﺧﻮﺍﻫﺪ ﺍﻳﺴﺘﺎﺩ .
ﻣﺎ ﺑﺮﺍﻱ ﺍﻳﻦ ﻛﺎﺭ ﺑﺎﻳﺪ ﺍﺯ on errorﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻣﺜﻼ :
۱ On error goto
…
Exit sub
:۱
[[On error msg
End sub
۱-ﻛﻠﻴﺪ : connect
() Private Sub connect_Click
If (tcp1.State <> sckClosed) Then tcp1.Close
۰ = tcp1.LocalPort
۱۰۱۹ ,tcp1.connect ip.Text
End Sub
ﺩﺭ ﺧﻂ ﺍﻭﻝ ﺳﻮﻛﺖ ﺭﺍ ﭼﻚ ﻣﻴﻜﻨﺪ ﻭ ﺍﮔﺮ Winsockﺑﻲ ﻛﺎﺭ ﺑﻮﺩ ﺑﻪ ﻛﺎﺭ ﺧﻮﺩ ﺍﺩﺍﻣﻪ ﻣﻲ ﺩﻫﺪ . ﻣﻨﻈﻮﺭ ﺍﺯ ﺑﻲ ﻛﺎﺭ ﺑﻮﺩﻥ Winsockﻳﻌﻨﻲ ، ﻭﻳﻦ ﺳﻮﻛﺖ ﻣﺎ ﺗﻮﺳﻂ ﻗﺴﻤﺘﻲ ﺩﻳﮕﺮ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻧﺸﻮﺩ ﻭ ﺍﮔﺮ ﭼﻨﻴﻦ ﻣﻮﺭﺩﻱ ﭘﻴﺶ ﺑﻴﺎﻳﺪ ﺍﺭﺗﺒﺎﻁ ﺁﻥ ﺭﺍ ﻗﻄﻊ ﻣﻴﻜﻨﺪ ﻭ ﺁﻥ ﺭﺍ ﺑﺮﺍﻱ ﺍﺳﺘﻔﺎﺩﻩ ﺧﻮﺩ ﺣﺎﻇﺮ ﻣﻴﻜﻨﺪ .
ﺩﺭ ﺧﻂ ﺑﻌﺪﻱ ﻧﺸﺎﻥ ﻣﻴﺪﻫﺪ ﻛﻪ ﺍﺭﺗﺒﺎﻁ ﻣﺎ ﺑﻪ ﺻﻮﺭﺕ ﺭﻳﻤﻮﺕ ﺍﺳﺖ . ﻭ ﺩﺭ ﺧﻂ ﺳﻮﻡ ﻫﻢ ﺗﻤﺎﺱ ﺭﺍ ﺑﺮ ﺭﻭﻱ IPﻛﻪ ﻣﺎ ﺩﺭ IP.textﻭﺍﺭﺩ ﻛﺮﺩﻳﻢ ﻭ ﺑﺮ ﺭﻭﻱ ﭘﻮﺭﺕ ۱۰۱۹ ﺗﻨﻈﻴﻢ ﻛﺮﺩﻩ ﻭ ﺍﺭ ﺗﺒﺎﻁ ﺭﺍ ﺑﺮ ﻗﺮﺍﺭ ﻣﻴﻜﻨﺪ.
۲ – ﻛﻠﻴﺪ : Disconnect
() Private Sub disconnetc_Click
tcp1.Close
”ﺍﺭﺗﺒﺎﻁ ﻗﻄﻊ ﺷﺪ” = AlertTXT.Caption
AlertTXT.BackColor = &H8080FF
End Sub
ﺩﺭ ﺍﻳﻨﺠﺎ ﺩﺭ ﺧﻂ ﺍﻭﻝ ﺍﺭﺗﺒﺎﻁ ﺭﺍ ﻗﻄﻊ ﻣﻴﻜﻨﺪ ﻭ ﺩﺭ ﺧﻂ ﺩﻭﻡ ﻭ ﺳﻮﻡ ﺑﻪ ﺗﺮﺗﻴﺐ ﻋﻨﻮﺍﻥ alerttxtﺭﺍ ﺗﻐﻴﻴﺮ ﺩﺍﺩﻩ ﻭ ﺭﻧﮓ ﺁﻥ ﺭﺍ ﺑﻪ ﺭﻧﮓ ﺻﻮﺭﺗﻲ ﻛﻢ ﺭﻧﮓ ﺩﺭ ﻣﻲ ﺁﻭﺭﺩ .
۳- : tcp1_Close
ﻧﻜﺘﻪ ﺍﻱ ﻛﻪ ﻧﺒﺎﻳﺪ ﻓﺮﺍﻣﻮﺵ ﻛﻨﻴﻢ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺍﮔﺮ ﻳﻚ ﺩﻓﻌﻪ ﺍﺭﺗﺒﺎﻁ ﻗﻄﻊ ﺷﺪ ﻣﺎ ﭼﮕﻮﻧﻪ ﻣﺘﻮﺟﻪ ﺷﻮﻳﻢ ﻛﻪ ﺍﺭﺗﺒﺎﻁ ﻗﻄﻊ ﺷﺪﻩ ، ﺍﻳﻦ ﻣﺸﻜﻞ ﻳﻚ ﺭﺍﻩ ﺣﻞ ﺳﺎﺩﻩ ﺩﺍﺭﺩ ﻭﻭ ﺁﻥ ﻫﻢ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻣﻜﺎﻧﺎﺕ closeﺩﺭ Winsockﻣﻴﺒﺎﺷﺪ . ﺑﻪ ﺍﻳﻦ ﺻﻮﺭﺕ ﻛﻪ ﺩﺭ ﺷﻜﻞ ﻣﻴﺒﻴﻨﻴﺪ ﺷﻤﺎ ﺑﺎﻳﺪ ﻭﺍﺭﺩ ﻗﺴﻤﺖ ﻛﺪ ﻧﻮﻳﺴﻲ ﺷﺪﻩ ﻭ ﺍﺯ ﺯﺑﺎﻧﻪ ﺧﺼﻮﺻﻴﺎﺕ ۱ tcpﻗﺴﻤﺖ closeﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ :
ﻭﺑﻌﺪ ﺁﻥ ﻳﻚ Private Subﺑﺎ ﻧﺎﻡ :
()Private Sub tcp1_Close
ﺭﺍ ﻣﺸﺎﻫﺪﻩ ﺧﻮﺍﻫﻴﺪ ﻛﺮﺩ . ﺣﺎﻝ ﻛﺪ ﻫﺎﻱ ﺯﻳﺮ ﺍﺭ ﻭﺍﺭﺩ ﻣﻴﻜﻨﻴﻢ :
()Private Sub tcp1_Close
“ارﺗﺒﺎط ﺑﺮﻗﺮارﻧﯿﺴﺖ و ﻗﻄﻊ ﺷﺪ” = AlertTXT.Caption
AlertTXT.BackColor = &H8080FF
tcp1.Close
End Sub
ﻛﻪ ﺍﺣﺘﻴﺎﺝ ﺑﻪ ﺗﻮﺿﻴﺢ ﺍﺿﺎﻓﻪ ﻫﻢ ﻧﺪﺍﺭﺩ !
۴-: tcp1_Connect
ﺍﻳﻦ ﻗﺴﻤﺖ ﺭﺍ ﻫﻢ ﻫﻤﺎﻧﻨﺪ ﻗﺴﻤﺖ ﻗﺒﻞ ﻃﻲ ﻣﻴﻜﻨﻢ ﻭ ﺍﻳﻦ ﺑﺎﺭ ﺍﺯ ﺁﻥ ﻣﻨﻮﻱ ﻛﺸﻮﻳﻲ ﮔﺰﻳﻨﻪ connectﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻣﻴﻜﻨﻴﻢ . ﺣﺎﻝ ﺑﻪ ﻛﺪ ﻫﺎﻱ ﺍﻳﻦ ﻗﺴﻤﺖ ﺩﻗﺖ ﻛﻨﻴﺪ :
() Private Sub tcp1_Connect
”ارﺗﺒﺎط ﺑﺮﻗﺮار ﺷﺪ” = AlertTXT.Caption
۸۰ AlertTXT.BackColor = &H80FF
End Sub
ﺧﻮﺏ ، ﺍﻳﻦ ﻗﺴﻤﺖ ﺍﺯ ﻛﺪ ﻫﺎ ﺩﺭ ﺍﺻﻞ ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﺍﺭﺗﺒﺎﻁ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺍﻧﺠﺎﻡ ﺷﺪ ﺑﻪ ﻣﺎ ﺧﺒﺮ ﻣﻴﺪﻫﺪ ﻭ ﺭﻧﮓ alerttxt ﺭﺍ ﺑﻪ ﺭﻧﮓ ﺳﺒﺰﺭﻭﺷﻦ ﺩﺭ ﻣﻲ ﺁﻭﺭﺩ .
۵-ﻛﻠﻴﺪ : Send
ﺍﻳﻦ ﺁﺧﺮﻳﻦ ﺑﺨﺶ ﺍﺯ ﻛﺪ ﻧﻮﻳﺴﻲ ﺑﺮﺍﻱ ﻗﺴﻤﺖ ﻛﻼﻳﻨﺖ ﻣﻴﺒﺎﺷﺪ . ﻣﺎ ﺩﺭ ﺍﻳﻨﺠﺎ ﭘﺲ ﺍﺯ ﺑﺮ ﻗﺮﺍﺭﻱ ﺍﺭﺗﺒﺎﻁ ﻣﻲ ﺁﻳﻴﻢ ﻭ ﻳﻚ ﺳﺮﻱ ﺍﻃﻼﻋﺎﺕ (ﺍﺳﺘﺮﻳﻨﮓ) ﻛﻪ ﺩﺭ send textﻧﻮﺷﺘﻪ ﺍﻳﻢ ﺭﺍ ﺑﻪ ﺳﻤﺖ ﺳﺮﻭﺭ sendﻣﻴﻜﻨﻴﻢ . ﺗﻮﺟـﻪ ﺷـﻮﺩ ﻛـﻪ ﻣـﺎ ﻣﻴﺘﻮﺍﻧﻴﻢ ﺩﺭ ﺳﺮﻭﺭ ﺣﺘﻲ ﺍﻳﻦ ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺗﺠﺰﻳﻪ ﻭ ﺗﺤﻠﻴﻞ ﻛﻨﻴﻢ ﻭ ﻃﺒﻖ ﺩﺭﺧﻮﺍﺳﺘﻲ ﻛـﻪ ﻣـﺎ ﻣﻴﻔﺮﺳـﺘﻴﻢ ، ﺳـﺮﻭﺭ ﻛـﺎﺭ ﺧﺎﺻﻲ ﺭﺍ ﺍﻧﺠﺎﻡ ﺩﻫﺪ .
() Private Sub send_Click
On Error Resume Next
a$ = sendtext
$tcp1.SendData a
send.SetFocus
End Sub
ﺩﺭ ﺧﻂ ﻧﺨﺴﺖ ﻣﺎ ﺑﺮﺍﻱ ﺍﻳﻨﻜﻪ ﻫﺮ ﮔﻮﻧﻪ ﺍﺷﺘﺒﺎﻫﻲ ﻛﻪ ﺩﺭ ﻫﻨﮕﺎﻣﻪ ﺯﺩﻥ ﺍﻳﻦ ﺩﻛﻤـﻪ ﺑـﻪ ﻭﺟـﻮﺩ ﻣـﻲ ﺁﻳـﺪ ﺭﺍ ﻧﺎﺩﻳـﺪﻩ ﺑﮕﻴﺮﻳﻢ ﺍﺯ ﺩﺳﺘﻮﺭ On Error Resume Next ﺍﺳﺘﻔﺎﺩﻩ ﻣﻴﻜﻨﻴﻢ . ﺍﻳـﻦ ﺩﺳـﺘﻮﺭ ﺗﻤـﺎﻡ ﺧﻄﺎﻫـﺎ ﺭﺍ ﻧﺎﺩﻳـﺪﻩ ﮔﺮﻓﺘـﻪ ﻭ ﺩﻭﺑﺎﺭﻩ ﺑﻪ ﺣﺎﻟﺖ ﺍﻭﻟﻴﻪ ﺑﺮ ﻣﻴﮕﺮﺩﺩ .
ﺩﺭ ﺧﻂ ﺩﻭﻡ ﻣﺎ ﻳﻚ ﺍﺳﺘﺮﻳﻨﮓ ﺗﻌﺮﻳﻒ ﻛﺮﺩﻩ ﺍﻳﻢ ﻭ ﺍﻳﻦ ﺍﺳﺘﺮﻳﻨﮓ ﺭﺍ ﺑﻪ Sendtextﻣﺮﺑﻮﻁ ﺳﺎﺧﺘﻪ ﺍﻳﻢ . ﻳﻌﻨـﻲ ﺍﺯ ﺍﻳـﻦ ﺑﻪ ﺑﻌﺪ ﻫﺮ ﭼﻴﺰﻱ ﻛﻪ ﺩﺭ Sendtext ﻭﺍﺭﺩ ﻛﻨﻴﻢ ﺩﺭ ﺍﻳﻦ ﺍﺳﺘﺮﻳﻨﮓ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ .
ﺩﺭ ﺧﻂ ﺳﻮﻡ ﻫﻢ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺧﺼﻮﺻﻴﺎﺕ sendﺩﺍﺩﻩ ﻫﺎ ﺩﺭ Winsockﺍﺳﺘﺮﻳﻨﮓ $ aﺭﺍ ﺍﺭﺳﺎﻝ ﻣﻴﻜﻨﻴﻢ .
ﺩﺭ ﺧﻂ ۴ ﻫﻢ . ﺩﻭﺑﺎﺭﻩ ﻛﻠﻴﺪ sendﺭﺍ ﺑﻪ ﺣﺎﻟﺖ ﺍﻭﻟﻴﻪ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﻴﻢ .
ﻧﻜﺘﻪ ﻣﻬﻢ : ﺩﺭ ﺗﺮﻭﺟﺎﻥ ﻫﺎﻱ ﻣﻌﻤﻮﻟﻲ ، ﺩﺭ ﺍﺻﻞ ﻫﻴﭻ ﭼﻴﺰ ﺧﺎﺻﻲ ﺑﻪ ﺟﺰ ﭼﻨﺪ ﺩﺳﺘﻮﺭ ﺳﺎﺩﻩ ﺑﻪ ﺳﻤﺖ ﺳﺮﻭﺭ ﻓﺮﺳﺘﺎﺩﻩ ﻧﻤﻲ ﺷﻮﺩ ، ﻭ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺍﺳﺖ ﻛﻪ ﺳﺮﻋﺖ ﻋﻜﺴﻞ ﺍﻟﻌﻤﻞ ﺩﺳﺘﻮﺭﺍﺕ ﺩﺭ ﺍﻳﻦ ﻧﻮﻉ ﺍﺭﺗﺒﺎﻃﺎﺕ ﺑﺴﻴﺎﺭ ﺯﻳﺎﺩ ﺍﺳﺖ .
ﺗﻮﺟﻪ : ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺑﺨﻮﺍﻫﻴﻢ ﺍﻧﺘﻘﺎﻝ ﻓﺎﻳﻞ ﻫﻢ ﺩﺍﺷﺘﻪ ﺑﺎﺷـﻴﻢ ﺩﺭ ﺁﻥ ﺻـﻮﺭﺕ ﺑﺎﻳـﺪ ﺩﺭ ﻧﺤـﻮﻩ ﻛـﺪ ﻧﻮﻳﺴـﻲ ﺧـﻮﺩ ﺗﻐﻴﻴﺮﺍﺕ ﻋﻤﺪﻩ ﺍﻱ ﺻﻮﺭﺕ ﺩﻫﻴﻢ .
ﺳﺎﺧﺖ : Server
ﺍﻳﻦ ﻗﺴﻤﺖ ﺩﺭ ﺍﺻﻞ ﻫﻤﺎﻥ ﭼﻴﺰﻳﺴﺖ ﻛﻪ ﺑﻪ ﻗﺮﺑﺎﻧﻲ ﺩﺍﺩﻩ ﻣﻴﺸﻮﺩ .
۱ – ﺑﺮﺍﻱ ﺳﺎﺧﺖ ﺳﺮﻭﺭ ﺑﻪ ﭼﻴﺰ ﺯﻳﺎﺩﻱ ﺍﺣﺘﻴﺎﺝ ﻧﺪﺍﺭﻳﻢ . ﺍﺑﺘﺪﺍ ﻳﻚ ﻓﻮﺭﻡ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺍﻧﺘﺨﺎﺏ ﻣﻴﻜﻨﻴﻢ :
۲ – ﺑﺮﺍﻱ ﺍﻳﻨﻜﻪ ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﺳﺮﻭﺭ ﺍﺟﺮﺍ ﻣﻴﺸﻮﺩ ، ﻓﻮﺭﺍ ﻳﻚ ﭘﻮﺭﺕ ﺭﺍ ﺑﺎﺯ ﻛﺮﺩﻩ ﻭ ﺑﻪ ﺁﻥ ﭘﻮﺭﺕ ﮔﻮﺵ ﺩﻫﺪ ﻣﺎ ﺑﺎﻳﺪ ﺑﻪ (Winsock) – tcp1ﺩﺳﺘﻮﺭ ﺩﻫﻴﻢ ﺗﺎ ﺑﻪ ﭘﻮﺭﺕ ﻣﻮﺭﺩ ﻧﻈﺮ ﻣﺎ ﮔﻮﺵ ﻛﻨﺪ ، ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺩﺭ form_loadﺍﻳﻦ ﻛﺪ ﻫﺎ ﺭﺍ ﻭﺍﺭﺩ ﻣﻴﻜﻨﻴﻢ :
() Private Sub Form_Load
On Error Resume Next
۱۰۱۹ = tcp1.LocalPort
tcp1.Listen
End Sub
ﺑﺮﺍﻱ ﺗﻮﺿﻴﺢ ﺧﻂ ﺍﻭﻝ ﺑﻪ ﻗﺴﻤﺖ ۵ ﺩﺭ ﻛﻼﻳﻨﺖ ﻣﺮﺍﺟﻌﻪ ﻛﻨﻴﺪ . ﺩﺭ ﺧﻂ ﺩﻭﻡ ﻣﺎ ﭘﻮﺭﺗﻲ ﺭﺍ ﻛﻪ ﺩﺭ clientﺍﻧﺘﺨﺎﺏ ﻛﺮﺩﻳﻢ ، ﺍﻳﻨﺠﺎ ﻫﻢ ﻭﺍﺭﺩ ﻣﻴﻜﻨﻴﻢ ﻭ ﺩﺭ ﺧﻂ ﺳﻮﻡ ﺑﻪ ﺁﻥ ﭘﻮﺭﺕ ﮔﻮﺵ ﻣﻴﺪﻫﻴﻢ .
ﮔﻮﺵ ﺩﺍﺩﻥ ﺑﻪ ﭘﻮﺭﺕ : ﻳﻌﻨﻲ ﺍﻳﻦ ﭘﻮﺭﺕ ﺑﺎﺯ ﻭ ﻓﻌﺎﻝ ﺍﺳﺖ ﻭ ﻣﻨﺘﻈﺮ ﺍﺭﺍﺋﻪ ﺩﺳﺘﻮﺭﺍﺕ ﺍﺯ clientﻣﻲ ﺑﺎﺷﺪ .
۳- : tcp1_Close
ﺑﺮﺍﻱ ﺗﻮﺿﻴﺤﺎﺕ ﺑﻪ ﻗﺴﻤﺖ ﻛﻼﻳﻨﺖ ﻣﺮﺍﺟﻌﻪ ﺷﻮﺩ . ﻛﺪ ﻫﺎﻱ ﻣﺮﺑﻮﻃﻪ ﺑﻪ ﺷﻜﻞ ﺯﻳﺮ ﺍﺳﺖ .
()Private Sub tcp1_Close
On Error Resume Next
tcp1.Close
۱۰۱۹ = tcp1.LocalPort
tcp1.Listen
End Sub
ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﻭﻗﺘﻲ ﺑﻪ ﻫﺮ ﺩﻟﻴﻠﻲ ﺍﺭﺗﺒﺎﻁ ﻗﻄﻊ ﻣﻲ ﺷﻮﺩ ، ﮔﻮﺵ ﻛﺮﺩﻥ ﺳﻮﻛﺖ ﺑﻪ ﭘﻮﺭﺕ ﻫﻢ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﻴﺸﻮﺩ ﻭ ﻣﺎ ﺩﺭ ﺧﻂ ۳ ﻭ ۴ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺳﺮﻭﺭ ﺩﺳﺘﻮﺭ ﻣﻴﺪﻫﻴﻢ ﻛﻪ ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺍﺭﺗﺒﺎﻁ ﻗﻄﻊ ﺷﺪ ، ﺩﻭﺑﺎﺭﻩ ﺑﻪ ﭘﻮﺭﺕ ۱۰۱۹ ﮔﻮﺵ ﻛﻦ ﻭ ﻣﻨﺘﻈﺮ ﺩﺳﺘﻮﺭﺍﺕ ﺑﺎﺵ .
۴ -: tcp1_ConnectionRequest
ﻛﺪﻫﺎﻱ ﻣﺮﺑﻮﻁ ﺑﻪ ﺁﻥ :
(Private Sub tcp1_ConnectionRequest (ByVal requestID As Long
If (tcp1.State <> sckClosed) Then tcp1.Close
۰ = tcp1.LocalPort
Tcp1.Accept requestID
End Sub
ﺍﻳﻦ ﻛﺪ ﺑﺎﻋﺚ ﻣﻴﺸﻮﺩ ﺗﺎ ﺳﺮﻭﺭ ﻣﺎ ﺩﺭ ﺻﻮﺭﺕ ﺑﺮﻗﺮﺍﺭﻱ ﺍﺭﺗﺒﺎﻁ ﺑﺎ ، clientﺑﻪ clientﺍﻋﻼﻡ ﻛﻨﺪ ﻛﻪ ﺍﺭﺗﺒﺎﻁ ﺑﺎ ﻣﻮﻓﻘﻂ ﺍﻧﺠﺎﻡ ﺷﺪ ﺍﺳﺖ .
۵ – ﺩﺭﻳﺎﻓﺖ ﺍﻃﻼﻋﺎﺕ :
ﻛﺪﻫﺎﻱ ﻣﺮﺑﻮﻁ ﺑﻪ ﺁﻥ :
(Private Sub tcp1_DataArrival (ByVal bytesTotal As Long
Dim Data as String
On Error Resume Next
Tcp1.GetData Data
If Data = “end” Then End
A$ = Data
$MsgBox A
End Sub
ﺩﺭ ﺧﻂ ﺍﻭﻝ ﺍﻳﻦ ﻛﺪ ﻣﺎ ﺍﺳﺘﺰﻳﻨﮓ dataﺭﺍ ﺗﻌﺮﻳﻒ ﻣﻴﻜﻨﻴﻢ ﻭ ﺩﺭ ﺧﻂ ﺩﻭﻡ ﺑﺮﺍﻱ ﺭﺩ ﻛﺮﺩﻥ ﻫﺮ ﮔﻮﻧﻪ ﺍﺷﻜﺎﻟﻲ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺗﻮﺿﻴﺢ ﻣﻴﺪﻫﻴﻢ ﻭ ﺩﺭ ﺧﻂ ﺳﻮﻡ ۱ tcpﺭﺍ ﻭﺍﺭﺩﺍﺭ ﻣﻴﻜﻨﺪ ﺍﺳﺘﺮﻳﻨﮓ dataﺭﺍ ﻛﻪ ﺍﺯ clientﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﻭ ﻣﻨﺘﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪﻥ ﺍﺳﺖ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ .
ﺩﺭ ﺧﻂ ۵ ﻫﻢ ﺍﺳﺘﺮﻳﻨﮓ dataﺭﺍ ﺑﻪ ﻳﻚ ﺍﺳﺘﺮﻳﻨﮓ ﻛﻠﻴﺘﺮ ﻛﻪ ﻗﺎﺑﻠﻴﺖ ﺗﻌﺮﻳﻒ ﺷﺪﻥ ﻫﻢ ﺩﺍﺭﺩ ﺭﺑﻂ ﻣﻴﺪﻫﻴﻢ . ﻭ ﺳﭙﺲ ﺩﺭ ﺧﻂ ۶ ﺍﺳﺘﺮﻳﻨﮓ ﻣﺘﻨﻲ $ aﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﻳﻚ ﭘﻴﻐﺎﻡ ﺑﻪ ﻗﺮﺑﺎﻧﻲ ﻧﺸﺎﻥ ﻣﻴﺪﻫﺪ .
ﻭ ﺍﻣﺎ :
ﺩﺭ ﺧﻂ ۴ ﭼﻪ ﻣﻲ ﮔﺬﺭﺩ :
ﺩﺭ ﺍﻳﻦ ﺧﻂ ﻣﺎ ﺁﻣﺪﻳﻢ ﺩﻳﺘﺎ ﻫﺎﻱ ﺩﺭﻳﺎﻓﺘﻲ ﺍﺯ ﺳﻤﺖ ﺳﺮﻭﺭ ﺭﺍ ﻛﻪ ﺑﻪ ﺻﻮﺭﺕ ﻣﺘﻦ ﺍﺳﺖ ﺭﺍ ﺟﻬﺖ ﺩﺍﺭ ﻛﺮﺩﻳﻢ . ﻳﻌﻨﻲ ﺑﻪ ﺳﺮﻭﺭ ﺩﺳﺘﻮﺭ ﺩﺍﺩﻳﻢ ﻛﻪ ﻫﺮ ﮔﺎﻩ ﻛﻼﻳﻨﺖ ﻛﻠﻤﻪ endﺭﺍ ﺑﻪ ﺗﻨﻬﺎﻳﻲ ﺗﺎﻳﭗ ﻛﺮﺩ ﻭ ﺑﺮﺍﻱ ﺗﻮ ﻓﺮﺳﺘﺎﺩ ، ﺧﻮﺩ ﺭﺍ ﻛﺎﻣﻼ ﺍﺯ ﺭﺩﻩ ﺧﺎﺭﺝ ﻛﻦ ﻭ ﺑﺮﻧﺎﻣﻪ ﺧﻮﺩ ﺭﺍ ﺑﺒﻨﺪ .
ﺍﻳﻦ ﻗﺴﻤﺖ ﺭﺍ ﺑﺮﺍﻱ ﺁﻥ ﺁﻭﺭﺩﻡ ﺗﺎ ﻛﺴﺎﻧﻲ ﻛﻪ ﻣﻴﺨﻮﺍﻫﻨﺪ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﭘﻴﺸﺮﻓﺘﻪ ﺗﺮ ﺭﺍ ﺑﻨﻮﻳﺴﻨﺪ . ﺭﺍﻩ ﺭﺍ ﺑﻠﺪ ﺑﺎﺷﻨﺪ ﻭ ﮔﻴﺞ ﻧﺸﻮﻧﺪ .
ﻛﻼﻡ ﺁﺧﺮ : ﺑﺎ ﺍﻳﻨﻜﻪ ﺍﻳﻦ ﻣﻘﺎﻟﻪ ﺍﺯ ﻣﻦ ﺍﻧﺮﮊﻱ ﺯﻳﺎﺩﻱ ﺑﺮﺩ . ﻭﻟﻲ ﻣﻦ ﺳﻌﻲ ﺧﻮﺩ ﺭﺍ ﻛﺮﺩﻡ ﻛﻪ ﺩﺭ ﺟﺎﻳﻲ ﺍﺯ ﺁﻥ ﻛﻢ ﻧﮕﺬﺍﺭﻡ . ﺍﮔﺮ ﺩﻭﺳﺘﺎﻥ ﻳﺎﺭﻱ ﻛﻨﻨﺪ ﻭ ﺍﻳﻦ ﮔﻮﻧﻪ ﻣﻘﺎﻻﺕ ﺑﺎ ﺍﺳﺘﻘﺒﺎﻝ ﺭﻭﺑﻪ ﺭﻭ ﺷﻮﺩ . ﺣﺘﻤﺎ ﻃﺮﻳﻘﻪ ﻧﻮﺷﺘﻦ ﺁﻧﺘﻲ ﻭﻳﺮﻭﺱ ﻫﺎ ﻭ ﺁﻧﺘﻲ ﺗﺮﻭﺟﺎﻥ ﻫﺎ ﺭﺍ ﻫﻢ ﺗﻮضیح ﻣﻴﺪﻫﻢ .
ﺳﻮﺭﺱ ﻛﺎﻣﻞ ﻛﻼﻳﻨﺖ :
()Private Sub connect_Click
If (tcp1.State <> sckClosed) Then tcp1.Close
tcp1.LocalPort = 0
tcp1.connect ip.Text, 1019
End Sub
————————————————–
Private Sub disconnetc_Click()
tcp1.Close
AlertTXT.Caption = “”ﺍﺭﺗﺒﺎﻁ ﻗﻄﻊ ﺷﺪ
AlertTXT.BackColor = &H8080FF
End Sub
—————————————————
Private Sub Form_Resize()
If Me.WindowState = 2 Then Me.WindowState = 0
End Sub
—————————————————
Private Sub send_Click()
On Error Resume Next
a$ = sendtext
tcp1.SendData a$
send.SetFocus
End Sub
——————————————————
Private Sub tcp1_Close()
AlertTXT.Caption = “”ﺍﺭﺗﺒﺎﻁ ﺑﺮﻗﺮﺍﺭﻧﻴﺴﺖ ﻭ ﻗﻄﻊ ﺷﺪ
AlertTXT.BackColor = &H8080FF
tcp1.Close
End Sub
——————————————————-
Private Sub tcp1_Connect()
AlertTXT.Caption = “”ﺍﺭﺗﺒﺎﻁ ﺑﺮﻗﺮﺍﺭ ﺷﺪ
AlertTXT.BackColor = &H80FF80
End Sub
: ﺳﻮﺭﺱ ﻛﺎﻣﻞ ﺳﺮﻭﺭ
Private Sub Form_Load()
On Error Resume Next
tcp1.LocalPort = 1019
tcp1.Listen
End Sub
——————————————-
Private Sub tcp1_ConnectionRequest(ByVal requestID As Long)
If (tcp1.State <> sckClosed) Then tcp1.Close
tcp1.LocalPort = 0
tcp1.Accept requestID
End Sub
——————————————–
Private Sub tcp1_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
On Error Resume Next
tcp1.GetData Data
If Data = “end” Then End
A$ = Data
MsgBox A$
End Sub
—————————————–
Private Sub tcp1_Close()
On Error Resume Next
tcp1.Close
tcp1.LocalPort = 1019
tcp1.Listen
End Sub
نویسنده :ﺣﺴﻴﻦ ﻋﺴﮕﺮﻱ – ﻣﺪﻳﺮ ﮔﺮﻭﻩ ﺍﻣﻨﻴﺘﻲ ﺳﻴﻤﺮﻍ
منبع : گروه امنیتی سیمرغ