回 帖 发 新 帖 刷新版面

主题:vb实现远程控制

做完了这些准备工作,就可以开始着手编写代码了。
在Form窗口上点击鼠标右键,选择查看代码,并在代码窗口中输入如下代码:
Private Sub Form_Load()
Winsock1.RemoteHost = "对方计算机名"
'如果想通过对方IP连接的话,请把上面一行改为Winsock1.RemoteHostIP="对方IP"。
Winsock1.RemotePort = 1001
'可以任意填写,最好在1000以上
End Sub

Private Sub cmdconnect_Click()
Winsock1.Connect         '连接主机
Cmdcommand.Enabled=True   '将cmdcommand按钮设为有效
cmdconnect.Enabled = False
End Sub

Private Sub cmdCommand_Click()
Dim CommandMain As String
CommandMain = InputBox("请输入命令:", "命令窗口")
Winsock1.SendData CommandMain '向服务器端发送数据
End Sub
    看到这里应该祝贺你,你已经完成了客户端的编写。不要这麽吃惊,真的就这麽简单。
当然前面已经说过,这种程序是由两部分组成的,所以光学会做客户端还不够。你还必须要
编写一个服务器端来接受并执行客户端所发出的命令,否则的话你所发出的命令就会"一去兮
,不复返也"。
    编写服务器端的程序前,必须明确的是:你到底要服务器端计算机做什麽?我们假定要
服务器端计算机在接受到reboot命令后重启计算机,接受到shutdown命令后关闭计算机,接
受到logoff命令后注销计算机、接收到close命令后退出本程序以及接受到其他命令后默认为
Message消息。为此我们必须用到Exitwindowsex这个api函数,这个函数的具体用法会在下面
说明。
    好了,明确了目的后,我们要做的就是开始着手编写代码了。请先将前面编好的客户端
程序编译后保存,然后建立新工程,加入一个Winsock1控件,并将控件的Protocol属性设为
SckTcpProtocol。同客户端一样进入代码窗口加入如下代码:
'*************************************************************************
Private Const EWX_LOGOFF = 0
Private Const EWX_REBOOT = 2
Private Const EWX_SHUTDOWN = 1
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal
dwReserved As Long) As Long
'*************************************************************************
'以上部分为api函数的声明部分,请不要做任何修改。

Private Sub Form_Load()
Winsock1.LocalPort = 1001 '注意这里的设置一定要和客户端中Winsock1.RemotePort所使
用的端口一致,否则将无法使用。
Winsock1.Listen '将1001端口状态设为监听状态
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
'处理错误如果有错误发生则跳过错误
On Error Resume Next
If Winsock1.State <> sckClosed Then '如果State状态为sckClosed,则关闭Winsock
连接。
Winsock1.Close
End If
Winsock1.Accept requestID            '接受连接
'处理错误如果有错误发生则报告出错提示
If Err Then
MsgBox Error
End If
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'以下部分为定义的简单协议
Dim strdata As String
Winsock1.getdata strdata    '获取客户端发出的命令
Select Case strdata
Case "reboot" '当strdata的值为reboot时重新启动计算机,以下几条代码的作用以此类推

ExitWindowsEx EWX_REBOOT, 0
Case "shutdown"
ExitWindowsEx EWX_SHUTDOWN, 0
Case "logoff"
ExitWindowsEx EWX_LOGOFF, 0
Case  "close"
end
Case Else
MsgBox strdata, vbInformation, "消息"
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close '关闭程序时断开连接
End Sub
    

我做了改动,让控制很多机器,可总不成功,请高手帮忙,告诉我该怎么改!谢谢!

回复列表 (共24个回复)

沙发

很容易呀!服务器端不用修改,你要控制的没台计算机都要运行服务器端程序;
需要改变的是客户端,只需要添加一个TEXTBOX控件textbox1,用来输入控制的计算机名称,将
Winsock1.RemoteHost = "对方计算机名"
Winsock1.RemotePort = 1001
代码改为
Winsock1.RemoteHost = textbox1.text
Winsock1.RemotePort = 1001
并将其移至cmdconnect_Click()子程序 的首部,然后去掉Form_Load()子程序如:
Private Sub cmdconnect_Click()
Winsock1.RemoteHost = textbox1.text
Winsock1.RemotePort = 1001
Winsock1.Connect         '连接主机
Cmdcommand.Enabled=True   '将cmdcommand按钮设为有效
cmdconnect.Enabled = False
End Sub


板凳

Winsock这个控件是哪里来的。

3 楼

请问可以操作远程机器上的另一个vb程序吗?

4 楼

选择菜单[工程]---[部件]----[microsoft winsock control 6.0],即可在控件箱内添加winsock控件。也可以控制另一个vb程序。

5 楼

选择菜单[工程]---[部件]----[microsoft winsock control 6.0],即可在控件箱内添加winsock控件。也可以控制另一个vb程序。

6 楼

原来VB的SOCKET可以支持,多人控制,而不需要UDP格式呀?

7 楼

在服务器端创建WInsock控件数组,有多少台客户,就放多少,然后让winsock1(0)侦听,其他的接受其他的登陆要求!

8 楼

编写了用来提高水平是好的,用处却不大。
远程控制的关键是要启动服务端!可是这谈何容易?首先要探测密码,这已经要靠运气了,好了,密码到手了,连接,上传服务端,可是你的服务端伪装得足够骗过杀毒软件吗?就算这也做到了,启动,NT下还好,98下怎么办?就算服务端已经执行了,放火墙呢?所以说,远程控制,难,玩玩而已,真要控制,冰河、广外女生、pcanywhere等,多的是!
个人意见。

9 楼

呵呵 我终于找到了一个适合我的地方!
     对于远程控制有这样几个问题:
          1。软件是否被客户终端承认(软件合法性)
          2。是运行于广域网还是局域网
          3。控制的难易程度

     对我远程控制本人有个看法(很多软件也是这样做的)。
    一般这些软件都在不被客户终端承认的基础上控制的,所以就不能用你们所讨论的方法,因为你需要把你的客户端安装在客户终端上(太难了),有一个办法可以解决这个问题,那就是:利用客户终端常用的网络通信软件来做我们的客户端(如杀毒软件、QQ、MSN等可以用来把自己的程序考到对方机其中,还有万象、绿竹、winxp远程帮助等可以作为我们的客户端),这里难点就是我们利用封包截获的原理破解那些软件,这样我们就能够很容易的控制客户终端。

10 楼

是不是要讨论怎么编木马呀,用VB我也做过几个,但只是在局域网里玩玩,充其量破几个密码,然后象楼上一样加重启,关机什么的,还有控制光驱、鼠标和PC喇叭。
    放在因特网上就不行了,第一个问题是,局域网中终端在因特网中是如何反映的,比如说局域网中的机子在因特网上的IP地址如何表示;第二个问题,如何在VB设计中隐藏你的线程;第三个问题,VB的致命伤,如果服务器端没有VBRUN咋办。所以做这种程序,偶觉得还是用VC好一些……

我来回复

您尚未登录,请登录后再回复。点此登录或注册