关闭

用vbs写的端口扫描器

1433人阅读 评论(0) 收藏 举报

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1865次
    • 积分:29
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档
    阅读排行
    评论排行