用vbs写的端口扫描器

                                   用vbs写的端口扫描器

WSH最好的交互I/O方式莫过于MsgBox()输出与InputBox()输入了,因此在参数输入部分小神采用了
InputBox()函数,通过使用它获取远程主机的地址与端口号。

接下来是定义Winsock控件对象:
Set socket=WScript.CreateObject("MSWinsock.Winsock","winsock_")
'上面一句的意思是:建立一个名为socket的MSWinsock.Winsock对象,并定义其后的事件调用所使用的
'前缀为winsock_

设置对象socket的属性:
socket.Protocol=0 '0为TCP、1为UDP
socket.RemotePort=port '远程主机的端口号定义为用InputBox()吸入的端口号
socket.RemoteHost=host '远程主机的地址定义为用InputBox()吸入的地址

设置好相关属性后可以直接调用connect()方法:
socket.connect

需要使主线程延时,用于等待connect()建立三次握手。在此可以建立一个循环体,用于延时。
for a=1 to 30 step 1 '循环30次
WScript.sleep 10 '每次睡眠10
next '结束循环部分

在上面的延时等待时间中,若能正常地建立连接,则MSWinsock控件会自动调用connect事件。
Sub winsock_connect() '事件入口,注意:“事件”用的是子程序sub的方式,其调用sub名称的前缀
'为我们原来在创建对象时建立的前缀(调用的第二个参数)
msgbox("The "&socket.remoteport&" is opened!") '提示该端口打开了
socket.close '表明socket对象“死亡”
WScript.quit '退出程序
end sub '结束事件

若在延时后还不能建立连接(不能进入到connect事件),则在主线程中提示连接失败并关闭程序。
msgbox("The "&socket.remoteport&" is closed!") '提示该端口没有开放
socket.close '表明socket对象“死亡”
WScript.quit '退出程序

还有一点是比较重要的,就是变量的作用域问题。因为变量socket是用来定义MSWinsock.Winsock
对象类的载体,所以它必须在主线程与事件中都能被“作用”,因此必须将其定义为Public全局变量。

 

整个程序如下:
复制内容到剪贴板代码:

Public socket,a,host,port
host=inputbox("host/ip:")
port=inputbox("port:")
Set socket=WScript.CreateObject("MSWinsock.Winsock","winsock_")
socket.Protocol=0
socket.RemotePort=port
socket.RemoteHost=host
socket.connect
for a=1 to 30 step 1
WScript.sleep 10
next
msgbox("The "&socket.remoteport&" is closed!")
socket.close
WScript.quit

Sub winsock_connect()
msgbox("The "&socket.remoteport&" is opened!")
socket.close
WScript.quit
end sub
'用vbs写的端口扫描器
保存为 safer.vbs

直接 cmd 下 使用 就行
 

阅读更多
文章标签: socket cmd tcp
想对作者说点什么? 我来说一句

VB源码--端口扫描器

2009年04月23日 22KB 下载

没有更多推荐了,返回首页

不良信息举报

用vbs写的端口扫描器

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭