吕小骏出生及个人简历:一切尽在命令行—Do All in Command-Line - 客户端及软件交流 - W...

来源:百度文库 编辑:中财网 时间:2024/07/06 15:43:29
一切尽在命令行—Do All in Command-LineAll, 命令 本帖最后由 dxl198853 于 2009-6-17 08:35 编辑

|=-------------------------------------------------------------------=|
|=---------=[ 一切尽在命令行—Do All in Command-Line ]=-----------=|
|=-------------------------------------------------------------------=|
|=---------=[ [dxl] - dxl198853[at]gmail[dot]com ]=----------------=|
|=-------------------------------------------------------------------=|
|=-------------=[ http://hi.baidu.com/dxl198853  ]=----------------=|
|=-------------------------------------------------------------------=|
|=---------------------=[ April   26  2009 ]=------------------------=|
|=-------------------------------------------------------------------=|


------[  Index

0.-前言

1.- 介绍

2.- cmd中维护系统

3.- cmd中查询网络状态

4.- cmd中写脚本

5.- wmic的应用

6.- 让windows也拥有类linux中强大的shell—终端改造计划

7.- 总结


------[前言
在windows中,我们大多数是在windows提供的强大的桌面环境中进行这样或者那样的操作,所以那些习惯使用windows的人也可以被称作喜爱用右手的人(因为只需要使用鼠标就ok)但是高效率的操作还是在command-line下进行的,并且这是一个合格的ITpro必须掌握的技能,你是否想在黑色的命令终端下实现系统维护,进行网络设置的更改,进行恶意软件的查找,写脚本这些操作呢?是否想拥有像类linux那样强大的shell呢?如果你有这样的期待,那么这篇文章可以给你起那么点指导 的作用哦!!!

------[介绍
本文中我将结合大家常用的命令和命令行工具并结合一些实例来讲述cmd在系统日常使用的功能,并且在最后奉上自己的心得体会,希望你能从中学到所需要的知识!!!

------[cmd中维护系统
系统维护无非就是对系统出现的问题的解决,垃圾文件的清理,恶意软件的防护等等,在纯cmd下毕竟功能有限,不过加以合理的运用还是可以有收获的!!!


1.读取系统键值
我们在日常的操作中有很多的配置是离不开注册表的,所以查询注册表键值是很关键的技能。
运用实例:
我们查询启动项,然后查询里面的exe文件名


2.导出系统键值
引用问题http://bbs.winos.cn/viewthread.php?tid=61450&page=1#pid356750,这个问题涉及到注册表的导出问题,所以拿来做例子了


3.强制刷新组策略
在我们操作了组策略后,经常有系统设置还是呈现组策略修改之前的状态,这样的话我们就可以使用强制刷新命令了!!!


4.实现文件系统结构
我们用
  1. tree
复制代码 命令还查看文件体统结构,这样有助于分析系统!!!


5.查看当地系统的组策略配置
想查询我们日常使用的组策略配置么?呵呵,这样你用
  1. gpresult
复制代码 这个命令就可以达到效果了


6.查看系统的当前用户名和用户组
在windows server中我们可以用
  1. whoami
复制代码 或者是在windows client中我们可以用通用的
  1. net localgroup administrators
复制代码 来查看当前的用户,当然,上面的方法非最简单的,用
  1. set u
复制代码 命令即可。




7.清理IE临时文件
这里用到了rundll32文件,下面是其详细的用法,rundll32文件的作用是执行DLL文件中的内部函数,详细的请查看msdn!!!
  1. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8

  2.   rem 清除Cookies

  3.   RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2

  4.   rem 清除历史记录

  5.   RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1

  6.   rem 清除表单数据

  7.   RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16

  8.   rem 清除密码

  9.   RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32

  10.   rem 清除上述全部项目

  11.   RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255

  12.   rem 清除上述全部项目,以及IE7中使用的加载项所保存的各种数据

  13.   RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351  
复制代码 8.添加系统用户
用net命令是可以添加系统用户并修改用户所属用户组的
  1. net user dxl dxl /add
  2. net localgroup adminstrator dxl /add
复制代码 9.查看hosts文件
hosts文件里面是比较的敏感的,有很多的恶意软件会利用这个文件哦!!



---------[cmd中查询网络状态

Windows自带的关于网络的命令行工具很多,比如大家熟悉的 ping,tracert,ipconfig,telnet,ftp,tftp,netstat,还有不太熟悉的 nbtstat,pathping,nslookup,finger,route,netsh……
这些命令又可分成三类:网络检测(如ping)、网络连接(如telnet)和网络配置(如netsh)

1.查看详细的系统配置信息


2.现实系统当前的TCP/IP网络连接
这里用到
  1. netstat
复制代码 命令,这里要说明的是netstat命令是可以多项查询的,什么意思呢,就是将命令参数连在一起来查询网络状态!!举例说明


结合find命令也可以达到意想不到的效果哦


3.显示网络,防火墙,连接的详细信息
这里要用到netsh!!!这玩意真是个好东西
  1. netsh diag show all /v
  2. netsh interface ip show ipnet
  3. netsh interface ip show config
  4. netsh firewall show conf
  5. netsh firewall show port
复制代码






具体更多的应用就不举例了



4. IPsec
xp下有ipsec的命令行工具,这里我列举几个ipsec应用的例子
关于ipsecpol和ipseccmd的资料,网上可以找到很多,因此本文就不细说了,只是列举一些实用的例子。
在设置IPSec策略方面,ipseccmd命令的语法和ipsecpol几乎完全一样,所以只以
  1. ipsecpol
复制代码 为例:

1),防御rpc-dcom攻击
  1. ipsecpol -p myfirewall -r rpc-dcom -f *+0:135:tcp *+0:135:udp *+0:137:udp *+0:138:udp *+0:139:tcp *+0:445:tcp *+0:445:udp -n BLOCK -w reg -x
复制代码
这条命令关闭了本地主机的TCP135,139,445和udp135,137,138,445端口。
具体含义如下:
-p myfirewall 指定策略名为myfirewall
-r rpc-dcom 指定规则名为rpc-dcom
-f …… 建立7个筛选器。*表示任何地址(源);0表示本机地址(目标);+表示镜像(双向)筛选。详细语法见ipsecpol -?
-n BLOCK 指定筛选操作是"阻塞"。注意,BLOCK必须是大写。
-w reg 将配置写入注册表,重启后仍有效。
-x 立刻激活该策略。


2),防止被ping
  1. ipsecpol -p myfirewall -r antiping -f *+0::icmp -n BLOCK -w reg -x
复制代码 如果名为myfirewall的策略已存在,则antiping规则将添加至其中。
注意,该规则同时也阻止了该主机ping别人。

3),对后门进行IP限制
假设你在某主机上安装了DameWare Mini Remote Control。为了保护它不被别人暴破密码或溢出,应该限制对其服务端口6129的访问。
  1. ipsecpol -p myfw -r dwmrc_block_all -f *+0:6129:tcp -n BLOCK -w reg
  2. ipsecpol -p myfw -r dwmrc_pass_me -f 123.45.67.89+0:6129:tcp -n PASS -w reg -x
复制代码 这样就只有123.45.67.89可以访问该主机的6129端口了。
如果你是动态IP,应该根据IP分配的范围设置规则。比如:
  1. ipsecpol -p myfw -r dwmrc_block_all -f *+0:6129:tcp -n BLOCK -w reg
  2. ipsecpol -p myfw -r dwmrc_pass_me -f 123.45.67.*+0:6129:tcp -n PASS -w reg -x
复制代码 这样就允许123.45.67.1至123.45.67.254的IP访问6129端口。

在写规则的时候,应该特别小心,不要把自己也阻塞了。如果你不确定某个规则的效果是否和预想的一样,可以先用计划任务"留下后路"。例如:

c:\>net start schedule
Task Scheduler 服务正在启动 ..
Task Scheduler 服务已经启动成功。

c:\>time /t
12:34

c:\>at 12:39 ipsecpol -p myfw -y -w reg
新加了一项作业,其作业 ID = 1

然后,你有5分钟时间设置一个myfw策略并测试它。5分钟后计划任务将停止该策略。
如果测试结果不理想,就删除该策略。

c:\>ipsecpol -p myfw -o -w reg

注意,删除策略前必须先确保它已停止。不停止它的话,即使删除也会在一段时间内继续生效。持续时间取决于策略的刷新时间,默认是180分钟。

如果测试通过,那么就启用它。

c:\>ipsecpol -p myfw -x -w reg

最后说一下查看IPSec策略的办法。
对于XP很简单,一条命令搞定——ipseccmd show filters


ipseccmd命令脚本举例:
  1. @ echo off
  2. rem
  3. rem blockport.bat
  4. rem Spirituel@SMTH
  5. rem
  6. rem This file use the IPsec filters to block default ports of Windows.
  7. rem It can work on Windows 2003 and Windows XP system if there is ipseccmd command on it.
  8. rem It can also work on Windows2000, if you chang "ipseccmd" to "ipsecpol" when ipsecpol command could work well.
  9. rem You can customize your own policy easily.
  10. rem please refer to README.txt for more details.
  11. rem NOTICE: NO WARRANTY totally. Please use it carefully.
  12. rem
  13. rem
  14. rem
  15. echo [Usage] blockport [ -o or -y ]
  16. echo set policy of filter rules and and enable them without parameter.
  17. echo -y parameter to make the policy inactive.
  18. echo -o parameter to disable and delete the policy.

  19. if "%1"=="-y" goto :inactive
  20. if "%1"=="-o" goto :delete

  21. @ echo on
  22. ipseccmd -w REG -p "Block default ports" -y
  23. ipseccmd -w REG -p "Block default ports" -o
  24. ipseccmd -w REG -p "Block default ports" -r "Block TCP/135" -f *+0:135:TCP -n BLOCK
  25. ipseccmd -w REG -p "Block default ports" -r "Block TCP/139" -f *+0:139:TCP -n BLOCK
  26. ipseccmd -w REG -p "Block default ports" -r "Block TCP/445" -f *+0:445:TCP -n BLOCK
  27. ipseccmd -w REG -p "Block default ports" -r "Block UDP/123" -f *+0:123:UDP -n BLOCK
  28. ipseccmd -w REG -p "Block default ports" -r "Block UDP/135" -f *+0:135:UDP -n BLOCK
  29. ipseccmd -w REG -p "Block default ports" -r "Block UDP/137" -f *+0:137:UDP -n BLOCK
  30. ipseccmd -w REG -p "Block default ports" -r "Block UDP/138" -f *+0:138:UDP -n BLOCK
  31. ipseccmd -w REG -p "Block default ports" -r "Block UDP/139" -f *+0:139:UDP -n BLOCK
  32. ipseccmd -w REG -p "Block default ports" -r "Block UDP/445" -f *+0:445:UDP -n BLOCK
  33. @ rem ipseccmd -w REG -p "Block default ports" -r "Block ping" -f 0+*::ICMP -n BLOCK
  34. ipseccmd -w REG -p "Block default ports" -x
  35. @ goto :end

  36. ∶inactive
  37. @ echo on
  38. ipseccmd -w REG -p "Block default ports" -y
  39. @ goto :end

  40. ∶delete
  41. @ echo on
  42. ipseccmd -w REG -p "Block default ports" -y
  43. ipseccmd -w REG -p "Block default ports" -o

  44. ∶end
  45. @ echo off
  46. pause
复制代码 ----------[cmd中写脚本

cmd中写脚本比较的别扭,不过也是一种不可多得的技术,学习下总是有好处的,在远程控制的情况下cmd选些脚本的技能就有它的用武之地了!!!下面就举几个例子。

在cmd下写一个可以读取注册表键值的inf文件
  1. @echo [Version] >c:\1.inf
  2. @echo Signature="$WINDOWS NT[code]@echo [Version] >c:\1.inf
  3. @echo Signature="$WINDOWS NT[        DISCUZ_CODE_15        ]quot;>>c:\1.inf
  4. @echo [DefaultInstall] >>c:\1.inf
  5. @echo AddReg=My_AddReg_Name >>c:\1.inf
  6. @echo DelReg=My_DelReg_Name >>c:\1.inf
  7. @echo [My_AddReg_Name] >>c:\1.inf
  8. @echo HKLM,SOFTWARE\Microsoft\TelnetServer.0,TelnetPort,0x00010001,2323 >>c:\1.inf
  9. @echo HKLM,SOFTWARE\Microsoft\TelnetServer.0,NTLM,0x00010001,1 >>c:\1.inf
  10. @echo [My_DelReg_Name] >>c:\1.inf
  11. @echo HKLM,SYSTEM\CurrentControlSet\Services\Serv-U >>c:\1.inf
  12. @echo HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Run,KAVRun >>c:\1.inf
复制代码 利用方法:
  1. rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\path\reg.inf
复制代码 这inf文件的作用是删除和添加具体要求的键值,详细的inf脚本文件编写规则网上可以详细的查询!!


在cmd下写一个js脚本文件
实现代码:
  1. @echo var w=WScript.createObject("wscript.shell")>1.js
  2. @echo w.popup(showFolders("c:\\"))>>1.js
  3. @echo function showFolders(foldername)>>1.js
  4. @echo {>>1.js
  5. @echo var fs,f,fc,s;>>1.js
  6. @echo s="">>1.js
  7. @echo fs=new ActiveXObject("Scripting.FIleSystemObject");>>1.js
  8. @echo f=fs.GetFolder(foldername);>>1.js
  9. @echo fc=new Enumerator(f.SubFolders);>>1.js
  10. @echo for(; !fc.atEnd(); fc.moveNext())>>1.js
  11. @echo {s+=fc.item();>>1.js
  12. @echo s+="\r\n">>1.js
  13. @echo }>>1.js
  14. @echo return(s);>>1.js
  15. @echo }>>1.js
复制代码 功能是列目录
效果

这里要注意转义字符的运用哦!!!


引用:
如果使用特殊字符 <、>、|、& 或 ^,
则必须在它们前面加上转义字符 (^) 或引号。
如果使用引号,则必须将引号作为值的组成部分


^是转义字符
<、>、|、&的对应形式分别是^<,^>,^|,^&
如echo ^>^>^>
将显示出
>>>

引号也有类似的作用
但是他本身也在显示之列


-------[wmic的应用
在WINDOWS\Help目下,wmic.chm文档是这样解释 wmi的:Windows Management Instrumentation (WMI) 是“基于 Web 的企业管理倡议 (WBEM)”(这是一个旨在建立在企业网络上访问和共享管理信息的标准的工业倡议)的 Microsoft 的实现。有关 WBEM 的详细信息,请访问 WBEM。XOXWMI 为公用信息模型 (CIM)(该数据模型描述存在于管理环境中的对象)提供完整的支持。WMI 包括对象储备库和 CIM 对象管理器,其中对象储备库是包含对象定义的数据库,对象管理器负责处理储备库中对象的收集和操作并从 WMI 提供程序 (WMI provider) 收集信息。WMI 提供程序 (WMI provider) 在 WMI 和操作系统、应用程序以及其他系统的组件之间充当中介。例如,注册表提供程序从注册表中提供信息,而 SNMP 提供程序则从 SNMP 设备中提供数据和事件。提供程序提供关于其组件的信息,也可能提供一些方法,这些方法可以操作可设置的组件、属性,或者操作可能警告您在组件中要发生更改的事件。Windows Management Instrumentation 命令行 (WMIC) 向您提供了简单的 Windows Management Instrumentation (WMI) 命令行界面,这样即可利用 WMI 来管理运行 Windows 的计算机。WMIC 与现有命令行程序和实用程序命令相互操作,且很容易通过脚本或其他面向管理的应用程序来扩展 WMIC。


以上的这些说法太专业了,通俗一点讲就是wmic.exe是一个命令行程序,可以用它这个接口来实现在命令行下直接管理计算机软硬件等方方面面的操作。
我们在运行里填上wbemtest
通过一系列的操作,我们可以查到wmi里的类,我们可以通过WQL语句来查询自己需要的信息!!





在我看来wmic可以通过命令行来对windows系统进行全面的管理!!!
vbs脚本中我也是觉得wmi的运用才是最有效率的!!!!

下面我们来详细的讲解下wmic
wmic的语法:
wmic [global_switch] [options] [format]
,其实简单总结一下,命令格式就是“wmic+全局开关+别名+wql语句+动词+副词(或者说是动词的参数)+动词开关”而已了。
  1. wmic share list /format:table
复制代码 这个语句的是列出本地机器的共享名单

再者我们来使用
  1. wmic logicaldisk list brief(wmic.exe+别名+list动词)
复制代码 来显示硬盘数据信息
同样的,我们也可以用
  1. wmic os list brief
复制代码 来显示系统信息!!!

  1. wmic nicconfig get description, ipaddress
复制代码 则是在nicconfig这个类别里筛选出ip地址和描述的信息!!!

如果你觉得这样显示不是很直观的话呢就可以通过
  1. wmic nicconfig get description, ipaddress /format:htable >nic_addresses.html
复制代码 这个命令在htm页面里显示出来哦,效果如下:

同理,
  1. wmic group list full /format:hform >groups.html
复制代码 就可以枚举系统用户的信息了哦!!!,效果


再上个列举系统当前运行程序详细信息的例子:
  1. wmic /output:c:\processes.html process list full /format:hform
复制代码 效果:

结合find命令可以实现详细查找,
  1. wmic process list brief | find "cmd.exe"
复制代码

总之,wmic是博大精深的,这里就起个抛砖引玉的作用吧!!!

--------[让windows也拥有类linux中强大的shell—终端改造计划

linux里的shell解释器凡是用过的人就会有这样的感觉,利用shell的shell脚本,可以实现很多系统的修改和配置功能,可以说是很强大的!!!那么在windows环境下能不能这样实现呢?答案是见仁见智的,我来说说我在windows下模拟linux shell的心得吧!!!
这里我用到的软件叫采用Cygwin,时专门在windows环境下模拟linux shell的软件
引用:
Cygwin是一个运行于Windows下的免费的UNIX的子系统,使用一个Dll(动态链接库)来
实现,这样,我们可以开发出Cygwin下的UNIX工具,使用这个DLL运行在Windows下,大家可以想
一下,你在运行Windows的同时,也可以使用VI,BASH,TAR,SED等UNIX下的工具,不是很好吗?这个VM
虚拟机有很相同的原理,但是VM是虚拟多个,而Cygwin是同时使用Windows和UNIX,很爽吧,这样
对于那些在Windows和Unix下移植的程序来说是比较简单的事情了.,


运行效果如下:

我们在windows下实现linux shell的
  1. ls
复制代码 命令:

如图所示的,你可以在这个shell环境里用ls命令详细的查看系统文件的访问权限,不过要首先进入C盘才行哦!!!这个命令能显示隐藏文件的!!!
值得一提的是命令的运用参数和在linux中一样是用--help显示的,比如ps命令我想知道它的运用参数那么,我就用
  1. ps --help
复制代码 参数就ok!!!还有就是可以使用tab键来查找相类似的命令!!


这里就列举几个命令还,看看其强大的应用功能。
  1. df
复制代码 ,这是现实系统分区的命令!!!
  1. env
复制代码 ,这是查看系统环境变量的,效果和set差不多!!!




接下来就是环境变量戏法,我们知道在cmd下执行命令实际上就是系统依照在path这个值里储存的路径信息来查找,如果没有找到就发生错误,呵呵,那么我们就构造一个特殊的文件夹,并将自己喜欢的工具全放在这文件夹不就ok了?

实现步骤如下:
1.建立一个文件夹
2.放入自己喜欢的命令行工具或者实用脚本
3.在环境变量选项里修改path,添加上自己构造的文件夹的路径
4.直接在cmd下调用这些系统工具,呵呵,是不是比较的方便呢?

注:这里在Cgywin下也是可以调用这些工具的,因为这个模拟的bash shell也是搜索path这个变量的。不过不好的地方就是这个东东不支持中文,凡是中文就显示?,这是比较的郁闷的。

-----------[总结
让命令在终端上跳舞其实是linux里的概念,不过我们的windows命令行也不是那么的不中用,还是比较的强大的,关键在于我们会不会尽自己最大的努力在利用这些资源而已了。我是喜欢在黑色的命令行上完成操作的,因为这样我们可以更好的理解系统的功能运作!!!如果你能从这篇文章中学到东西,那么这篇文章就有它的价值了.........如果各位有什么更好的建议,请提出来!!!
1

评分人数

    • yansy: 技术积分 + 2