首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在子网之间为设置的ip范围进行ping和导出结果

如何在子网之间为设置的ip范围进行ping和导出结果
EN

Stack Overflow用户
提问于 2016-03-23 21:21:16
回答 1查看 982关注 0票数 0

我试图修改我在网上找到的一个Bat文件以满足我的需要。

代码语言:javascript
复制
@ECHO Off
set startTime=%500%
ECHO Starting the IP Scan
FOR /L %%i IN (1,1,2) DO @(
ECHO Pinging IP Range: 10.163.%%i._
FOR /L %%z IN (1,1,10) DO @(
echo Pinging IP: 10.163.%%i.15
ping -n 1 -w 500 10.163.%%i.15 | FIND /i "Reply">>IPScanResults.txt
)
)
ECHO Run Time = %startTime% to %time%>>IPScanResults.txt
ECHO *** IP Scan Complete. ***
ECHO Check the file called IPScanResults.txt to see the results
ECHO Run Time = %startTime% to %time%

眼前的问题..。我们在全国各地的数百个办公室都有网络打印机。本公司采用一般标准,差异有限。所有打印机以15或16的第四个八进制结束。变量将是IP的第二个和第三个八进制。我可以为第二个八进制变量做第二个脚本,我最大的障碍是第三个八重奏和输出。例如..。

我需要ping,并识别10.163.X.15或10.163.X.16 IP地址中的任何机器的响应,并将其导出到带有响应的txt文件。X的范围为1-254。一个ping响应就是所需的全部,我不需要它用4-5响应,因为它只是一个“你在那里”的测试。然后我将用10.162.x.x和10.160.x.x编辑我们的网络。

我对脚本不是很熟悉,我很想了解更多关于如何实现这一点的知识。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-03-23 23:16:18

您就快到了,您只是从来没有使用内部%%z循环的变量for /L

代码语言:javascript
复制
@ECHO OFF
SET startTime=%time%
ECHO Starting the IP Scan
FOR /L %%i IN (1,1,2) DO (
    ECHO Pinging IP Range: 10.163.%%i._
    FOR /L %%z IN (1,1,10) DO (
        ECHO Pinging IP: 10.163.%%i.%%z
        PING -n 1 -w 500 10.163.%%i.%%z | FIND /i "Reply">>"IPScanResults.txt"
    )
)
ECHO Run Time = %startTime% to %time%>>"IPScanResults.txt"
ECHO *** IP Scan Complete. ***
ECHO Check the file called "IPScanResults.txt" to see the results
ECHO Run Time = %startTime% to %time%

我使用这个变量作为第四个八进制(而不是常量15),因此控制台输出如下:

开始IP扫描,点击IP范围: 10.163.1._点击IP: 10.163.1.1点击IP: 10.163.1.2Pinging : 10.163.1.10 Pinging范围: 10.163.2._ Pinging : 10.163.2.1 Pinging : 10.163.2.2Pinging : 10.163.2.10 * IP扫描完成。*检查名为"IPScanResults.txt“的文件,查看结果运行时= 0:05:07.24至0:05:17.16

...and日志文件IPScanResults.txt的内容可能如下所示:

回复: 10.163.1.10: bytes=32 time<1ms TTL=128运行时= 0:05:07.24至0:05:17.16

此外,我还缩进了for /L循环以提高可读性,并在日志文件名周围加上引号,这样就可以更改它,使它甚至不受任何麻烦地包含空格。

此外,我通过%500%交换了%time%,因为我以为您想存储开始时间。%500%是一个无效的变量名,因为%后面跟着一个数字数字(在本例中是%5)意味着脚本参数展开--有关这个问题的更多信息,请参见call /?

提示:

如果其中一个八进制没有连续值,例如160162163,则可以使用标准的for循环而不是for /L

代码语言:javascript
复制
FOR %%j IN (160 162 163) DO (
    PING -n 1 -w 500 10.%%j.1.15
)

无论如何,由于脚本的灵活性,我将使用以下脚本来完成您的任务:

代码语言:javascript
复制
@echo off
setlocal EnableExtensions EnableDelayedExpansion

rem Define constants here:
set "LOGFILE=IPScanResults.txt"
rem Define IP octets here:
set "OCTET1=10"          & rem (a single value)
set "OCTET2=160 162 163" & rem (space-separated list of values)
set "OCTET3=1,1,254"     & rem (comma-separated range (min.,step,max.))
set "OCTET4=15,1,16"     & rem (comma-separated range (min.,step,max.))

rem Prepare `for` switch `/L` dynamically:
for /L %%O in (1,1,4) do (
    if not "!OCTET%%O!"=="!OCTET%%O:,=!" set "SWITCH%%O=/L"
)

set "STARTTIME=%TIME%"
if exist "%LOGFILE%" (>> "%LOGFILE%" echo()
echo Starting the IP Scan
for %SWITCH1% %%I in (%OCTET1%) do (
    for %SWITCH2% %%J in (%OCTET2%) do (
        echo Pinging IP Range: %%I.%%J.__.__
        for %SWITCH3% %%K in (%OCTET3%) do (
            for %SWITCH4% %%L in (%OCTET4%) do (
                echo Pinging IP: %%I.%%J.%%K.%%L
                ping -n 1 -w 500 %%I.%%J.%%K.%%L | >> "%LOGFILE%" find "TTL"
            )
        )
    )
)
>> "%LOGFILE%" echo Run Time = %STARTTIME% -- %TIME%
echo *** IP Scan Complete. ***
echo Check the file called "%LOGFILE%" to see the results.
echo Run Time = %STARTTIME% -- %TIME%

endlocal
exit /B
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36188911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档