『楼 主』:
一键搜索局域网共享资源
::code by rs369007! 2010.4.23
::思路 判断主机是否在线--Y--判断主机是否存在共享资源--Y--打开共享资源
::如果试图遍历一个局域网所有主机,因为有 254*254 台主机需要
::测试,这对不具备多线程能力的脚本,会变得十分的漫长
::一个网段(253台主机)可能都得花上数分钟左右,254个网段就更不用说了
::有时可能连续几个网段都没有人共享任何资源,这样的等待是相当痛苦的
::但是经过测试脚本能非常准确的找到所有共享资源
::【建议:】如果知道共享资源集中的网段,建议手动设置扫描网段
::扫描出来共享主机ip会自动记录下来,下次可以在开始运行输入: \\+ip地址
::来打开(例如:\\172.16.35.1)
@echo off&setlocal ENABLEDELAYEDEXPANSION
if NOT exist "sharehost_record.txt" (
echo -----------------共享的主机ip记录文件----------------->sharehost_record.txt
echo.>>sharehost_record.txt
)
:openshare
for /f "tokens=2 delims=:" %%i in ('ipconfig/all ^| find /i "IP Address"') do (
set ipaddr=%%i
)
set netnum=!ipaddr:~1,3!
if "%netnum%"=="172" set network=172.16
if "%netnum%"=="192" set network=192.168
:choice
set /p choice=自动扫描全网段(q/Q)/指定扫描特定网段(s/S):
if *%choice%==* goto choice
if "%choice%"=="q" goto autosearch
if "%choice%"=="Q" goto autosearch
if "%choice%"=="s" goto specify_subnet
if "%choice%"=="S" goto specify_subnet
echo 任意键退出...Y
pause>nul & exit /b
goto :eof
:specify_subnet
set /p gate=输入所要扫描的指定网段(例如:172.16.35.1或192.168.12.1):
echo !gate!|findstr "^[0-9.]*$" >nul ||(echo 输入错误,任意键返回&pause>nul&goto specify_subnet)
for /f "tokens=3 delims=." %%k in ("!gate!") do (
set subnet=%%k
)
echo 【子网!network!.!subnet!.1 有共享资源的主机】>>sharehost_record.txt
echo 正在收索!gate!子网内的共享文件,请耐心等待......
echo 在线主机列表如下...
for /L %%b in (2,1,254) do (
set ip=!network!.!subnet!.%%b
ping -w 10 -n 1 !ip!>nul 2>&1
if !ERRORLEVEL! EQU 0 (
net view \\!ip! 2>nul| find "共享">nul 2>&1 && start \\!ip!&&echo !ip!>>sharehost_record.txt&&echo 具有共享资源的ip:!ip!
echo 已搜索到ip: !ip!
)
)
goto :eof
:autosearch
echo 正在收索!network!.1.1--!network!.254.254内的共享文件,请耐心等待......
echo 在线主机列表如下...
for /L %%a in (2,1,254) do (
echo 【子网!network!.%%a.1 有共享资源的主机】>>sharehost_record.txt
for /L %%b in (2,1,254) do (
set ip=!network!.%%a.%%b
ping -w 10 -n 1 !ip!>nul 2>&1
if !ERRORLEVEL! EQU 0 (
net view \\!ip! 2>nul| find "共享">nul 2>&1 && start \\!ip!&&echo !ip!>>sharehost_record.txt&&echo 具有共享资源的ip:!ip!
echo 已搜索到ip: !ip!
)
)
)
goto :eof
::将资源映射到本地磁盘 原帖作者:p1509101
::原帖在:http://www.cn-dos.net/forum/viewthread.php?tid=39260###
::只稍做修改方便自己使用
@echo off&setlocal enabledelayedexpansion
:setsnapip
set /p snapshot_ip=请输入要映射到本地的电脑ip(例如172.16.35.36):
echo !snapshot_ip!|findstr "^[0-9.]*$">nul 2>nul||(echo 输入错误&goto setsnapip)
cls&echo ip为!snapshot_ip!的电脑上的共享资源如下:&echo.
::确定共享文件名的最大长度(有些共享名可能会含有空格)
for /f "skip=4 tokens=*" %%j in ('net view \\!snapshot_ip!') do (
set /a flag+=1
if !flag!==1 (call :pick %%j)
)
::获取共享资源列表
if *!line!==* (
echo 没有找到共享资源&ping -n 3 127.1
goto eof
)
for /f "skip=7 tokens=1 delims= " %%j in ('net view \\!snapshot_ip!') do (
if not "%%j"=="命令成功完成。" (
set /a num+=1&set str=%%j
call set str=%%str:~0,!line!%%
set "explor!num!=!str!"
set str2=!num!-----
echo !str2!!str!
)
)
echo.&set /p choose2=选择一个要映射的资源:
call set var=%%explor!choose2!%%&call :delspace !var!
::随机选择盘符
for %%k in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,o,v,w,x,y,z) do (
cd %%k: >nul 2>nul||(set /a flag2+=1&if !flag2!==1 (net use %%k: "\\!snapshot_ip!\!explorname!"&pause))
)
goto eof
::计算共享名最大长度
:pick
set line=1
set "str=%*"
:loop
if "%str:~0,1%"=="类" goto eof
set str=!str:~1!&set /a line+=1&goto loop
::删除空格
:delspace
set "explorname=%1"
:loop2
if not "%explorname:~-1%"==" " goto eof
set str=%explorname:~0,-1%&goto loop2
:eof [ Last edited by rs369007 on 2010-4-24 at 16:58 ]
附件
1: search_share.rar (2010-4-24 11:29, 1.33 K,下载次数: 33)
附件
2: multisearch.rar (2010-4-24 16:57, 810 bytes,下载次数: 30)
|