用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 下 使用 就行
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值