|
pzf2008
新手上路
积分 16
发帖 13
注册 2008-12-8
状态 离线
|
『楼 主』:
如何跳过没有响应的扫描?
用一个命令行下的扫描工具scan.exe对文本文件123.txt中的IP列表进行逐个扫描,批处理的代码如下:
@for /f %%i in (123.txt) do scan %%i
有的IP很快就扫描完毕,但是有的IP会没有响应,使得命令执行很慢。要实现不管目标IP是否有响应,每个IP均在20秒内扫描完成,然后跳到下一个IP。如何修改代码呢?请各位指点高明!
|
|
2009-3-2 04:33 |
|
|
pzf2008
新手上路
积分 16
发帖 13
注册 2008-12-8
状态 离线
|
『第
2 楼』:
到现在还没有高人来指点啊?可能是我没说清楚吧!
我的意思就是:每次在执行命令后,加一个时间控制,如20秒钟,20秒钟之后,直接执行下一个循环的命令。怎么实现呢?
[ Last edited by pzf2008 on 2009-3-2 at 22:33 ]
|
|
2009-3-2 21:56 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
3 楼』:
for 调用scan.exe时,是把所有的控制权都交给scan.exe 了的,不可以中途打断的
你看看你的scan.exe它有没有定时的功能吧
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-3-3 01:21 |
|
|
pzf2008
新手上路
积分 16
发帖 13
注册 2008-12-8
状态 离线
|
『第
4 楼』:
scan.exe相当于一个DOS下的命令行程序,就像dir等命令一样,没有定时功能。
我想实现对每个IP执行scan命令时,如果时间超过20秒钟,就自动跳到下一个循环执行。
或者,实现如下的键盘功能:
扫描一个IP超过20秒钟后,就用代码实现按下键盘的"Ctrl + c",然后按下"N",不取消该批处理命令,并继续执行下一条命令。
可否用代码模拟实现?
|
|
2009-3-3 03:55 |
|
|
yishanju
银牌会员
[b]看你妹啊[/b]
积分 1488
发帖 1357
注册 2006-5-20
状态 离线
|
『第
5 楼』:
扫描前先PING ,PING 不通 的IP 不扫描
这样可以不
|
有问题请发论坛或者自行搜索,再短消息问我的统统是SB |
|
2009-3-3 06:24 |
|
|
pzf2008
新手上路
积分 16
发帖 13
注册 2008-12-8
状态 离线
|
『第
6 楼』:
不行!这个scan程序是和ping命令的原理不一样! 还是得用代码来取消失去响应的命令,并跳到下一循环。
[ Last edited by pzf2008 on 2009-3-3 at 21:58 ]
|
|
2009-3-3 10:56 |
|
|
pzf2008
新手上路
积分 16
发帖 13
注册 2008-12-8
状态 离线
|
『第
7 楼』:
也就是说,如果有以下批处理命令:
dir c:
dir d:
dir e:
dir f:
dir g:
假设每个磁盘驱动器上的文件有1亿个,dir命令要执行很久,要实现执行每条dir命令20秒钟后,取消该条命令的执行,相当于按下键盘的"Ctrl + c",然后再按下"N",跳到下一条dir命令继续执行。
实现这样的功能,要在中间插入什么代码呢?
|
|
2009-3-3 22:11 |
|
|
yishanju
银牌会员
[b]看你妹啊[/b]
积分 1488
发帖 1357
注册 2006-5-20
状态 离线
|
『第
8 楼』:
3楼已经说明方向了
自己看看SCAN的帮助
或者传一份scan 上来看看
别把木马后门-之类传上来就行
|
有问题请发论坛或者自行搜索,再短消息问我的统统是SB |
|
2009-3-4 00:24 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
9 楼』:
楼主试试这个行吗?
@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 ]
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-3-4 02:23 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
10 楼』:
这个雅观一点
@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 ]
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-3-4 02:35 |
|
|
pzf2008
新手上路
积分 16
发帖 13
注册 2008-12-8
状态 离线
|
『第
11 楼』:
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 ]
|
|
2009-3-4 21:32 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
12 楼』:
不好意思,原来是测试部分还没有去掉,改好了(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 ]
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-3-5 09:43 |
|