Board logo

标题: 技术探讨:编写批处理程序来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 ]