易语言版的端口扫描器
核心代码如下:(以下代码仅供学习交流使用)
.版本 2.支持库 iext2.支持库 EThread.支持库 eAPI .程序集 窗口程序集1 .子程序 __启动窗口_创建完毕 .子程序 _按钮1_被单击.局部变量 末地址, 文本型.局部变量 始地址, 文本型.局部变量 循环地址, 整数型, , , 用IP地址作循环用.局部变量 循环端口, 整数型, , , 用作端口循环用.局部变量 I, 整数型 已扫描数量 = 0进程数 = 0按下停止 = 假.如果真 (按钮1.标题 = “停止”) 按下停止 = 真 返回 ().如果真结束.如果真 (IP开始.地址 = “”) 信息框 (“你必须填写开始IP地址”, 0, ) 返回 ().如果真结束.如果 (IP结束.地址 = “”) 末地址 = IP开始.地址 末地址 = 取文本左边 (末地址, 倒找文本 (末地址, “.”, , 假)) 末地址 = 末地址 + “254” IP结束.地址 = 末地址.否则 .如果结束.如果真 (IP结束.地址 = “”) 信息框 (“IP格式不对”, 0, ).如果真结束始地址 = IP开始.地址末地址 = IP结束.地址.如果 (比较IP大小 (始地址, 末地址) = 假) 信息框 (“开始地址不能大于结束地址”, 0, ) 返回 ().否则 .如果结束得到IP范围 (始地址, 末地址) ' 调用过程给IP地址赋值.如果真 (得到端口号 () = 假) 信息框 (“你的端口设置有误,请检查”, 0, ) 编辑框1.起始选择位置 = 1 编辑框1.被选择字符数 = 取文本长度 (编辑框1.内容).如果真结束 扫描端口 () .子程序 得到端口号, 逻辑型, , 将端口号存入数组,输入有错就返回假.局部变量 临时文本, 文本型, , "0".局部变量 开始端口, 文本型.局部变量 结束端口, 文本型.局部变量 临时数值, 整数型.局部变量 I, 整数型.局部变量 临时端口, 文本型 重定义数组 (端口号, 假, 0).如果真 (删首尾空 (编辑框1.内容) = “”) 信息框 (“没有填端口号”, 0, ) 返回 (假).如果真结束.如果真 (寻找文本 (编辑框1.内容, “-”, , 假) > 0) 开始端口 = 取文本左边 (编辑框1.内容, 寻找文本 (编辑框1.内容, “-”, , 假) - 1) 结束端口 = 取文本右边 (编辑框1.内容, 取文本长度 (编辑框1.内容) - 寻找文本 (编辑框1.内容, “-”, , 假)) .如果真 (到数值 (开始端口) > 到数值 (结束端口)) 返回 (假) .如果真结束 临时数值 = 到数值 (结束端口) - 到数值 (开始端口) 临时端口 = 开始端口 .计次循环首 (临时数值, I) 加入成员 (端口号, 临时端口) 临时端口 = 到文本 (到数值 (临时端口) + 1) .计次循环尾 () 加入成员 (端口号, 结束端口) 返回 (真).如果真结束端口号 = 分割文本 (编辑框1.内容, “,”, )返回 (真) .子程序 扫描端口, , 公开, 开始扫描.局部变量 I, 整数型.局部变量 J, 整数型 进度条1.最大位置 = 取数组成员数 (IP地址) × 取数组成员数 (端口号)进度条1.最小位置 = 1进度条1.位置 = 1按钮1.标题 = “停止”列表框1.清空 () .计次循环首 (取数组成员数 (IP地址), I) .如果真 (按下停止 = 真) 编辑框1.禁止 = 假 按钮1.标题 = “开始(&S)” 返回 () .如果真结束 启动线程 (&扫描, I) ' 启动进程进行扫描.计次循环尾 () .子程序 扫描.参数 IP, 整数型.局部变量 J, 整数型 .计次循环首 (取数组成员数 (端口号), J) 扫描子程序 (到整数 (端口号 [J]), IP地址 [IP]) .如果真 (按下停止 = 真) 编辑框1.禁止 = 假 按钮1.标题 = “开始(&S)” 返回 () .如果真结束 .计次循环尾 () .子程序 扫描子程序.参数 端口, 整数型, , 要检测的端口.参数 IP, 文本型, , 要检测的IP地址 信息.标题 = “当前IP地址:” + IP + “ 检测端口:” + 到文本 (端口) .如果真 (端口检测 (端口, IP)) 列表框1.加入项目 (IP + “:” + 格式化文本 (“%-5ld”, 端口) + “开放”, ).如果真结束' 输出调试文本 (当前IP + “:” + 到文本 (端口) + “ 已扫描了:” + 到文本 (已扫描数量))进度条1.位置 = 进度条1.位置 + 1.如果真 (按下停止 = 真) 编辑框1.禁止 = 假 按钮1.标题 = “开始(&S)” 返回 ().如果真结束.如果真 (进度条1.位置 ≥ 进度条1.最大位置) 进度条1.位置 = 0 编辑框1.禁止 = 假 按钮1.标题 = “开始(&S)”.如果真结束进程数 = 进程数 - 1退出许可区 (许可证号) .子程序 得到IP范围.参数 开始地址, 文本型.参数 结束地址, 文本型.局部变量 临时变量1, 文本型.局部变量 临时变量2, 文本型.局部变量 尾数, 文本型, , , 保存循环时的IP地址最尾那个数 临时变量1 = 开始地址重定义数组 (IP地址, 假, 0)IP数量 = 0.判断循环首 (比较IP大小 (临时变量1, 结束地址)) 加入成员 (IP地址, 临时变量1) 临时变量1 = IP加1 (临时变量1) IP数量 = IP数量 + 1 ' 列表框1.加入项目 (IP地址 [IP数量], ).判断循环尾 () .子程序 IP加1, 文本型, , 将一个IP 地址的值加1.参数 开始地址, 文本型.局部变量 J, 整数型.局部变量 分隔点位置1, 整数型, , "3".局部变量 临时变量1, 文本型, , "4".局部变量 临时位置, 整数型.局部变量 临时变量, 文本型 J = 1.计次循环首 (取文本长度 (开始地址), 临时位置) .如果真 (取文本中间 (开始地址, 临时位置, 1) = “.”) 分隔点位置1 [J] = 临时位置 .如果真 (J = 1) 临时变量1 [J] = 取文本中间 (开始地址, 1, 分隔点位置1 [J] - 1) .如果真结束 .如果真 (J = 2) 临时变量1 [J] = 取文本中间 (开始地址, 分隔点位置1 [J - 1] + 1, 分隔点位置1 [J] - 分隔点位置1 [J - 1] - 1) .如果真结束 .如果真 (J = 3) 临时变量1 [J] = 取文本中间 (开始地址, 分隔点位置1 [J - 1] + 1, 分隔点位置1 [J] - 分隔点位置1 [J - 1] - 1) 临时变量1 [J + 1] = 取文本右边 (开始地址, 取文本长度 (开始地址) - 分隔点位置1 [J]) 跳出循环 () .如果真结束 J = J + 1 .如果真结束 .计次循环尾 ()J = 4.判断循环首 (J > 0) .如果真 (到数值 (临时变量1 [J]) ≤ 254) .如果真 (J = 1) 临时变量 = 到文本 (到数值 (临时变量1 [J]) + 1) + “.1.1.1” 跳出循环 () .如果真结束 .如果真 (J = 4) 临时变量 = 临时变量1 [1] + “.” + 临时变量1 [2] + “.” + 临时变量1 [3] + “.” + 到文本 (到数值 (临时变量1 [J]) + 1) 跳出循环 () .如果真结束 .如果真 (J = 2) 临时变量 = 临时变量1 [1] + “.” + 到文本 (到数值 (临时变量1 [J]) + 1) + “.1.1” 跳出循环 () .如果真结束 .如果真 (J = 3) 临时变量 = 临时变量1 [1] + “.” + 临时变量1 [2] + “.” + 到文本 (到数值 (临时变量1 [J]) + 1) + “.1” 跳出循环 () .如果真结束 .如果真结束 J = J - 1.判断循环尾 ()' 结果:返回 (临时变量) .子程序 比较IP大小, 逻辑型, , 如果开始IP大于结束IP则返回真,否则返回假.参数 开始地址, 文本型.参数 结束地址, 文本型.局部变量 临时位置, 整数型.局部变量 临时变量1, 文本型, , "4".局部变量 临时变量2, 文本型, , "4".局部变量 J, 整数型.局部变量 分隔点位置1, 整数型, , "3".局部变量 分隔点位置2, 整数型, , "3" .如果真 (开始地址 = 结束地址) 返回 (真).如果真结束J = 1.计次循环首 (取文本长度 (开始地址), 临时位置) .如果真 (取文本中间 (开始地址, 临时位置, 1) = “.”) 分隔点位置1 [J] = 临时位置 .如果真 (J = 1) 临时变量1 [J] = 取文本中间 (开始地址, 1, 分隔点位置1 [J] - 1) .如果真结束 .如果真 (J = 2) 临时变量1 [J] = 取文本中间 (开始地址, 分隔点位置1 [J - 1] + 1, 分隔点位置1 [J] - 分隔点位置1 [J - 1] - 1) .如果真结束 .如果真 (J = 3) 临时变量1 [J] = 取文本中间 (开始地址, 分隔点位置1 [J - 1] + 1, 分隔点位置1 [J] - 分隔点位置1 [J - 1] - 1) 临时变量1 [J + 1] = 取文本右边 (开始地址, 取文本长度 (开始地址) - 分隔点位置1 [J]) 跳出循环 () .如果真结束 J = J + 1 .如果真结束 .计次循环尾 ()J = 1.计次循环首 (取文本长度 (结束地址), 临时位置) .如果真 (取文本中间 (结束地址, 临时位置, 1) = “.”) 分隔点位置2 [J] = 临时位置 .如果真 (J = 1) 临时变量2 [J] = 取文本中间 (结束地址, 1, 分隔点位置2 [J] - 1) .如果真结束 .如果真 (J = 2) 临时变量2 [J] = 取文本中间 (结束地址, 分隔点位置2 [J - 1] + 1, 分隔点位置2 [J] - 分隔点位置2 [J - 1] - 1) .如果真结束 .如果真 (J = 3) 临时变量2 [J] = 取文本中间 (结束地址, 分隔点位置2 [J - 1] + 1, 分隔点位置2 [J] - 分隔点位置2 [J - 1] - 1) 临时变量2 [J + 1] = 取文本右边 (结束地址, 取文本长度 (结束地址) - 分隔点位置2 [J]) 跳出循环 () .如果真结束 J = J + 1 .如果真结束 .计次循环尾 ().计次循环首 (4, J) .如果真 (到数值 (临时变量1 [J]) < 到数值 (临时变量2 [J])) ' 输出调试文本 (开始地址 + “<” + 结束地址) 返回 (真) .如果真结束 .计次循环尾 ()返回 (假) .子程序 _IP开始_字符输入, 整数型.参数 字符代码, 整数型 输出调试文本 (IP开始.地址) .子程序 _保存_被选择.局部变量 文件号, 整数型.局部变量 I, 整数型 .如果真 (列表框1.取项目数 () < 1) 信息框 (“没有扫描到可用内容”, 0, ) 返回 ().如果真结束通用对话框1.文件名 = IP开始.地址 + “-” + IP结束.地址通用对话框1.过滤器 = “文本文件(*.txt)|*.txt|所有文件(*.*)|*.*”通用对话框1.默认文件后缀 = “.txt”.如果真 (通用对话框1.打开 ()) .如果真 (通用对话框1.文件名 ≠ “”) 文件号 = 打开文件 (通用对话框1.文件名 + 通用对话框1.默认文件后缀, #重写, ) .如果真 (文件号 = 0) 返回 () .如果真结束 .计次循环首 (列表框1.取项目数 (), I) 写文本行 (文件号, 列表框1.取项目文本 (I)) .计次循环尾 () 关闭文件 (文件号) 信息框 (“保存成功:” + 通用对话框1.文件名 + 通用对话框1.默认文件后缀, 0, ) .如果真结束 .如果真结束 .子程序 _退出_被选择 结束 () .子程序 _浏览器打开_被选择.局部变量 HTTP地址, 文本型 HTTP地址 = “http://” + 到IP地址 ()' 系统执行 (取窗口句柄 (), “Open”, HTTP地址, “\0”, “\0”, 1)运行 (#引号 + “C:\Program Files\Internet Explorer\IEXPLORE.EXE” + #引号 + “ ” + HTTP地址 + “:” + 列表端口 (), 假, ) .子程序 到IP地址, 文本型, , 返回列表框中的经过格式化后的IP 地址 返回 (取文本左边 (列表框1.取项目文本 (列表框1.现行选中项), 寻找文本 (列表框1.取项目文本 (列表框1.现行选中项), “:”, , 假) - 1)) .子程序 _FTP打开_被选择 运行 (#引号 + “C:\Program Files\Internet Explorer\IEXPLORE.EXE” + #引号 + “ ” + “FTP://” + 到IP地址 () + “:” + 列表端口 (), 假, ) .子程序 _SQL打开_被选择 .如果真 (到IP地址 () = “”) 返回 ().如果真结束.如果 (信息框 (“你想用图形方式吗?”, #确认取消钮, ) = #确认钮) 运行 (“isqlw -S ” + 到IP地址 (), 假, ).否则 运行 (“cmd.exe /c isql -S ” + 到IP地址 () + “:” + 列表端口 (), 假, ).如果结束 .子程序 _超级终端打开_被选择 .如果 (到IP地址 () = “”) 返回 ().否则 运行 (“mstsc -V ” + 到IP地址 () + “:” + 列表端口 (), 假, ) .如果结束 .子程序 列表端口, 文本型, , 列表项选中项的端口 ' 临时文本=取文本中间(列表框1.取项目文本(,返回 (删首尾空 (取文本中间 (列表框1.取项目文本 (列表框1.现行选中项), 寻找文本 (列表框1.取项目文本 (列表框1.现行选中项), “:”, , 假) + 1, 5))) .子程序 _删除此项_被选择 .如果真 (列表框1.取项目数 () = 0) 返回 ().如果真结束列表框1.删除项目 (列表框1.现行选中项) .子程序 _关于端口扫描器_被选择 信息框 (“lmonlove7端口扫描器V1.0” + #换行符 + “程序设计:lemonlove7” + #换行符 + “ QQ:2103950795”, 0, , ) .子程序 _按钮2_被单击 编辑框1.内容 = “21,25,80,135,138,139,445,1433,3389,4889,5631” .子程序 _列表框1_鼠标右键被按下, 逻辑型.参数 横向位置, 整数型.参数 纵向位置, 整数型.参数 功能键状态, 整数型 .如果真 (列表框1.取项目数 () > 0) 弹出菜单 (IP操作, 取鼠标水平位置 () - 10, 取鼠标垂直位置 () - 15) .如果真结束 .子程序 __启动窗口_可否被关闭, 逻辑型 .子程序 _按钮3_被单击 IP结束.地址 = IP开始.地址置剪辑板文本 (IP开始.地址) .子程序 _按钮4_被单击 载入 (域名转IP, , 真)
使用效果
如下图
结尾
扫描器并不是一个直接的攻击网络漏洞的程序,它仅仅能帮助我们发现目标机的某些内在的弱点。以后会持续输出文章,师傅们轻喷
防止链接失效,完整代码以及便携版