标题: 批处理IP扫描器
[打印本页]
作者: PPdos
时间: 2007-2-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 ]
附件
1:
IPFinder.rar (2007-2-16 10:07, 391 bytes, 下载附件所需积分 1点
,下载次数: 156)
附件
2:
IPFinder2.rar (2007-2-23 13:36, 381 bytes, 下载附件所需积分 1点
,下载次数: 124)
作者: PPdos
时间: 2007-2-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-2-17 01:05
up
作者: yc421206
时间: 2007-2-19 13:35
Originally posted by PPdos at 2007-2-16 10:07:
网络课设置时 老出现IP冲突 于是就写了一个小程序 运行在别人机器上查看
经修改之后可以扫描不同网段 感谢redtek大虾的多线程思路 现给出源代码 ...
dear sir:
請問"start /B %~s0 %ip% %%i"
這句是什麼意思呢?
這整句我都不曉得在幹什麼用的
煩請為我解答,謝謝
作者: yc421206
时间: 2007-2-20 02:08
Originally posted by yc421206 at 2007-2-19 13:35:
dear sir:
請問"start /B %~s0 %ip% %%i"
這句是什麼意思呢?
這整句我都不曉得在幹什麼用的
煩請為我解答,謝謝
小弟還是不明白此"%~s0",使用規格以及含意
如試著將它移除,程式即出錯,請問是為什麼呢??
作者: PPdos
时间: 2007-2-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-2-21 13:55
Originally posted by yc421206 at 2007-2-20 02:08:
小弟還是不明白此"%~s0",使用規格以及含意
如試著將它移除,程式即出錯,請問是為什麼呢??
小弟瞭解了
感謝兄您的指導
作者: Kinglion
时间: 2007-2-21 20:57
写得不错,很实用!
作者: lzmyst
时间: 2007-2-21 23:52
学习了。
谢谢兄的共享。
作者: vkill
时间: 2007-2-23 00:14
不如直接 arp -a
作者: peterdocter
时间: 2007-3-1 01:35
这个我用cpu都占到快没有了!太占资源了吧?用了之后要终止都非常难,好像假死机一样!
作者: dato
时间: 2007-3-1 23:12
这段代码还是对机房来说还是非常实用的。
刚刚用arp -a显示的IP非常有限,ping这种方式又可能受到防火墙阻挡。
但通过LZ这段脚本批量ping过局域网再使用arp -a 方式就能比较准确的获得局域网中在线的IP
所以希望LZ结合一下arp 命令,
作者: PPdos
时间: 2007-3-4 05:19
标题: 回复
13楼的问题在内存不足或IP段内在线主机过多确会发生 所以要在运行此程序前关闭其他应用程序 (正常情况下几十秒钟即可完成扫描) 14楼建议的arp可以在扫描过后直接运行 arp -a 命令来完成更为灵活
作者: 574855721
时间: 2007-3-5 12:47
内网用的吗?作用是?
作者: zfkj
时间: 2007-3-5 18:18
呵呵,不错啊。支持
作者: yangjiang
时间: 2007-3-5 22:32
这个好象没有什么实用价值.
作者: wang8499
时间: 2007-3-5 23:11
学习了。
谢谢兄的共享。
作者: test266
时间: 2007-3-6 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-3-6 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-3-25 15:00
厉害啊~~ 佩服,
作者: zjren
时间: 2007-3-27 00:49
标题: 支持意下
支持意下
作者: kingstry
时间: 2007-3-29 09:28
这个我用cpu都占到快没有了!太占资源了吧?用了之后要终止都非常难,好像假死机一样!
同上
作者: host2318
时间: 2007-3-30 01:50
收藏了。谢谢
作者: xiaoyi2542
时间: 2007-4-15 06:25
非常不错!谢谢~
作者: xiamin223
时间: 2007-4-27 05:11
支持!顶一下!
作者: flandy
时间: 2007-4-29 06:09
支持
作者: hpwsb
时间: 2007-4-29 18:33
其实用mac扫描器还好用点,我个人以为
作者: PPdos
时间: 2008-4-2 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-4-4 21:01
在这里学到好多东西,谢谢~
作者: zhang123k68
时间: 2010-7-7 10:49
学习了,哈哈谢谢你,
作者: a22124497
时间: 2010-7-7 15:14
s顶一下
作者: houwenhui
时间: 2010-7-9 17:32
写的挺好的啊 支持
作者: sl543001
时间: 2010-7-9 18:00
俺有更好的代码,不知道有没有人需要.谁要M我
作者: sl543001
时间: 2010-7-9 18:05
有图有真相
附件
1:
pingall.gif (2010-7-9 18:05, 12.8 K,下载次数: 1)
作者: fy2008zg
时间: 2010-7-10 17:24
服务器上可以乱用吗
作者: eheaven
时间: 2010-7-23 17:48
感谢楼主
作者: lmlz41
时间: 2010-10-29 15:21
收藏了!!
作者: 9096
时间: 2010-11-2 12:58
好的东西一定收
作者: z56490932
时间: 2010-11-14 02:57
不错啊。支持
谢谢兄的共享
作者: loveping08
时间: 2010-11-15 12:01
恩恩 我想我需要这个
好像下载还没那么多可以购买这个帖子
好 继续努力
作者: ling310521773
时间: 2010-11-15 23:13
很好用,谢了!
作者: yf6122010
时间: 2010-12-8 17:05
不错支持!
作者: ga861225
时间: 2010-12-11 10:33
标题: 恩恩
不错不错 正需要