当前位置: 主页 > 百科 > 计算机编程 > 易语言源码 >
-12 Comments

端口扫描的源代码编写

发布于:2016-07-05  |   作者:http://www.zxjsq.net  |   已聚集:人围观


XP风格 (#绿色风格)


.子程序 _窗口_扫描配置_将被销毁


结束 ()


.子程序 _按钮_退出_被单击


结束 ()


.子程序 _按钮_关于_被单击


.子程序 _IP编辑框_起始IP_地址被改变

.局部变量 _IP, 文本型, , "0"


_IP = 分割文本 (IP编辑框_起始IP.地址, “.”, )

.如果真 (取数组成员数 (_IP) ≠ 4)

    返回 ()

.如果真结束

IP编辑框_终止IP.地址 = _IP [1] + “.” + _IP [2] + “.” + _IP [3] + “.” + “255”


.子程序 _按钮_扫描_被单击

.局部变量 _任务分发守护句柄, 整数型, 静态


.如果真 (按钮_扫描.标题 = “停止”)

    强制结束线程 (_任务分发守护句柄)

    关闭线程句柄 (_任务分发守护句柄)

    _任务分发守护句柄 = 0

    扫描结束 = 真

    按钮_扫描.标题 = “扫描”

    返回 ()

.如果真结束

.如果真 (检查IP合法性 () = 假)

    返回 ()

.如果真结束

.如果真 (检查端口合法性 () = 假)

    返回 ()

.如果真结束

.如果真 (信息框 (“共有” + 到文本 (分解IP地址 ()) + “条IP地址,是否继续?”, #是否钮 + #默认按钮二, ) = #否钮)

    清除数组 (IP数组)

    返回 ()

.如果真结束

.如果真 (信息框 (“共有” + 到文本 (分解端口号 ()) + “个端口号,是否继续?”, #是否钮 + #默认按钮二, ) = #否钮)

    清除数组 (端口数组)

    返回 ()

.如果真结束

超时 = 到整数 (编辑框_超时.内容)

重定义数组 (线程池, 假, 到整数 (编辑框_线程数.内容))

扫描结束 = 假

启动线程 (&线程超时结束守护, , )

启动线程 (&任务分发守护, , _任务分发守护句柄)

按钮_扫描.标题 = “停止”


.子程序 检查IP合法性, 逻辑型

.局部变量 _IP1, 文本型, , "0"

.局部变量 _IP2, 文本型, , "0"


_IP1 = 分割文本 (IP编辑框_起始IP.地址, “.”, )

_IP2 = 分割文本 (IP编辑框_终止IP.地址, “.”, )

.如果真 (取数组成员数 (_IP1) ≠ 4 或 取数组成员数 (_IP2) ≠ 4)

    信息框 (“未填写IP”, 0, )

    返回 (假)

.如果真结束

.如果真 (_IP1 [1] = “0” 或 _IP2 [1] = “0”)

    信息框 (“IP地址不合法”, 0, )

    返回 (假)

.如果真结束

.如果真 (_IP1 [4] = “0”)

    信息框 (IP编辑框_起始IP.地址 + “的最后一位应该从1开始”, 0, )

    返回 (假)

.如果真结束

.如果真 (到整数 (_IP1 [1]) > 到整数 (_IP2 [1]))

    信息框 (“终止IP不能小于开始IP”, 0, )

    返回 (假)

.如果真结束

.如果真 (到整数 (_IP1 [1]) = 到整数 (_IP2 [1]) 且 到整数 (_IP1 [2]) > 到整数 (_IP2 [2]))

    信息框 (“终止IP不能小于开始IP”, 0, )

    返回 (假)

.如果真结束

.如果真 (到整数 (_IP1 [1]) = 到整数 (_IP2 [1]) 且 到整数 (_IP1 [2]) = 到整数 (_IP2 [2]) 且 到整数 (_IP1 [3]) > 到整数 (_IP2 [3]))

    信息框 (“终止IP不能小于开始IP”, 0, )

    返回 (假)

.如果真结束

.如果真 (到整数 (_IP1 [1]) = 到整数 (_IP2 [1]) 且 到整数 (_IP1 [2]) = 到整数 (_IP2 [2]) 且 到整数 (_IP1 [3]) = 到整数 (_IP2 [3]) 且 到整数 (_IP1 [4]) > 到整数 (_IP2 [4]))

    信息框 (“终止IP不能小于开始IP”, 0, )

    返回 (假)

.如果真结束

返回 (真)


.子程序 检查端口合法性, 逻辑型

.局部变量 _哈希表, 文本型

.局部变量 _计次, 整数型

.局部变量 _端口, 文本型


.如果真 (编辑框_端口号.内容 = “”)

    信息框 (“请填写要扫描的端口号”, 0, )

    编辑框_端口号.内容 = “21,80,440-445,3389”

    返回 (假)

.如果真结束

_哈希表 = “1234567890,-”

_端口 = 编辑框_端口号.内容

.计次循环首 (取文本长度 (_哈希表), _计次)

    _端口 = 子文本替换 (_端口, 取文本中间 (_哈希表, _计次, 1), , , , 真)

.计次循环尾 ()

.如果真 (_端口 ≠ “”)

    信息框 (“扫描端口中只能包含数字、英文逗号和英文减号”, 0, )

    返回 (假)

.如果真结束

返回 (真)


.子程序 分解IP地址, 整数型

.局部变量 _IP1, 文本型, , "0"

.局部变量 _IP2, 文本型, , "0"


_IP1 = 分割文本 (IP编辑框_起始IP.地址, “.”, )

_IP2 = 分割文本 (IP编辑框_终止IP.地址, “.”, )

清除数组 (IP数组)

.判断循环首 (真)

    加入成员 (IP数组, _IP1 [1] + “.” + _IP1 [2] + “.” + _IP1 [3] + “.” + _IP1 [4])

    .如果真 (_IP1 [1] + _IP1 [2] + _IP1 [3] + _IP1 [4] = _IP2 [1] + _IP2 [2] + _IP2 [3] + _IP2 [4])

        跳出循环 ()

    .如果真结束

    _IP1 [4] = 到文本 (到整数 (_IP1 [4]) + 1)

    .如果真 (到整数 (_IP1 [4]) > 255)

        _IP1 [4] = “1”

        _IP1 [3] = 到文本 (到整数 (_IP1 [3]) + 1)

        .如果真 (到整数 (_IP1 [3]) > 255)

            _IP1 [3] = “0”

            _IP1 [2] = 到文本 (到整数 (_IP1 [2]) + 1)

            .如果真 (到整数 (_IP1 [2]) > 255)

                _IP1 [2] = “0”

                _IP1 [1] = 到文本 (到整数 (_IP1 [1]) + 1)

            .如果真结束


        .如果真结束


    .如果真结束


.判断循环尾 ()

返回 (取数组成员数 (IP数组))


.子程序 分解端口号, 整数型

.局部变量 _端口, 文本型, , "0"

.局部变量 _计次, 整数型

.局部变量 _临时文本数组, 文本型, , "0"


清除数组 (端口数组)

.如果 (寻找文本 (编辑框_端口号.内容, “,”, , 假) ≠ -1)

    _端口 = 分割文本 (编辑框_端口号.内容, “,”, )

.否则

    加入成员 (_端口, 编辑框_端口号.内容)

.如果结束

.计次循环首 (取数组成员数 (_端口), _计次)

    .如果 (寻找文本 (_端口 [_计次], “-”, , 假) ≠ -1)

        _临时文本数组 = 分割文本 (_端口 [_计次], “-”, )

        .如果真 (取数组成员数 (_临时文本数组) < 2)

            到循环尾 ()

        .如果真结束

        .循环判断首 ()

            .如果真 (_临时文本数组 [1] ≠ “” 且 _临时文本数组 [1] ≠ “0” 且 到整数 (_临时文本数组 [1]) < 65535)

                加入成员 (端口数组, 到整数 (_临时文本数组 [1]))

            .如果真结束

            _临时文本数组 [1] = 到文本 (到整数 (_临时文本数组 [1]) + 1)

        .循环判断尾 (到整数 (_临时文本数组 [1]) ≤ 到整数 (_临时文本数组 [2]))

    .否则

        .如果真 (_端口 [_计次] ≠ “” 且 _端口 [_计次] ≠ “0” 且 到整数 (_端口 [_计次]) < 65535)

            加入成员 (端口数组, 到整数 (_端口 [_计次]))

        .如果真结束


    .如果结束


.计次循环尾 ()

返回 (取数组成员数 (端口数组))



.子程序 线程超时结束守护

.局部变量 _线程索引, 整数型

.局部变量 _超时, 整数型


.判断循环首 (真)

    _线程索引 = 查找超时线程 ()

    .如果真 (_线程索引 = -1 且 扫描结束)

        跳出循环 ()

    .如果真结束

    .如果真 (_线程索引 > 0)

        强制结束线程 (线程池 [_线程索引].线程句柄)

        关闭线程句柄 (线程池 [_线程索引].线程句柄)

        线程池 [_线程索引].IP = “”

        线程池 [_线程索引].端口 = 0

        线程池 [_线程索引].启动时间 = 0

        线程池 [_线程索引].线程句柄 = 0

        _超时 = _超时 + 1

    .如果真结束


.判断循环尾 ()

列表框_结果.加入项目 (“共启动” + 到文本 (进度条1.位置) + “条线程,超时” + 到文本 (_超时) + “条”, 0)


.子程序 任务分发守护

.局部变量 _计次, 整数型

.局部变量 _线程索引, 整数型

.局部变量 _计数, 整数型

.局部变量 _IP数, 整数型

.局部变量 _端口数, 整数型


_IP数 = 取数组成员数 (IP数组)

_端口数 = 取数组成员数 (端口数组)

进度条1.最大位置 = _IP数 × _端口数

.计次循环首 (_IP数, _计次)

    .计次循环首 (_端口数, _计数)

        .循环判断首 ()

            _线程索引 = 查找空闲线程 ()


        .循环判断尾 (_线程索引 = 0)

        线程池 [_线程索引].IP = IP数组 [_计次]

        线程池 [_线程索引].端口 = 端口数组 [_计数]

        .如果 (单选框_TCP.选中)

            启动线程 (&TCP扫描线程, _线程索引, 线程池 [_线程索引].线程句柄)

        .否则

            启动线程 (&UDP扫描线程, _线程索引, 线程池 [_线程索引].线程句柄)

        .如果结束

        线程池 [_线程索引].启动时间 = 取启动时间 ()

        进度条1.位置 = _计次 × _端口数


    .计次循环尾 ()

.计次循环尾 ()

扫描结束 = 真


.子程序 查找空闲线程, 整数型

.局部变量 _计次, 整数型


.计次循环首 (取数组成员数 (线程池), _计次)

    .如果真 (线程池 [_计次].启动时间 = 0)

        返回 (_计次)

    .如果真结束


.计次循环尾 ()

返回 (0)


.子程序 查找超时线程, 整数型, , 返回0没有超时,返回-1没有运行的线程

.局部变量 _计次, 整数型

.局部变量 _标记, 逻辑型


.计次循环首 (取数组成员数 (线程池), _计次)

    .如果真 (线程池 [_计次].启动时间 ≠ 0)

        _标记 = 真

        .如果真 (取启动时间 () - 线程池 [_计次].启动时间 > 超时)

            返回 (_计次)

        .如果真结束


    .如果真结束


.计次循环尾 ()

.如果 (_标记)

    返回 (0)

.否则

    返回 (-1)

.如果结束



.子程序 TCP扫描线程

.参数 线程池索引, 整数型

.局部变量 _TCP连接, 网络客户端


.如果真 (_TCP连接.连接 (线程池 [线程池索引].IP, 线程池 [线程池索引].端口))

    列表框_结果.加入项目 (“[TCP]” + 线程池 [线程池索引].IP + “:” + 到文本 (线程池 [线程池索引].端口), 1)

    列表框_结果.置顶端可见项目 (列表框_结果.取项目数 () - 1)

.如果真结束

_TCP连接.断开 ()

线程池 [线程池索引].IP = “”

线程池 [线程池索引].端口 = 0

线程池 [线程池索引].启动时间 = 0

线程池 [线程池索引].线程句柄 = 0


.子程序 UDP扫描线程

.参数 线程池索引



标签:                   喜欢:收藏