中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 一键搜索局域网共享资源 上一主题 | 下一主题
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『楼 主』:  一键搜索局域网共享资源


::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)


  freedom!
2010-4-23 23:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Jassize
新手上路





积分 4
发帖 4
注册 2010-3-30
来自 中国山东
状态 离线
『第 2 楼』:  

呵呵,终于有个沙发坐了。。
        好东西,收藏了。。。  只是,原理,之于我,还 有些难度。。。。

2010-4-23 23:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『第 3 楼』:  

文件search.bat
@echo off&setlocal ENABLEDELAYEDEXPANSION

if NOT exist "搜索记录" md 搜索记录
if NOT exist "\搜索记录\子网%1.txt" (
        echo -----------------共享的主机ip记录文件----------------->.\搜索记录\子网%1.txt
        echo.>>.\搜索记录\子网%1.txt
        echo 【子网%1有共享资源的主机】>>.\搜索记录\子网%1.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


:autosearch

echo 正在收索共享文件,请耐心等待......
echo 在线主机列表如下...
for /L %%a in (%1,1,254) do (
        set /a count+=1
        if !count! EQU %2 exit       
        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!>>.\搜索记录\子网%1.txt&&echo 具有共享资源的ip:!ip!
                        echo 已搜索到ip: !ip!
                        )
                )
        )
exit /b
[ Last edited by rs369007 on 2010-4-24 at 17:14 ]



  freedom!
2010-4-24 16:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『第 4 楼』:  

文件drive.bat
为提高速度,打开多个cmd窗口,同时进行共享搜索
要控制打开窗口个数,可以调整for /l 的步距,修改传入参数
如果觉得窗口多,还可以用cmdow将一些窗口隐藏,只留必要的窗口。
到某窗口运行完后,再激活被隐藏的窗口。
@echo off

for /l %%i in (1,20,254) do (
        start /I search.bat %%i 20
        )

exit /b

[ Last edited by rs369007 on 2010-4-25 at 10:06 ]



  freedom!
2010-4-24 17:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: