标题:批处理IP扫描器
作者:PPdos | 时间:2007-02-16 10:07 | 标题:批处理IP扫描器
网络课设置时 老出现IP冲突 于是就写了一个小程序 运行在别人机器上查看
经修改之后可以扫描不同网段 感谢redtek大虾的多线程思路 现给出源代码:
@echo off
if "%1"=="" goto PPdos
title Finished %s%/100
ping -w 1 -n 1 %1.%2>nul&&call :ananlyse %1.%2
exit
:PPdos
set /p ip=IP adresse (ex:192.168.1):
for /l %%i in (1 1 255) do (
set /a s=%%i*100/255
start /B %~s0 %ip% %%i
if "%%i"=="120" ping 127.0>nul
)
pause>nul
:ananlyse
for /f "tokens=3,9 delims==: " %%i in ('ping -n 1 -w 2 -a %1^|find "TTL"') do (
echo.%%i OK TTL=%%j
)
加张截图:
IPfinder2.bat 去除 find 提高速度降低 内存占用 更改如下
@echo off
if "%1"=="" goto PPdos
title Finished %s%/100
ping -w 1 -n 1 %1.%2 >nul&&call :ananlyse %1.%2
exit
:PPdos
set /p ip=IP adresse (ex:192.168.0):
for /l %%i in (1 1 255) do (
set /a s=%%i*100/255
start /B %~s0 %ip% %%i
if "%%i"=="128" ping 127.0>nul
)
pause>nul
:ananlyse
for /f "tokens=12 delims==. " %%i in ('ping -w 1 -n 1 %1') do (
if not "%%i"==" " echo.%1 OK TTL=%%i
)
[
Last edited by PPdos on 2007-2-23 at 12:35 AM ]
作者:PPdos | 时间:2007-02-16 10:50 | 标题:仅扫描IP段的核心代码
@echo off
if "%1"=="" goto PPdos
ping -n 1 -w 1 %1.%2 >nul&&echo.%1.%2 OK
exit
:PPdos
set /p ip=Tapez IP (ex:192.168.1):
for /l %%i in (1 1 255) do (
start /B %~s0 %ip% %%i
)
作者:gne3 | 时间:2007-02-17 01:05
up
作者:yc421206 | 时间:2007-02-19 13:35
Originally posted by PPdos at 2007-2-16 10:07:
网络课设置时 老出现IP冲突 于是就写了一个小程序 运行在别人机器上查看
经修改之后可以扫描不同网段 感谢redtek大虾的多线程思路 现给出源代码 ...
dear sir:
請問"start /B %~s0 %ip% %%i"
這句是什麼意思呢?
這整句我都不曉得在幹什麼用的
煩請為我解答,謝謝
作者:yc421206 | 时间:2007-02-20 02:08
Originally posted by yc421206 at 2007-2-19 13:35:
dear sir:
請問"start /B %~s0 %ip% %%i"
這句是什麼意思呢?
這整句我都不曉得在幹什麼用的
煩請為我解答,謝謝
小弟還是不明白此"%~s0",使用規格以及含意
如試著將它移除,程式即出錯,請問是為什麼呢??
作者:PPdos | 时间:2007-02-20 13:39 | 标题:分析
这个程序很有意思 我想重新做下诠释,希望能让大家理解:
@echo off
if "%1"=="" goto PPdos
::注释:运行程序后 如果参数没有定义 则调用模块 PPdos
ping -n 1 -w 1 %1.%2 >nul&&echo.%1.%2 OK
::注释:用一个数据包最多一秒延时的方法ping 参数1.参数2(即ip),成功就显示ok
exit
:PPdos
set /p ip=Tapez IP (ex:192.168.1):
::注释:定义ip的前三位
for /l %%i in (1 1 255) do (
::注释:ip第四位用for循环出来
start /B %~s0 %ip% %%i
::注释:此句很难理解 意思是在原dos窗口内调用自身,并把%ip%作为第一个参数, %%i作为第二个参数。%~s0为文件本身的短文件名避免调用自身时出错
)
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
[
Last edited by PPdos on 2008-4-2 at 07:33 AM ]
作者:yc421206 | 时间:2007-02-21 13:55
Originally posted by yc421206 at 2007-2-20 02:08:
小弟還是不明白此"%~s0",使用規格以及含意
如試著將它移除,程式即出錯,請問是為什麼呢??
小弟瞭解了
感謝兄您的指導
作者:Kinglion | 时间:2007-02-21 20:57
写得不错,很实用!
作者:lzmyst | 时间:2007-02-21 23:52
学习了。
谢谢兄的共享。
作者:vkill | 时间:2007-02-23 00:14
不如直接 arp -a
作者:peterdocter | 时间:2007-03-01 01:35
这个我用cpu都占到快没有了!太占资源了吧?用了之后要终止都非常难,好像假死机一样!
作者:dato | 时间:2007-03-01 23:12
这段代码还是对机房来说还是非常实用的。
刚刚用arp -a显示的IP非常有限,ping这种方式又可能受到防火墙阻挡。
但通过LZ这段脚本批量ping过局域网再使用arp -a 方式就能比较准确的获得局域网中在线的IP
所以希望LZ结合一下arp 命令,
作者:PPdos | 时间:2007-03-04 05:19 | 标题:回复
13楼的问题在内存不足或IP段内在线主机过多确会发生 所以要在运行此程序前关闭其他应用程序 (正常情况下几十秒钟即可完成扫描) 14楼建议的arp可以在扫描过后直接运行 arp -a 命令来完成更为灵活
作者:574855721 | 时间:2007-03-05 12:47
内网用的吗?作用是?
作者:zfkj | 时间:2007-03-05 18:18
呵呵,不错啊。支持
作者:yangjiang | 时间:2007-03-05 22:32
这个好象没有什么实用价值.
作者:wang8499 | 时间:2007-03-05 23:11
学习了。
谢谢兄的共享。
作者:test266 | 时间:2007-03-06 00:44 | 标题:试试我的
@echo off
setlocal ENABLEDELAYEDEXPANSION
if not "%1"=="" goto seg
set /p ip=请输入IP段(如:192.168.10):
if "%ip%"=="" (
set ip=192.168.10
echo 未指定IP段,缺省使用!ip!
)
arp -d
for /L %%i in (1,1,26) do (
start /B %~s0 %%i
)
if "%1"=="" goto done
:seg
for /l %%j in (1,1,10) do (
set /a k=%1*10-10+%%j
ping -w 1 -n 1 !ip!.!k! >nul
)
exit
:done
set /a wait=20
echo 等待%wait%秒,期待arp已经完成
call :GetHMS
set /a t1 = h*60*60+m*60+s
:loop
call :GetHMS
set /a t2 = h*60*60+m*60+s
set /a tt = t3
set /a t3 = %t2%-%t1%
if %tt% NEQ %t3% set /p=.<nul
if %t3% LSS %wait% goto loop
echo .
echo 延时了 %t3% 秒
echo !ip!网段所有在线机器MAC为:
for /f "tokens=1,2,3" %%i in ('arp -a') do (
if "%%k"=="dynamic" echo %%j,%%i
)
:GetHMS
if %time:~0,1% EQU 0 (
set /a h = %time:~1,1%
) else (
set /a h = %time:~0,2%
)
if %time:~3,1% EQU 0 (
set /a m = %time:~4,1%
) else (
set /a m = %time:~3,2%
)
if %time:~6,1% EQU 0 (
set /a s = %time:~7,1%
) else (
set /a s = %time:~6,2%
)
作者:PPdos | 时间:2007-03-06 09:07 | 标题:得到内网计算机的MAC地址
可在扫描完后 DOS窗口下运行以下命令:
@echo off&cls&for /f "skip=3 tokens=1,2 delims= " %i in ('arp -a') do echo IP=%i Mac=%j
作者:kkoper | 时间:2007-03-25 15:00
厉害啊~~ 佩服,
作者:zjren | 时间:2007-03-27 00:49 | 标题:支持意下
支持意下
作者:kingstry | 时间:2007-03-29 09:28
这个我用cpu都占到快没有了!太占资源了吧?用了之后要终止都非常难,好像假死机一样!
同上
作者:host2318 | 时间:2007-03-30 01:50
收藏了。谢谢
作者:xiaoyi2542 | 时间:2007-04-15 06:25
非常不错!谢谢~
作者:xiamin223 | 时间:2007-04-27 05:11
支持!顶一下!
作者:flandy | 时间:2007-04-29 06:09
支持
作者:hpwsb | 时间:2007-04-29 18:33
其实用mac扫描器还好用点,我个人以为
作者:PPdos | 时间:2008-04-02 07:42 | 标题:针对MAC的那个问题
运行完ip扫描器核心代码后,直接输入19楼的命令,所有扫描到的内网ip的@mac都显示出来,我感觉更快些。
IP=192.168.1.1 Mac=00-12-ef-44-95-**
IP=192.168.1.12 Mac=00-11-11-f1-**-f2
IP=192.168.1.15 Mac=00-11-11-f1-9a-**
IP=192.168.1.25 Mac=00-11-11-f1-**-24
IP=192.168.1.55 Mac=00-19-d1-17-69-**
IP=192.168.1.88 Mac=00-13-20-10-**-b3
IP=192.168.1.101 Mac=00-11-11-f1-8d-**
[
Last edited by PPdos on 2008-4-2 at 08:35 PM ]
作者:nnydkj | 时间:2008-04-04 21:01
在这里学到好多东西,谢谢~
作者:zhang123k68 | 时间:2010-07-07 10:49
学习了,哈哈谢谢你,
作者:a22124497 | 时间:2010-07-07 15:14
s顶一下
作者:houwenhui | 时间:2010-07-09 17:32
写的挺好的啊 支持
作者:sl543001 | 时间:2010-07-09 18:00
俺有更好的代码,不知道有没有人需要.谁要M我
作者:sl543001 | 时间:2010-07-09 18:05
有图有真相
作者:fy2008zg | 时间:2010-07-10 17:24
服务器上可以乱用吗
作者:eheaven | 时间:2010-07-23 17:48
感谢楼主
作者:lmlz41 | 时间:2010-10-29 15:21
收藏了!!
作者:9096 | 时间:2010-11-02 12:58
好的东西一定收
作者:z56490932 | 时间:2010-11-14 02:57
不错啊。支持
谢谢兄的共享
作者:loveping08 | 时间:2010-11-15 12:01
恩恩 我想我需要这个
好像下载还没那么多可以购买这个帖子
好 继续努力
作者:ling310521773 | 时间:2010-11-15 23:13
很好用,谢了!
作者:yf6122010 | 时间:2010-12-08 17:05
不错支持!
作者:ga861225 | 时间:2010-12-11 10:33 | 标题:恩恩
不错不错 正需要
来源:https://www.cn-dos.net/forum/viewthread.php?tid=27732 · 打印时间 2026-06-25 08:59