Board logo

标题: 如何跳过没有响应的扫描? [打印本页]

作者: pzf2008     时间: 2009-3-2 04:33    标题: 如何跳过没有响应的扫描?
用一个命令行下的扫描工具scan.exe对文本文件123.txt中的IP列表进行逐个扫描,批处理的代码如下: @for /f %%i in (123.txt) do scan %%i 有的IP很快就扫描完毕,但是有的IP会没有响应,使得命令执行很慢。要实现不管目标IP是否有响应,每个IP均在20秒内扫描完成,然后跳到下一个IP。如何修改代码呢?请各位指点高明!

作者: pzf2008     时间: 2009-3-2 21:56
到现在还没有高人来指点啊?可能是我没说清楚吧! 我的意思就是:每次在执行命令后,加一个时间控制,如20秒钟,20秒钟之后,直接执行下一个循环的命令。怎么实现呢? [ Last edited by pzf2008 on 2009-3-2 at 22:33 ]

作者: netbenton     时间: 2009-3-3 01:21
for 调用scan.exe时,是把所有的控制权都交给scan.exe 了的,不可以中途打断的 你看看你的scan.exe它有没有定时的功能吧

作者: pzf2008     时间: 2009-3-3 03:55
scan.exe相当于一个DOS下的命令行程序,就像dir等命令一样,没有定时功能。 我想实现对每个IP执行scan命令时,如果时间超过20秒钟,就自动跳到下一个循环执行。 或者,实现如下的键盘功能: 扫描一个IP超过20秒钟后,就用代码实现按下键盘的"Ctrl + c",然后按下"N",不取消该批处理命令,并继续执行下一条命令。 可否用代码模拟实现?

作者: yishanju     时间: 2009-3-3 06:24
扫描前先PING ,PING 不通 的IP 不扫描 这样可以不

作者: pzf2008     时间: 2009-3-3 10:56
不行!这个scan程序是和ping命令的原理不一样! 还是得用代码来取消失去响应的命令,并跳到下一循环。 [ Last edited by pzf2008 on 2009-3-3 at 21:58 ]

作者: pzf2008     时间: 2009-3-3 22:11
也就是说,如果有以下批处理命令: dir c: dir d: dir e: dir f: dir g: 假设每个磁盘驱动器上的文件有1亿个,dir命令要执行很久,要实现执行每条dir命令20秒钟后,取消该条命令的执行,相当于按下键盘的"Ctrl + c",然后再按下"N",跳到下一条dir命令继续执行。 实现这样的功能,要在中间插入什么代码呢?

作者: yishanju     时间: 2009-3-4 00:24
3楼已经说明方向了 自己看看SCAN的帮助 或者传一份scan 上来看看 别把木马后门-之类传上来就行

作者: netbenton     时间: 2009-3-4 02:23    标题: 楼主试试这个行吗?
@echo off echo.@echo off>%~n0scan.bat echo.title %%1%%2>>%~n0scan.bat echo.scan %%2>>%~n0scan.bat echo.echo.ok>>%~n0scan.bat echo.title bentonok>>%~n0scan.bat echo.pause>>%~n0scan.bat for /f %%i in (bbb.txt) do call :sub %%i del /q %~n0scan.bat goto :eof :sub start %~n0scan.bat benton %1 for /f "tokens=2" %%a in ('TASKLIST /FI "WINDOWTITLE eq benton%1*" /fo "table" /nh') do set pid=%%a set n=0 :lp set/a n+=1 if %n% gtr 20 goto :close ping 127.1 -n 1 >nul for /f "tokens=9*" %%a in ('TASKLIST /FI "pid eq %pid%" /v /nh') do echo.%%~nxb&if "%%~nxb"=="benton%1" goto :lp :close rem TASKkill /FI "pid eq %pid%" TASKkill /FI "WINDOWTITLE eq benton*" >nul goto :eof [ Last edited by netbenton on 2009-3-4 at 00:27 ]

作者: netbenton     时间: 2009-3-4 02:35    标题: 这个雅观一点
@echo off echo.@echo off>%~n0scan.bat echo.title %%1%%2>>%~n0scan.bat echo.scan %%2>>%~n0scan.bat echo.title bentonok>>%~n0scan.bat echo.pause>>%~n0scan.bat for /f %%i in (123.txt) do call :sub %%i del /q %~n0scan.bat echo.scan finish pause goto :eof :sub echo.scan %1 start /min %~n0scan.bat benton %1 (for /f "tokens=2" %%a in ('TASKLIST /FI "WINDOWTITLE eq benton%1*" /fo "table" /nh') do set pid=%%a)2>nul set n=0 :lp set/a n+=1 if %n% gtr 20 goto :close ping 127.1 -n 1 >nul (for /f "tokens=9*" %%a in ('TASKLIST /FI "pid eq %pid%" /v /nh') do if "%%~nxb"=="benton%1" goto :lp)2>nul :close TASKkill /FI "WINDOWTITLE eq benton*" >nul goto :eof [ Last edited by netbenton on 2009-3-5 at 07:48 ]

作者: pzf2008     时间: 2009-3-4 21:32    标题: To:netbenton
netbenton的代码真如蝴蝶穿花,够深奥!可我测试后,不行啊,没有完成需要的操作。 执行时生成了一个名为"testscan.bat"的批处理文件,其内容如下: @echo off title %1%2 scan.exe %2 title bentonok pause 假如要实现7楼描述的需求,代码应该怎么写呢? [ Last edited by pzf2008 on 2009-3-4 at 21:57 ]

作者: netbenton     时间: 2009-3-5 09:43
不好意思,原来是测试部分还没有去掉,改好了(10楼): 红色部分为IP列表文件, 绿色部分为你的scan.exe文件, 橙色部分的数字为延时,可以根据需要改 蓝色部分为scan.exe扫描时窗口最小化了,可以去掉。 ================================== 原理如下: 前面的echo部分产一个临时??scan.bat文件,用来调用scan.exe, 主批处理读取123.txt里面的IP列表,在新窗口调用临时产的??scan.bat 并给它一个字符串(用作标题)和一个IP,然后检测其是否完成(标题改变),或超时 是则关闭该窗口。再读取下一IP. . . 直到结束。 新窗口做的事情是: 把标题设置为主批给定的内容,再调用scan IP,完成后把标题设为OK。pause... 等主批来关闭。 [ Last edited by netbenton on 2009-3-5 at 08:09 ]