Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228047
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-14 09:03
个人简介

观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,渡一切苦厄。

文章分类
文章存档

2020年(2)

2019年(2)

2018年(3)

2017年(4)

2016年(17)

2015年(9)

2014年(16)

2013年(4)

我的朋友

分类: Windows平台

2015-07-01 23:14:53

        背景:今天老师给了个小任务,对他之前探测到的活跃的路由器结点进行SNMP弱口令检测,给定的txt文本里大概有1000多个孤立的IP结点,solorwinds工具链中的IP Network Browser只能实现对三种IP地址模型的输入:1、单独IP; 2、子网段;3、IP地址段。根本没考虑到我这种大数据量的查询。所以不知不觉想到了对snmp协议进行探测windows命令行工具——snmputil.exe(随便可以下到,简单使用说明http://blog.sina.com.cn/s/blog_701300bc0101976d.html),考虑到它是命令行工具,我之前有些过很多linux shell脚本,不妨使用windows批处理命令解决下。
       脚本及实现步骤:

点击(此处)折叠或打开

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /f %%i in (%1%) do (
  4. for /f "delims=" %%t in ('snmputil get %%i public .1.3.6.1.2.1.1.5.0') do set var=%%t
  5. if "!var!" == "error on SnmpMgrRequest 40" (
  6. echo "%%i : 失败[var=!var!]" >>"失败%1%"
  7. ) else (
  8. echo "%%i : 正确[var=!var!]" >>"正确%1%"
  9. )
  10. )
  11. echo THE END 
  12. pause>nul

     就是通过一个for循环,反复从命令行的第一个参数(按行存放IP的txt文本)中取值,然后,调用snmputil.exe进行查询,然后,跟据查询所得的结果判断,弱口令测试是否成功:如果成功,将输出存入指定文本文件;如果失败,将输出存入另一个文本文件。
     实现过程遇到的问题:
     1、延迟变量扩展:第二行的 setlocal 就是开启延迟变量扩展机制,windows批处理命令和Linux shell脚本有着显著的不同,windows中将if或for或其他任何地方出现的(...)之间的内容看做一条完整的语句,我们举一个例子:

点击(此处)折叠或打开

  1. @echo off
  2. set var=aaa
  3. if "%var%" == "aaa" (
  4. set var=bbb
  5. echo %var%
  6. if "%var%" == "bbb" (
  7. echo 修改成功
  8. ) else (
  9. echo 修改失败
  10. )
  11. )
  12. echo THE END !!!
  13. pause>nul
   返回结果:

点击(此处)折叠或打开

  1. aaa
  2. 修改失败
  3. THE END !!!
    也就是说第一个if中的赋值操作并不是在第二个if语句之前进行操作的,而是他们作为同一个完整的语句运行的,因此结果并不是想象的修改成功。因此应该使用变量延迟扩展机制。事先要加入机制开启环境设定,然后,将需要扩展的变量%var%改为!var!,就可得到相应的结果。

点击(此处)折叠或打开

  1. @echo off
  2. setlocal enableDelayedExpansion

  3. set var=aaa
  4. if "!var!" == "aaa" (
  5.     set var=bbb
  6.     echo !
  7.     if "!var!" == "bbb" (
  8.     echo 成功
  9.        ) else (
  10.         echo 失败
  11.       )
  12. )

  13. echo THE END !!!
  14. pause>nul
2、shell脚本中的for循环,引用的变量都要多加%,比如,第一个参数 1% ,相应的应该表示为%1%;变量%i相应变为%%i。
3、变量使用一定要注意,比如,set num=1,后面无意多加了一个空格,看脚本根本看不出来,判断硬是判断错误,所以最好以这种方式进行赋值set num="1",以免查不出错误纠结死;
4、windows批处理文件的编写相比linux shell脚本编写要麻烦的多,限制条件也多,就拿上述的1,2来说,在Linux中是完全不需要考虑的。所以说微软是做图形化系统的,在命令行方面远远不及Linux。图形化界面加上软件闭源,导致windows的扩展性和灵活性远远不及linux系统



阅读(2286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~