标题: 技术探讨:编写批处理程序来ping一定ip段内存活主机
[打印本页]
作者: PPdos
时间: 2006-12-27 00:28
标题: 技术探讨:编写批处理程序来ping一定ip段内存活主机
突发奇想 希望有人跟帖:
作者: lxmxn
时间: 2006-12-27 01:29
把要求说具体一点吧。
作者: scriptor
时间: 2006-12-27 01:41
live.bat
@echo off
@for /l %%a in (1,1,254) do (ping -n 6 ip |find "Reply from" >> live.txt)
echo done
pause >nul
ip 可以自己设定,比如168.9.9.%%a 或者 168.6.%%a.9 , 但是一定有一个选项是%%a 以便扫描。
作者: redtek
时间: 2006-12-27 02:41
这个好玩~:)
再来一个254线程扫描的,嘿嘿~:)
(用 Start 模拟 254线程,扫描 1-254 台主机约为 20 秒)
(运行前注意: 运行后同时开启 254 个窗口 ,因为是多线程嘛~:)
( 不过没什么,哈哈……请做好心理准备~:D
( 但是,一个窗口不到1秒钟就闪完了,所以屏幕上视觉上也就8个窗口左右)
(下面代码当都扫描完成以后,会在当前目前生成一个名为 IP.TXT 的扫描日志,打开看就行了)
@echo off
if [%1]==[] (Goto :Start) else (Goto :Ping)
:Start
echo.ScanTime:%time%>ip.txt&&set "ip=61.149.20"
for /L %%i in (1,1,254) do Start %~s0 %ip%.%%i
Goto :eof
:Ping
ping %1 -n 1 -w 1 >nul&&echo %1 - OK!>>ip.txt
exit
(注:上面批处理的文件名不能含有空格)
下面是扫描到的一些主机……
ScanTime:13:32:31.85
61.149.20.5 - OK!
61.149.20.7 - OK!
61.149.20.6 - OK!
61.149.20.8 - OK!
61.149.20.10 - OK!
61.149.20.14 - OK!
61.149.20.17 - OK!
61.149.20.18 - OK!
61.149.20.19 - OK!
(略……)
[
Last edited by redtek on 2006-12-26 at 02:04 PM ]
作者: gene771771
时间: 2006-12-27 02:58
。。。
高人呀,我什么都不想说了
作者: PPdos
时间: 2006-12-27 03:23
标题: 我也写了一个完整点的 评论一下
@echo off
echo -----------------------------
echo 请选择你所扫描的类型
echo -----------------------------
echo .
echo [A] :IP段扫描 [B] :精确IP及端口扫描
:x
set /p choice="请输入扫描类型:A or B :"
if /i %choice%==a goto ipduan else goto y
:y
if /i %choice%==b goto ip else goto x
:ipduan
echo 进入IP段扫描模式:
set /p ipa="输入扫描的ip段前三段(例如:192.168.1):"
set /p port="输入要扫描的端口:"
for /l %%i in (1,1,255) do (telnet %ipa%.%%i %port%)
:ip
echo 进入精确扫描模式:
set /p ipa="输入扫描的ip:(例如:192.168.0.1)"
set /p port1="输入要扫描的开始端口:"
set /p port2="输入要扫描的结束端口:"
for /l %%i in (%port1%,1,%port2%) do (telnet %ipa% %%i)
pause>nul
作者: PPdos
时间: 2006-12-27 03:37
标题: 速度很快
但如果扫描几万个端口 同时打开几万个窗口好象要自杀?能不能进行对打开start telnet窗口的数量限制呢?虽然连接大约5秒钟后失败退出 但是打开的速度要快吧...
作者: scriptor
时间: 2006-12-27 05:55
多谢redtak兄的支持啊
我还要多向你学习呢!
作者: scriptor
时间: 2006-12-27 06:16
噢,原来已经有这个帖子了,看来我多此一举啊
作者: ccwan
时间: 2006-12-27 06:22
删除两个帖子内容并非灌水,楼主勿怪。
作者: redtek
时间: 2006-12-27 06:30
回PPdos兄,要是用VBS来扫描端口不会显示象中了炸弹一样的满屏皆带窗口,哈哈……
论坛搜索一下,好象以前有网友用VBS编过一个端口扫描的代码~:)
(我写的那个满屏弹窗口的代码纯属另类玩笑~:)
作者: PPdos
时间: 2006-12-27 14:17
标题: 谢谢你的贴 我学到了好多东西 收藏了:P
Quote: |
Originally posted by redtek at 2006-12-26 01:41 PM:
这个好玩~:)
再来一个254线程扫描的,嘿嘿~:)
(用 Start 模拟 254线程,扫描 1-254 台主机约为 20 秒)
(运行前注意: 运行后堮.. |
|
作者: lkwater
时间: 2006-12-28 04:29
我有学到一点了
作者: PPdos
时间: 2006-12-28 23:26
Redtek兄所写精短之作着实让我研究好几天 而又无果 才知批处理之深邃....
希望能得各位指点,疑惑有三:
1.变量 %1在此是何意义
2.虽知start不支持长文件名 为何 start 后跟 %~s0 没有出错 并且各个字符又如 何解释呢?
3.是怎样通过&&准确判断ping到的主机是否存活 并写入.txt的呢?
初入批门 小弟不才疑问多多 还请各位多多指点!
作者: lxmxn
时间: 2006-12-28 23:57
哈哈,原来 Redtek 兄的批处理是个递归过程啊,现在才看到。加分再说。
作者: redtek
时间: 2006-12-29 00:03
多谢lxmxn鼓励~:)
回PPdos兄:
%~s0 就是批处理自己的名字。更详细内容见 For /? 帮助的最后一部分帮助内容:)
Start %~s0 用Start运行批处理文件自身(相当于又运行了一个“自己”,与当前正在运行的自身无关)。
%1 参数,批处理运行时所带入的参数。
如果 Copy a.txt d:\ 的命令执行时,则Copy命令后面加的参数: a.txt 就相当于 %1 , d:\就相当于%2
关于 && 与 || 等操作在下面的贴子非常全面的列表~:)
DOS 符号的问题 (详见第4楼)
http://www.cn-dos.net/forum/viewthread.php?tid=24289&fpage=1
关于%1应用在判断/开关等更复杂的操作以及参数次序的问题,下面贴子很精彩~:)
[原创]批处理参数问题一点谈
http://www.cn-dos.net/forum/viewthread.php?tid=17785
其它的内容可能有与之相关的,在下面的一个索引贴子里~:)
[简单索引]SET变量、延时变量、各种符号的用法
http://www.cn-dos.net/forum/view ... =%E7%AE%80%E5%8D%95
[
Last edited by redtek on 2006-12-28 at 11:05 AM ]
作者: lxmxn
时间: 2006-12-29 00:05
Quote: |
Originally posted by PPdos at 2006-12-28 10:26:
Redtek兄所写精短之作着实让我研究好几天 而又无果 才知批处理之深邃....
希望能得各位指点,疑惑有三:
1.变量 %1在此是何意义
2.虽知start不支持頮.. |
|
都是基础啊……
1、%1 代表运行某程序的第一个参数。
2、start 不是不支持长文件名,而是运行带有空格路径的程序一般会出错,加上%~s0,得到的是程序的短路径,这样,就不会在路径中出现 空格或者其它特殊的符号以致于start命令的运行失败。
3、&& 的作用是前面的命令运行成功之后才执行后面的命令,所以当ping成功了才写内容到文件中,基本上是可以判断存活主机的。
作者: lxmxn
时间: 2006-12-29 00:06
啊,我又慢了兄一步了,呵呵,看来要努力了~
作者: 007dna1
时间: 2008-12-3 01:04
Quote: |
Originally posted by redtek at 2006-12-27 02:41 AM:
这个好玩~:)
再来一个254线程扫描的,嘿嘿~:)
(用 Start 模拟 254线程,扫描 1-254 台主机约为 20 秒)
(运行前注意: 运行后同 ... |
|
第一句 if [%1]==[] (Goto:Start) else (Goto:Ping)
符号"["和“]”的作用是???
作者: 007dna1
时间: 2008-12-3 01:05
Quote: |
Originally posted by redtek at 2006-12-27 02:41 AM:
这个好玩~:)
再来一个254线程扫描的,嘿嘿~:)
(用 Start 模拟 254线程,扫描 1-254 台主机约为 20 秒)
(运行前注意: 运行后同 ... |
|
第一句 if [%1]==[] (Goto:Start) else (Goto:Ping)中
符号"["和“]”的作用是???
[
Last edited by 007dna1 on 2008-12-3 at 01:06 ]
作者: 007dna1
时间: 2008-12-3 01:16
Quote: |
Originally posted by PPdos at 2006-12-27 03:37 AM:
但如果扫描几万个端口 同时打开几万个窗口好象要自杀?能不能进行对打开start telnet窗口的数量限制呢?虽然连接大约5秒钟后失败退出 但是打开的速度要快吧... |
|
加上红色的那部分代码。。。用ping命令在每打开10个窗口的时候延时一下。。。应该就可以了
@echo off
if [%1]==[] (Goto :Start) else (Goto :Ping)
:Start
setlocal EnableDelayedexpansion
set a=0
echo.ScanTime:%time%>ip.txt&&set "ip=61.149.20"
for /L %%i in (1,1,254) do
(Start %~s0 %ip%.%%i
&set /a a=%%i%%10&if !a!==0 ping -n 2 127.0.0.1>nul)
endlocal
Goto :eof
:Ping
ping %1 -n 1 -w 1 >nul&&echo %1 - OK!>>ip.txt
exit
[
Last edited by 007dna1 on 2008-12-3 at 01:19 ]