关于作者

用户名:linxh
笔名:linxh
地区: 北京-北京
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



Linux

访问统计:
文章个数:126
评论个数:1
留言条数:1




Powered by BlogDriver 2.1

linxh

 

这是我的一片空间.在这里,有一些资料............

文章

Windows下PHP和Apache的安装与配置及MSSQLSERVER

PHP5为例

一 下载安装程序
Apache
可以从http://www.apache.org/dyn/closer.cgi/httpd/binaries/win32/下载
PHP
可以从http://www.php.net下载.


2 下载PHP时一定要下载那个zip包的,而不要下载Installer.将下载下来的PHP包解压(例如:C盘下的根目录下,并将解压出来的文件夹改名为php.)


三 配置

1
最好是无论使用何种接口(CGI 或者 SAPI)都确保 php5ts.dll 可用,因此必须将此文件放到 Windows 路径中。最好的位置是 Windows system 目录:

c:\windows\system for Windows 9x/ME 
c:\winnt\system32 for Windows NT/2000
或者 c:\winnt40\system32 for Windows NT/2000 服务器版 
c:\windows\system32 for Windows XP 
2
下一步是设定有效的 PHP 配置文件,php.ini。压缩包中包括两个 ini 文件,php.ini-dist php.ini-recommended。建议使用 php.ini-recommended,因为此文件对默认设置作了性能和安全上的优化。

将选择的 ini 文件拷贝到 PHP 能够找到的目录下并改名为 php.iniPHP 默认在 Windows 目录下搜索 php.ini

3 Windows 9x/ME/XP 下将选择的 ini 文件拷贝到 %WINDIR%,通常为 c:\windows 
Windows NT/2000 下将选择的 ini 文件拷贝到 %WINDIR% %SYSTEMROOT% 下,通常为 c:\winnt c:\winnt40 对应于服务器版本。 

4 ApachePHP的设置
有两种方法使得 PHP 工作在 Windows 下的 Apache。一是使用 CGI 二进制文件,另一是使用 Apache 模块 DLL。无论那种方法,首先必须停止 Apache 服务器,然后编辑 httpd.conf,以配置 Apache PHP 协同工作。

 (1)如果要使用CGI二进制文件,要将如下指令插入到 Apache httpd.conf 配置文件中,以设置 CGI 二进制文件:
 PHP
CGI 方式安装到 Apache 2.0:

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php.exe"

 (2)如果想把 PHP 作为 Apache 2.0 的模块,那么就一定要移动 php4ts.dll winnt/system32Windows NT/2000)或 windows/system32Windows XP),覆盖原有文件(如果有的话),对于 PHP 5,这个文件是 php5ts.dll。然后我们要插入如下两行到 httpd.conf

PHP 以模块方式安装到 Apache 2.0:

; For PHP 4 do something like this:
LoadModule php4_module "c:/php/php4apache2.dll"
AddType application/x-httpd-php .php

; For PHP 5 do something like this:
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php

5 与数据库连接

修改php.ini中的extension_dir mssql等

PS:php.ini中还有许多需要设置的项:如全局变量访问等等

二 安装程序
1 Apache
的程序安装相对来说要较为的简单一些,从网站下来的是一个Windows下的安装程序

- 作者: linxh 2005年12月29日, 星期四 16:37  回复(0) |  引用(0) 加入博采

VC文件扩展名

.APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度。资源辅助文件。

.BMP:位图资源文件。

.BSC:浏览信息文件,由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位。用于浏览项目信息的,如果用source brower的话就必须有这个文件。可以在project options里去掉Generate Browse Info File,这样可以加快编译进度。

.C:用C语言编写的源代码文件。

.CLW:ClassWizard生成的用来存放类信息的文件。classwizard信息文件,ini文件的格式。

.CNT:用来定义帮助文件中“Contents”的结构。

.CPP或.CXX:用C++语言编写的源代码文件。

.CUR:光标资源文件。

.DEF:模块定义文件,供生成动态链接库时使用。

.DLG:定义对话框资源的独立文件。这种文件对于VC工程来说并非必需,因为VC一般把对话框资源放在.RC资源定义文件中。

.DSP:VC开发环境生成的工程文件,VC4及以前版本使用MAK文件来定义工程。项目文件,文本格式。

.DSW:VC开发环境生成的WorkSpace文件,用来把多个工程组织到一个WorkSpace中。工作区文件,与.dsp差不多。

.EXP:由LIB工具从DEF文件生成的输出文件,其中包含了函数和数据项目的输出信息,LINK工具将使用EXP文件来创建动态链接库。只有在编译DLL时才会生成,记录了DLL文件中的一些信息。

.H、.HPP或.HXX:用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。

.HLP:Windows帮助文件。

.HM:在Help工程中,该文件定义了帮助文件与对话框、菜单或其它资源之间ID值的对应关系。

.HPJ:由Help Workshop生成的Help工程文件,用来控制Help文件的生成过程。

.HPG,生成帮助的文件的工程。

.ICO:图标资源文件。

.ILK:连接过程中生成的一种中间文件,只供LINK工具使用。

.INI:配置文件。

.LIB:库文件,LINK工具将使用它来连接各种输入库,以便最终生成EXE文件。

.LIC:用户许可证书文件,使用某些ActiveX控件时需要该文件。

.MAK:即MAKE文件,VC4及以前版本使用的工程文件,用来指定如何建立一个工程,VC6把MAK文件转换成DSP文件来处理。

.MAP:由LINK工具生成的一种文本文件,其中包含有被连接的程序的某些信息,例如程序中的组信息和公共符号信息等。执行文件的映像信息记录文件。

.MDP:旧版本的项目文件,相当于.dsp

.NCB:NCB是“No Compile Browser”的缩写,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开发环境自动生成。无编译浏览文件。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。

.OBJ:由编译器或汇编工具生成的目标文件,是模块的二进制中间文件。

.ODL:用对象描述语言编写的源代码文件,VC用它来生成TLB文件。

.OLB:带有类型库资源的一种特殊的动态链接库,也叫对象库文件。

.OPT:VC开发环境自动生成的用来存放WorkSpace中各种选项的文件。工程关于开发环境的参数文件。如工具条位置信息等。

.PBI、.PBO和.PBT:由VC的性能分析工具PROFILE生成并使用的三种文件。

.PCH:预编译头文件,比较大,由编译器在建立工程时自动生成,其中存放有工程中已经编译的部分代码,在以后建立工程时不再重新编译这些代码,以便加快整个编译过程的速度。

.PDB:程序数据库文件,在建立工程时自动生成,其中存放程序的各种信息,用来加快调试过程的速度。记录了程序有关的一些数据和调试信息。

.PLG:编译信息文件,编译时的error和warning信息文件。

.RC:资源定义文件。

.RC2:资源定义文件,供一些特殊情况下使用。

.REG:注册表信息文件。

.RES:二进制资源文件,资源编译器编译资源定义文件后即生成RES文件。

.RTF:Rich Text Format(丰富文本格式)文档,可由Word或写字板来创建,常被用来生成Help文件。

.SBR:VC编译器为每个OBJ文件生成的原始浏览信息文件,浏览信息维护工具(BSCMAKE)将利用SBR文件来生成BSC文件。

.TLB:OLE库文件,其中存放了OLE自动化对象的数据类型、模块和接口定义,自动化服务器通过TLB文件就能了解自动化对象的使用方法。

.WAV:声音资源文件。

- 作者: linxh 2005年12月16日, 星期五 18:11  回复(0) |  引用(0) 加入博采

用ultraEdit打造java IDE

一、配置命令菜单

1、打开 高级->工具配置
2、先定义编译java的工具:
3、在“命令栏”里输入 javac %n%e (%n为文件名不带扩展名,%e为扩展名)
4、在“工作目录”上填 %p (表示文件所在目录)
5、在“菜单项目名称”上输入 编译java程序 (现在在菜单上的名称)
6、选择“保存当前文件”复选框,表示执行之前保存;
7、选择“输入到列表方块”单选框,表示讲命令的结果输出到列表方块上
8、选择“扑捉输出”复选框,表示讲执行的结果扑捉,输出到下面的输出框里
9、打开高级选项,可以设置菜单的图标(可以选一个个性的图标,然后讲菜单拖到工具栏里)
10、点击“插入”按钮,确定,一个编译的菜单就做好了




同样的方法可以做执行java的菜单:
3、在“命令栏”里输入 java %n (%n为文件名不带扩展名,%e为扩展名)
4、在“工作目录”上填 %p (表示文件所在目录)
5、在“菜单项目名称”上输入 执行java程序 (现在在菜单上的名称)

现在你打开高级菜单,发现最下面多了二个你刚才定义的菜单;

然后点击工具栏的右键,选择自定义,就可以把刚才定义的菜单命令拖到工具栏

根据上面的方法,还可以定义其他工具比如定义一个把编译和执行合在一起的菜单
做一个批处理的文件run.bat,放在C:盘,内容如下

javac %1.java
java %1

然后按照上面的方法:
3、在“命令栏”里输入 C:Run.bat %n (%n为文件名不带扩展名,%e为扩展名)
4、在“工作目录”上填 %p (表示文件所在目录)
5、在“菜单项目名称”上输入 运行java程序 (现在在菜单上的名称)

二、自动完成

一般软件上都有自动完成的功能,UltraEdit也可以实现
1、先讲java中的关键字,各种类名,方法等名称写到一个文本文件上,以如下方式

class
private
public
...

然后存称文本

2、选择菜单 高级->配置->编辑,在“自动完成文件”后面的框里填入上面的文本文件的地址(可以通过浏览选择)

3、选择菜单 高级->配置->快速键映射 ,在命令里选择编辑-自动完成,然后在右边注册一个ctrl+alt+space


4、现在IDE就有了自动完成的功能


三、ultraEdit还有很多自定义的功能.

- 作者: linxh 2005年12月15日, 星期四 14:40  回复(0) |  引用(0) 加入博采

JAR文件揭密

  JAR 文件是什么?
  JAR 文件格式以流行的 ZIP 文件格式为基础,用于将许多个文件聚集为一个文件。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

  一个 JAR 文件可以用于:
  □ 用于发布和使用类库
  □ 作为应用程序和扩展的构建单元
  □ 作为组件、applet 或者插件程序的部署单位
  □ 用于打包与组件相关联的辅助资源

  JAR 文件格式提供了许多优势和功能,其中很多是传统的压缩格式如 ZIP 或者 TAR 所没有提供的。它们包括:

  ☆ 安全性。 可以对 JAR 文件内容加上数字化签名。这样,能够识别签名的工具就可以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是否被篡改过。

  ☆ 减少下载时间。 如果一个 applet 捆绑到一个 JAR 文件中,那么浏览器就可以在一个 HTTP 事务中下载这个 applet 的类文件和相关的资源,而不是对每一个文件打开一个新连接。

  ☆ 压缩。JAR 格式允许您压缩文件以提高存储效率。

  ☆ 传输平台扩展。 Java 扩展框架(Java Extensions Framework)提供了向 Java 核心平台添加功能的方法,这些扩展是用 JAR 文件打包的(Java 3D 和 JavaMail 就是由 Sun 开发的扩展例子)。

  ☆ 包密封。 存储在 JAR 文件中的包可以选择进行密封,以增强版本一致性和安全性。密封一个包意味着包中的所有类都必须在同一 JAR 文件中找到。

  ☆ 包版本控制。 一个 JAR 文件可以包含有关它所包含的文件的数据,如厂商和版本信息。

  ☆ 可移植性。 处理 JAR 文件的机制是 Java 平台核心 API 的标准部分。

  压缩的和未压缩的 JAR
  jar 工具在默认情况下压缩文件。未压缩的 JAR 文件一般可以比压缩过的 JAR 文件更快地装载,因为在装载过程中要解压缩文件,但是未压缩的文件在网络上的下载时间可能更长。

  META-INF 目录
  大多数 JAR 文件包含一个 META-INF 目录,它用于存储包和扩展的配置数据,如安全性和版本信息。Java 2 平台识别并解释 META-INF 目录中的下述文件和目录,以便配置应用程序、扩展和类装载器:

  ☆ MANIFEST.MF。 这个 manifest 文件定义了与扩展和包相关的数据。

  ☆ INDEX.LIST。 这个文件由 jar 工具的新选项 -i 生成,它包含在应用程序或者扩展中定义的包的位置信息。它是 JarIndex 实现的一部分,并由类装载器用于加速类装载过程。

  ☆ xxx.SF。 这是 JAR 文件的签名文件。占位符 xxx 标识了签名者。

  ☆ xxx.DSA。 与签名文件相关联的签名程序块文件,它存储了用于签名 JAR 文件的公共签名。

  jar 工具
  为了用 JAR 文件执行基本的任务,要使用作为Java Development Kit 的一部分提供的 Java Archive Tool (jar 工具)。用 jar 命令调用 jar 工具。表 1 显示了一些常见的应用:

表 1. 常见的 jar 工具用法

功能命令
用一个单独的文件创建一个 JAR 文件jar cf jar-file input-file...
用一个目录创建一个 JAR 文件jar cf jar-file dir-name
创建一个未压缩的 JAR 文件jar cf0 jar-file dir-name
更新一个 JAR 文件jar uf jar-file input-file...
查看一个 JAR 文件的内容jar tf jar-file
提取一个 JAR 文件的内容jar xf jar-file
从一个 JAR 文件中提取特定的文件jar xf jar-file archived-file...
运行一个打包为可执行 JAR 文件的应用程序java -jar app.jar

  可执行的 JAR
  一个可执行的 jar 文件是一个自包含的 Java 应用程序,它存储在特别配置的JAR 文件中,可以由 JVM 直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行的 JAR 中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但是使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。

  创建可执行 JAR
  创建一个可执行 JAR 很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中的主类是 com.mycompany.myapp.Sample。您要创建一个包含应用程序代码的 JAR 文件并标识出主类。为此,在某个位置(不是在应用程序目录中)创建一个名为 manifest 的文件,并在其中加入以下一行:

  Main-Class: com.mycompany.myapp.Sample

  然后,像这样创建 JAR 文件:

  jar cmf manifest ExecutableJar.jar application-dir

  所要做的就是这些了 -- 现在可以用 java -jar 执行这个 JAR 文件 ExecutableJar.jar。

  一个可执行的 JAR 必须通过 menifest 文件的头引用它所需要的所有其他从属 JAR。如果使用了 -jar 选项,那么环境变量 CLASSPATH 和在命令行中指定的所有类路径都被 JVM 所忽略。

  启动可执行 JAR
  既然我们已经将自己的应用程序打包到了一个名为 ExecutableJar.jar 的可执行 JAR 中了,那么我们就可以用下面的命令直接从文件启动这个应用程序:

  java -jar ExecutableJar.jar

  包密封
  密封 JAR 文件中的一个包意味着在这个包中定义的所有类都必须在同一个 JAR 文件中找到。这使包的作者可以增强打包类之间的版本一致性。密封还提供了防止代码篡改的手段。

  要密封包,需要在 JAR 的 manifest 文件中为包添加一个 Name 头,然后加上值为“true”的 Sealed 头。与可执行的 JAR 一样,可以在创建 JAR 时,通过指定一个具有适当头元素的 manifest 文件密封一个 JAR,如下所示:

  Name: com/samplePackage/
  Sealed: true

  Name 头标识出包的相对路径名。它以一个“/”结束以与文件名区别。在 Name 头后面第一个空行之前的所有头都作用于在 Name 头中指定的文件或者包。在上述例子中,因为 Sealed 头出现在 Name 头后并且中间没有空行,所以 Sealed 头将被解释为只应用到包 com/samplePackage 上。

  如果试图从密封包所在的 JAR 文件以外的其他地方装载密封包中的一个类,那么 JVM 将抛出一个 SecurityException。

  扩展打包
  扩展为 Java 平台增加了功能,在 JAR 文件格式中已经加入了扩展机制。扩展机制使得 JAR 文件可以通过 manifest 文件中的 Class-Path 头指定所需要的其他 JAR 文件。

  假设 extension1.jar 和 extension2.jar 是同一个目录中的两个 JAR 文件,extension1.jar 的 manifest 文件包含以下头:

  Class-Path: extension2.jar

  这个头表明 extension2.jar 中的类是 extension1.jar 中的类的扩展类。extension1.jar 中的类可以调用 extension2.jar 中的类,并且不要求 extension2.jar 处在类路径中。

  在装载使用扩展机制的 JAR 时,JVM 会高效而自动地将在Class-Path 头中引用的 JAR 添加到类路径中。不过,扩展 JAR 路径被解释为相对路径,所以一般来说,扩展 JAR 必须存储在引用它的 JAR 所在的同一目录中。

  例如,假设类 ExtensionClient 引用了类 ExtensionDemo,它捆绑在一个名为 ExtensionClient.jar 的 JAR 文件中,而类 ExtensionDemo 则捆绑在 ExtensionDemo.jar 中。为了使 ExtensionDemo.jar 可以成为扩展,必须将 ExtensionDemo.jar 列在 ExtensionClient.jar 的 manifest 的 Class-Path 头中,如下所示:

  Manifest-Version: 1.0
  Class-Path: ExtensionDemo.jar

  在这个 manifest 中 Class-Path 头的值是没有指定路径的 ExtensionDemo.jar,表明 ExtensionDemo.jar 与 ExtensionClient JAR 文件处在同一目录中。

  JAR 文件中的安全性
  JAR 文件可以用 jarsigner 工具或者直接通过 java.security API 签名。一个签名的 JAR 文件与原来的 JAR 文件完全相同,只是更新了它的 manifest,并在 META-INF 目录中增加了两个文件,一个签名文件和一个签名块文件。

  JAR 文件是用一个存储在 Keystore 数据库中的证书签名的。存储在 keystore 中的证书有密码保护,必须向 jarsigner 工具提供这个密码才能对 JAR 文件签名。


图 1. Keystore 数据库

  JAR 的每一位签名者都由在 JAR 文件的 META-INF 目录中的一个具有 .SF 扩展名的签名文件表示。这个文件的格式类似于 manifest 文件 -- 一组 RFC-822 头。如下所示,它的组成包括一个主要部分,它包括了由签名者提供的信息、但是不特别针对任何特定的 JAR 文件项,还有一系列的单独的项,这些项也必须包含在 menifest 文件中。在验证一个签名的 JAR 时,将签名文件的摘要值与对 JAR 文件中的相应项计算的摘要值进行比较。

  清单 1. 签名 JAR 中的 Manifest 和 signature 文件

Contents of signature file META-INF/MANIFEST.MF

Manifest-Version: 1.0
Created-By: 1.3.0 (Sun Microsystems Inc.)

Name: Sample.java
SHA1-Digest: 3+DdYW8INICtyG8ZarHlFxX0W6g=

Name: Sample.class
SHA1-Digest: YJ5yQHBZBJ3SsTNcHJFqUkfWEmI=

Contents of signature file META-INF/JAMES.SF

Signature-Version: 1.0
SHA1-Digest-Manifest: HBstZOJBuuTJ6QMIdB90T8sjaOM=
Created-By: 1.3.0 (Sun Microsystems Inc.)

Name: Sample.java
SHA1-Digest: qipMDrkurQcKwnyIlI3Jtrnia8Q=

Name: Sample.class
SHA1-Digest: pT2DYby8QXPcCzv2NwpLxd8p4G4=

  数字签名
  一个数字签名是.SF 签名文件的已签名版本。数字签名文件是二进制文件,并且与 .SF 文件有相同的文件名,但是扩展名不同。根据数字签名的类型 -- RSA、DSA 或者 PGP -- 以及用于签名 JAR 的证书类型而有不同的扩展名。

  Keystore
  要签名一个 JAR 文件,必须首先有一个私钥。私钥及其相关的公钥证书存储在名为 keystores 的、有密码保护的数据库中。JDK 包含创建和修改 keystores 的工具。keystore 中的每一个密钥都可以用一个别名标识,它通常是拥有这个密钥的签名者的名字。

  所有 keystore 项(密钥和信任的证书项)都是用唯一别名访问的。别名是在用 keytool -genkey 命令生成密钥对(公钥和私钥)并在 keystore 中添加项时指定的。之后的 keytool 命令必须使用同样的别名引用这一项。

  例如,要用别名“james”生成一个新的公钥/私钥对并将公钥包装到自签名的证书中,要使用下述命令:

keytool -genkey -alias james -keypass jamespass
        -validity 80 -keystore jamesKeyStore
        -storepass jamesKeyStorePass

  这个命令序列指定了一个初始密码“jamespass”,后续的命令在访问 keystore “jamesKeyStore”中与别名“james”相关联的私钥时,就需要这个密码。如果 keystore“jamesKeyStore”不存在,则 keytool 会自动创建它。

  jarsigner 工具
  jarsigner 工具使用 keystore 生成或者验证 JAR 文件的数字签名。

  假设像上述例子那样创建了 keystore “jamesKeyStore”,并且它包含一个别名为“james”的密钥,可以用下面的命令签名一个 JAR 文件:

jarsigner -keystore jamesKeyStore -storepass jamesKeyStorePass
          -keypass jamespass -signedjar SSample.jar Sample.jar james

  这个命令用密码“jamesKeyStorePass”从名为“jamesKeyStore”的 keystore 中提出别名为“james”、密码为“jamespass”的密钥,并对 Sample.jar 文件签名、创建一个签名的 JAR -- SSample.jar。

  jarsigner 工具还可以验证一个签名的 JAR 文件,这种操作比签名 JAR 文件要简单得多,只需执行以下命令:

  jarsigner -verify SSample.jar

  如果签名的 JAR 文件没有被篡改过,那么 jarsigner 工具就会告诉您 JAR 通过验证了。否则,它会抛出一个 SecurityException, 表明哪些文件没有通过验证。

  还可以用 java.util.jar 和 java.security API 以编程方式签名 JAR(有关细节参阅参考资料)。也可以使用像 Netscape Object Signing Tool 这样的工具。

  JAR 索引
  如果一个应用程序或者 applet 捆绑到多个 JAR 文件中,那么类装载器就使用一个简单的线性搜索算法搜索类路径中的每一个元素,这使类装载器可能要下载并打开许多个 JAR 文件,直到找到所要的类或者资源。如果类装载器试图寻找一个不存在的资源,那么在应用程序或者 applet 中的所有 JAR 文件都会下载。对于大型的网络应用程序和 applet,这会导致启动缓慢、响应迟缓并浪费带宽。

  从 JDK 1.3 以后,JAR 文件格式开始支持索引以优化网络应用程序中类的搜索过程,特别是 applet。JarIndex 机制收集在 applet 或者应用程序中定义的所有 JAR 文件的内容,并将这些信息存储到第一个 JAR 文件中的索引文件中。下载了第一个 JAR 文件后,applet 类装载器将使用收集的内容信息高效地装载 JAR 文件。这个目录信息存储在根 JAR 文件的 META-INF 目录中的一个名为 INDEX.LIST 的简单文本文件中。

  创建一个 JarIndex
  可以通过在 jar 命令中指定 -i 选项创建一个 JarIndex。假设我们的目录结构如下图所示:


图 2. JarIndex

  您将使用下述命令为 JarIndex_Main.jar、JarIndex_test.jar 和 JarIndex_test1.jar 创建一个索引文件:

  jar -i JarIndex_Main.jar JarIndex_test.jar SampleDir/JarIndex_test1.jar

  INDEX.LIST 文件的格式很简单,包含每个已索引的 JAR 文件中包含的包或者类的名字,如清单 2 所示:

  清单 2. JarIndex INDEX.LIST 文件示例

JarIndex-Version: 1.0

JarIndex_Main.jar
sp

JarIndex_test.jar
Sample

SampleDir/JarIndex_test1.jar
org
org/apache
org/apache/xerces
org/apache/xerces/framework
org/apache/xerces/framework/xml4j

  结束语
  JAR 格式远远超出了一种压缩格式,它有许多可以改进效率、安全性和组织 Java 应用程序的功能。因为这些功能已经建立在核心平台 -- 包括编译器和类装载器 -- 中了,所以开发人员可以利用 JAR 文件格式的能力简化和改进开发和部署过程。

- 作者: linxh 2005年09月17日, 星期六 01:41  回复(0) |  引用(0) 加入博采

C语言之代码检查工具
  PC-Lint是一个历史悠久,功能异常强劲的静态代码检测工具。它的使用历史可以追溯到计算机编程的远古时代(30多年以前)。经过这么多年的发展,它不但能够监测出许多语法逻辑上的隐患,而且也能够有效地帮你提出许多程序在空间利用、运行效率上的改进点,在很多专业级的软件公司,比如Microsoft, PC-Lint检查无错误无警告是代码首先要过的第一关,我个人觉得,对于小公司和个人开发而言,PC-Lint也非常重要,因为基于开发成本考虑,小公司和个人往往不能拿出很多很全面的测试,这时候,PC-Lint的强劲功能可以很好地提高软件的质量。

  功能

  1) PC-Lint是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。

  2) PC-lint不但可以检测单个文件,也可以从整个项目的角度来检测问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件,可想而知,它会对我们有很大的帮助。

  3) PC-lint支持几乎所有流行的编辑环境和编译器,比如Borland C++从1.x到5.x各个版本、Borland C++ Build、GCC、VC,VC.net、watcom C/C++、Source insight、intel C/C++等等,也支持16/32/64的平台环境。

  4) 支持Scott Meyes的名著(Effective C++/More Effective C++)中说描述的各种提高效率和防止错误的方法。

  四步速成PC-Lint概述

  这么好的工具,当然是先拿起来用了再说,这里分为四步,保证你马上可以使用PC-Lint了,当然,如果你上手以后,想细致深入学习这个工具,可以在网上查找相应的资料,另外在我的另一个系列文章《软件开发的七种武器》中有一篇是讲述 PC-Lint使用的,比这篇要深入细致一些,如有兴趣,也可以看看。

  第一步:安装&设置

  安装和通常的软件没有什么不同。

  安装结束后在PC-Lint安装目录下运行CONFIG.exe,各项设置简要解释如下:

  a) 第一步,给出PC-Lint的安装路径和选择设置的保存文件。

  b) 第二步,选择你所使用的C/C++编译器:比如Visual C++ 6.x。

  c) 第三步,选择内存模式:比如32 bit Flat Model。

  d) 第四步,选择所使用的库:比如MFC,OWL,等,可多选,在windows下开发的一般要选中windows 32 bit。

  e) 第五步,C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开:比如Scott Meyers,可不选。

  f) 第六步,头文件的设置:可在后面步骤中手工添加。

  第二步:整合PC-Lint到选定的编译环境

  当你在上述第二步中选择了编译器后,可以在PC-Lint目录下找到一个"env-选用的编辑环境.lnt"文件,比如对于Source insight 是env-si.lnt,对于vc6是env-vc6.lnt。

  打开此文件,根据上面的描述,配置你的编译器,下面以VC6为例:

  ·选取菜单 tools | customize.....

  ·选取 Tools 标签

  ·点按主对话框上方的虚线小方框 New

  ·输入 name: PC-LINT

  ·输入 Command: c:\lint\lint-nt.exe,假设安装到此路径

  ·输入 Arguments: c:\lint\std.lnt ?(FilePath)?7)选择 (x) Use Output Window

  ·Close

  ·完成后,在tools菜单下就会有一项PC-LINT选项。下面是TOOL配置图:

  第三步:Lint单个C文件

  a) 打开一个C文件

  b) 运行第2)步集成上的PC-Lint菜单项

  c) LINT结果会在一两秒之内出来。告警的解释可参考LINT安装目录下MSG.TXT文件,打开文件,通过查找告警号码定位,就可以看到比较详细的说明。

  第四步:Lint多个C文件

  a) 在LINT软件目录下建立PRJLINT.LNT文件,文件的第一行是使用的LINT配置文件名,从第二行开始,列出想所有要LINT的*.C文件名,一行一个。如果要把结果输出到文件,在前面加上一行"-os(文件名)"(例如:"-os(c:\lint\result.txt)")。样例:YF_Config.lnt

// 以下为自己想要进行Lint的.C文件,
G:\src\tt\tt1.c
G:\src\tt\tt2.c


  b) 用2)介绍的方法在Source Insight"中介绍的方法增加一条"PC-LINT PROJECT"命令,所有设置与"PC-LINT"设置相同,除了

  ①"Custom Commands"对话框中"RUN"编辑框的文字由"C:\LINT\LINT-NT.EXE filename.lnt %f"改为"C:\LINT\LINT-NT.EXE PRJLINT.LINT",也就是把配置文件名改为PRJLINT.LNT,并去掉未尾的"%f"

  ②设置的快捷键与PC-LINT要区别开来

  利用下面的DOS命令可以用来得到一堆*.C文件的清单。例如:

  ① 列出C:\SRC下所有*.C文件,并保存到C:\SRC\FILELIST.TXT:

DIR C:\SRC\*.C /B >C:\SRC\FILELIST.TXT

  ② 列出C:\SRC下,包括SRC的子目录下的所有的*.C文件,,并添加到C:\SRC\FILELIST.TXT的未尾:

DIR C:\SRC\*.C /S/B >>C:\SRC\FILELIST.TXT

  PC-Lint 重要文件说明

  Msg.txt :解释告警的内容。

  选用的.lnt :包含头文件的路径,-i选项。

  env-选用的编辑环境.lnt :讲述如何将PC-lint与对应的编辑环境结合起来。

  co-xxx.lnt :选定的编译器。

  STD.LNT :内存模型等全局性东西。

  LIB-xxx.LNT :库类型的列表,包括标准C/C++库,MFC库,OWL库等等。

  AU-xxx.LNT :C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开。

  OPTIONS.LNT :反映全局编译信息显示情况的选项文件。

- 作者: linxh 2005年09月17日, 星期六 01:18  回复(0) |  引用(0) 加入博采

Windows服务端口大全

Internet 连接共享 (ICS)/Internet 连接防火墙 (ICF) 服务的这个子组件对允许网络协议通过防火墙并在 Internet 连接共享后面工作的插件提供支持。应用层网关 (ALG) 插件可以打开端口和更改嵌入在数据包内的数据(如端口和 IP 地址)。文件传输协议 (FTP) 是唯一具有 Windows Server 2003 标准版和 Windows Server 2003 企业版附带的一个插件的网络协议。ALG FTP 插件旨在通过这些组件使用的网络地址转换 (NAT) 引擎来支持活动的 FTP 会话。ALG FTP 插件通过以下方式来支持这些会话:将所有通过 NAT 传递的、发往端口 21 的通信重定向到环回适配器上 3000 到 5000 范围内的专用侦听端口。然后,ALG FTP 插件监视并更新 FTP 控制通道通信,使 FTP 插件可以通过 FTP 数据通道的 NAT 转发端口映射。FTP 插件还更新 FTP 控制通道流中的端口。 系统服务名称:ALG应用协议 协议 端口 FTP 控制 TCP 21 ASP.NET 状态服务
ASP.NET 状态服务支持 ASP.NET 进程外会话状态。ASP.NET 状态服务在进程外存储会话数据。此服务使用套接字与 Web 服务器上运行的 ASP.NET 通信。

系统服务名称:aspnet_state应用协议 协议 端口 ASP.NET 会话状态 TCP 42424 证书服务
证书服务是核心操作系统的一部分。使用证书服务,企业可以充当它自己的证书颁发机构 (CA)。通过这种方法,企业可以颁发和管理程序和协议(如安全/多用途 Internet 邮件扩展 (S/MIME)、安全套接字层 (SSL)、加密文件系统 (EFS)、IPSec 以及智能卡登录)的数字证书。证书服务使用高于端口 1024 的随机 TCP 端口,依赖 RPC 和 DCOM 与客户机通信。 系统服务名称:CertSvc应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 集群服务
“集群”服务控制服务器集群操作并管理集群数据库。集群是充当单个计算机的独立计算机的集合。管理员、程序员和用户将集群看作一个系统。此软件在集群节点之间分发数据。如果一个节点失败了,其他节点将提供原来由丢失的节点提供的服务和数据。当添加或修复了某个节点后,集群软件将一些数据迁移到此节点。

系统服务名称:ClusSvc应用协议 协议 端口 集群服务 UDP 3343 随机分配的高 TCP 端口 TCP 随机端口号 计算机浏览器
“计算机浏览器”系统服务维护网络上的最新计算机列表,并应程序的请求提供此列表。基于 Windows 的计算机使用计算机浏览器服务来查看网络域和资源。被指定为浏览器的计算机维护浏览列表,这些列表中包含网络上使用的所有共享资源。Windows 程序的早期版本(如“网上邻居”、net view 命令以及 Windows 资源管理器)都需要浏览功能。例如,当您在一台运行 Microsoft Windows 95 的计算机上打开“网上邻居”时,就会出现域和计算机的列表。为了显示此列表,计算机从被指定为浏览器的计算机上获取浏览列表的副本。

系统服务名称:浏览器应用协议 协议 端口 NetBIOS 数据报服务 UDP 138 NetBIOS 名称解析 UDP 137 NetBIOS 名称解析 TCP 137 NetBIOS 会话服务 TCP 139 DHCP 服务器
“DHCP 服务器”服务使用动态主机配置协议 (DHCP) 自动分配 IP 地址。使用此服务,可以调整 DHCP 客户机的高级网络设置。例如,可以配置诸如域名系统 (DNS) 服务器和 Windows Internet 名称服务 (WINS) 服务器之类的网络设置。可以建立一个或更多的 DHCP 服务器来维护 TCP/IP 配置信息并向客户计算机提供此信息。

系统服务名称:DHCPServer应用协议 协议 端口 DHCP 服务器 UDP 67 MADCAP UDP 2535 分布式文件系统
“分布式文件系统 (DFS)”服务管理分布在局域网 (LAN) 或广域网 (WAN) 上的逻辑卷,它对 Microsoft Active Directory 目录服务 SYSVOL 共享是必需的。DFS 是将不同的文件共享集成为一个逻辑命名空间的分布式服务。 系统服务名称:Dfs应用协议 协议 端口 NetBIOS 数据报服务 UDP 138 NetBIOS 会话服务 TCP 139 LDAP 服务器 TCP 389 LDAP 服务器 UDP 389 SMB TCP 445 SMB UDP 445 随机分配的高 TCP 端口 TCP 随机端口号 分布式链接跟踪服务器
“分布式链接跟踪服务器”系统服务存储信息,使得在卷之间移动的文件可以跟踪到域中的每个卷。“分布式链接跟踪服务器”服务运行在一个域中的所有域控制器上。此服务使“分布式链接跟踪服务器客户机”服务能够跟踪已移动到同一个域中另一个 NTFS 文件系统中某个位置的链接文档。 系统服务名称:TrkSvr应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 分布式事务处理协调器
“分布式事务处理协调器 (DTC)”系统服务负责协调跨计算机系统和资源管理器分布的事务,如数据库、消息队列、文件系统和其他事务保护资源管理器。通过 COM+ 配置事务组件时需要 DTC 系统服务。跨多个系统的消息队列(也称为 MSMQ)和 SQL Server 操作中的事务队列也需要 DTC 系统服务。 系统服务名称:MSDTC应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 DNS 服务器
“DNS 服务器”服务通过应答有关 DNS 名称的查询和更新请求来启用 DNS 名称解析。查找使用 DNS 标识的设备和服务以及在 Active Directory 中查找域控制器都需要 DNS 服务器。

系统服务名称:DNS应用协议 协议 端口 DNS UDP 53 DNS UDP 53 事件日志
“事件日志”系统服务记录由程序和 Windows 操作系统生成的事件消息。事件日志报告中包含对诊断问题有用的信息。在事件查看器中查看报告。事件日志服务将程序、服务以及操作系统发送的事件写入日志文件。这些事件中不仅包含特定于源程序、服务或组件的错误,还包含诊断信息。可以通过事件日志 API 以编程方式查看日志,也可以通过 MMC 管理单元中的事件查看器查看日志。

系统服务名称:Eventlog应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 Exchange Server
Microsoft Exchange Server 包括几个系统服务。当 MAPI 客户机(如 Microsoft Outlook)连接到 Exchange 服务器时,客户机先连接到 TCP 端口 135 上的 RPC 终结点映射器(RPC 定位器服务)。RPC 终结点映射器告诉客户机使用哪些端口连接到 Exchange Server 服务。这些端口是动态分配的。Microsoft Exchange Server 5.5 使用两个端口:一个用于信息存储,一个用于目录。Microsoft Exchange 2000 Server 和 Microsoft Exchange Server 2003 使用三个端口:一个用于信息存储,两个用于系统助理。通过使用 RPC over HTTP,还可以使用 Microsoft Office Outlook 2003 连接到运行 Exchange Server 2003 的服务器。Exchange Server 还支持其他协议,如 SMTP、邮局协议 3 (POP3) 以及 IMAP。

应用协议 协议 端口 IMAP TCP 143 IMAP over SSL TCP 993 POP3 TCP 110 POP3 over SSL TCP 995 随机分配的高 TCP 端口 TCP 随机端口号 RPC TCP 135 RPC over HTTP TCP 593 SMTP TCP 25 SMTP UDP 25 传真服务
传真服务是一个与电话服务 API (TAPI) 兼容的系统服务,它提供传真功能。使用传真服务,用户可以使用本地传真设备或共享的网络传真设备,从他们的桌面程序发送和接收传真。

系统服务名称:传真应用协议 协议 端口 NetBIOS 会话服务 TCP 139 随机分配的高 TCP 端口 TCP 随机端口号 SMB TCP 445 SMB UDP 445 文件复制
文件复制服务 (FRS) 允许同时在许多服务器上自动复制和维护文件。FRS 是 Windows 2000 和 Windows Server 2003 中的自动文件复制服务,其功能是将 SYSVOL 共享复制到所有的域控制器。此外,还可以将 FRS 配置为在与容错 DFS 关联的备用目标之间复制文件。 系统服务名称:NtFrs应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 Macintosh 文件服务器
使用“Macintosh 文件服务器”系统服务,Macintosh 计算机用户可以在运行 Windows Server 2003 的计算机上存储和访问文件。如果此服务被关闭或被禁止,Macintosh 客户机将无法在此计算机上访问或存储文件。 系统服务名称:MacFile应用协议 协议 端口 Macintosh 文件服务器 TCP 548 FTP 发布服务
FTP 发布服务提供 FTP 连接。默认情况下,FTP 控制端口为 21。不过,通过“Internet 信息服务 (IIS) 管理器”管理单元可以配置此系统服务。默认数据端口(即主动模式 FTP 使用的端口)自动设置为比控制端口低一个端口。因此,如果将控制端口配置为端口 4131,则默认数据端口为端口 4130。大多数 FTP 客户机都使用被动模式 FTP。这表示客户机最初使用控制端口连接到 FTP 服务器,FTP 服务器分配一个介于 1025 和 5000 之间的高 TCP 端口,然后客户机打开另一个 FTP 服务器连接以传递数据。可以使用 IIS 元数据库配置高端口的范围。 系统服务名称:MSFTPSVC应用协议 协议 端口 FTP 控制 TCP 21 FTP 默认数据 TCP 20 随机分配的高 TCP 端口 TCP 随机端口号 HTTP SSL
HTTP SSL 系统服务使 IIS 能够执行 SSL 功能。SSL 是一个开放式标准,用于建立加密的通信通道以帮助防止拦截重要信息(如信用卡号码)。尽管此服务旨在处理其他 Internet 服务,但它主要用于启用万维网 (WWW) 上的加密电子金融交易。通过“Internet 信息服务 (IIS) 管理器”管理单元可以配置用于此服务的端口。 系统服务名称:HTTPFilter应用协议 协议 端口 HTTPS TCP 443 Internet 身份验证服务
Internet 验证服务 (IAS) 对正在连接到网络的用户执行集中式身份验证、授权、审核以及计帐。这些用户可以在 LAN 连接上,也可以在远程连接上。IAS 实现 Internet 工程任务组 (IETF) 标准远程身份验证拨入用户服务 (RADIUS) 协议。 系统服务名称:IAS应用协议 协议 端口 旧式 RADIUS UDP 1645 旧式 RADIUS UDP 1646 RADIUS 计帐 UDP 1813 RADIUS 身份验证 UDP 1812 Internet 连接防火墙 (ICF)/Internet 连接共享 (ICS)
此系统服务为家庭网络或小型办公室网络上的所有计算机提供 NAT、寻址以及名称解析服务。当启用 Internet 连接共享功能时,您的计算机就变成网络上的“Internet 网关”,然后其他客户计算机可以共享一个 Internet 连接,如拨号连接或宽带连接。此服务提供基本的 DHCP 服务和 DNS 服务,但它也适用于功能完备的 Windows DHCP 服务或 DNS 服务。当 ICF 和 Internet 连接共享充当网络上其他计算机的网关时,它们在内部网络接口上为专用网络提供 DHCP 服务和 DNS 服务。它们不在面向外部的接口上提供这些服务。 系统服务名称:SharedAccess应用协议 协议 端口 DHCP 服务器 UDP 67 DNS UDP 53 DNS TCP 53 IPSec 服务
IPSec 服务有助于在 TCP/IP 网络上的客户机和服务器之间提供端到端安全性。IPSec 服务管理 Internet 协议安全 (IPSec) 策略、启动 Internet 密钥交换 (IKE) 以及协调 IPSec 策略设置与 IP 安全驱动程序。使用 net start 或 net stop 策略代理命令可以控制此服务。 系统服务名称:PolicyAgent应用协议 协议 端口 IPSec ISAKMP 500 Kerberos 密钥分发中心
当您使用 Kerberos 密钥分发中心 (KDC) 系统服务时,用户可以使用 Kerberos 版本 5 身份验证协议登录到网络。与在 Kerberos 协议的其他实现中一样,KDC 是一个提供两个服务的进程:身份验证服务和票证授予服务。身份验证服务颁发票证授予票证,票证授予服务颁发用于连接到自己的域中的计算机的票证。

系统服务名称:kdc应用协议 协议 端口 Kerberos TCP 88 Kerberos UDP 88 许可证记录
“许可证记录”系统服务是一个工具,当初设计它是为了帮助用户管理服务器客户机访问许可证 (CAL) 模型中授权的 Microsoft 服务器产品的许可证。许可证记录是随 Microsoft Windows NT Server 3.51 引入的。默认情况下,Windows Server 2003 中禁用许可证服务。由于原来设计上的限制以及不断发展的许可证条款,许可证记录可能无法提供关于购买的 CAL 总数相对于特定服务器上或整个企业内使用的 CAL 总数的精确视图。许可证记录报告的 CAL 可能与最终用户许可协议 (EULA) 的解释以及产品使用权限 (PUR) 冲突。Windows 操作系统的将来版本中将不包括许可证记录。Microsoft 仅建议 Microsoft Small Business Server 系列操作系统的用户在服务器上启用此服务。

系统服务名称:LicenseService应用协议 协议 端口 NetBIOS 数据报服务 UDP 138 NetBIOS 会话服务 TCP 139 SMB TCP 445 SMB UDP 445 本地安全机构
“本地安全机构”系统服务提供核心操作系统安全机制。它将通过 RPC 服务分配的随机 TCP 端口用于域控制器复制。

系统服务名称:LSASS应用协议 协议 端口 全局编录服务器 TCP 3269 全局编录服务器 TCP 3268 LDAP Server TCP 389 LDAP Server UDP 389 LDAP SSL TCP 636 LDAP SSL UDP 636 随机分配的高 TCP 端口 TCP 随机端口号

消息队列
“消息队列”系统服务是一个消息处理结构和开发工具,用于创建 Windows 分布式消息处理程序。这些程序可以跨异构网络通信,并且可以在可能暂时无法彼此连接的计算机之间发送消息。消息队列对提供安全性、提高路由效率、支持在事务内发送消息、基于优先级的消息处理以及有保障的邮件传递都有帮助。 系统服务名称:MSMQ应用协议 协议 端口 MSMQ TCP 1801 MSMQ UDP 1801 MSMQ-DCs TCP 2101 MSMQ-Mgmt TCP 2107 MSMQ-Ping UDP 3527 MSMQ-RPC TCP 2105 MSMQ-RPC TCP 2103 RPC TCP 135 信使
“信使”系统服务向用户和计算机、管理员以及 Alerter 服务发送消息或接收来自它们的消息。此服务与 Windows Messenger 无关。如果禁用信使服务,发送给当前登录到网络上的计算机或用户的通知就无法收到。此外,net send 命令和 net name 命令不再起作用。 系统服务名称:信使应用协议 协议 端口 NetBIOS 数据报服务 UDP 138 Microsoft Exchange MTA 堆栈
在 Microsoft Exchange 2000 Server 和 Microsoft Exchange Server 2003 中,消息传输代理 (MTA) 常常用于在混合模式环境中基于 Exchange 2000 Server 的服务器和基于 Exchange Server 5.5 的服务器之间提供向后兼容的消息传输服务。 系统服务名称:MSExchangeMTA应用协议 协议 端口 X.400 TCP 102 Microsoft Operations Manager 2000
Microsoft Operations Manager (MOM) 2000 通过提供全面的事件管理、主动的监视和警告、报告以及趋势分析来提供企业级操作管理。安装了 MOM 2000 Service Pack 1 (SP1) 之后,MOM 2000 不再使用明文通信通道,MOM 代理和 MOM 服务器之间的所有通信都在 TCP 端口 1270 上加密。MOM 管理员控制台使用 DCOM 连接到服务器。这意味着管理网络上的 MOM 服务器的管理员必须能够访问随机高 TCP 端口。

系统服务名称:one point应用协议 协议 端口 MOM-Clear TCP 51515 MOM-Encrypted TCP 1270 Microsoft POP3 服务
Microsoft POP3 服务提供电子邮件传输服务和检索服务。管理员可以使用此服务在邮件服务器上存储和管理电子邮件帐户。在邮件服务器上安装了 Microsoft POP3 服务后,用户就可以使用支持 POP3 协议的电子邮件客户程序(如 Microsoft Outlook)连接到邮件服务器并且可以检索电子邮件。 系统服务名称:POP3SVC应用协议 协议 端口 POP3 TCP 110 MSSQLSERVER
MSSQLSERVER 是 Microsoft SQL Server 2000 中的一个系统服务。SQL Server 提供了一个强大而全面的数据管理平台。使用服务器网络实用工具可以配置每个 SQL Server 实例所使用的端口。 系统服务名称:MSSQLSERVER应用协议 协议 端口 SQL over TCP TCP 1433 SQL Probe UDP 1434 MSSQL$UDDI
MSSQL$UDDI 系统服务是在安装 Windows Server 2003 系列操作系统的“通用说明、发现和集成 (UDDI)”功能期间安装的。MSSQL$UDDI 在企业中提供 UDDI 功能。SQL Server 数据库引擎是 MSSQL$UDDI 的核心组件。 系统服务名称:MSSQLSERVER应用协议 协议 端口 SQL over TCP TCP 1433 SQL Probe UDP 1434 Net Logon
Net Logon 系统服务维护计算机和域控制器之间的安全通道,以对用户和服务进行身份验证。它将用户的凭据传递给域控制器,然后返回用户的域安全标识符和用户权限。这通常称为 pass-through 身份验证。当计算机是某个域的成员时,Net Logon 自动启动。在 Windows 2000 Server 系列和 Windows Server 2003 系列中,Net Logon 发布 DNS 中的服务资源记录。Net Logon 仅在属于某个域的计算机上启用。当此服务运行时,它依赖“服务器”服务和“本地安全机构”服务来侦听传入的请求。在域成员计算机上,Net Logon 使用命名管道上的 RPC。在域控制器上,它使用命名管道上的 RPC、RPC over TCP/IP、信箱以及轻型目录访问协议 (LDAP)。 系统服务名称:Netlogon应用协议 协议 端口 NetBIOS 数据报服务 UDP 138 NetBIOS 名称解析 TCP 137 NetBIOS 名称解析 UDP 137 NetBIOS 会话服务 TCP 139 SMB TCP 445 SMB UDP 445 NetMeeting 远程桌面共享
“NetMeeting 远程桌面共享”系统服务允许经过授权的用户使用 Windows NetMeeting,通过公司的内部网络从其他个人计算机远程访问您的 Windows 桌面。您必须在 NetMeeting 中显式启用此服务。您也可以在 Windows 通知区域中使用一个图标来禁用或关闭此功能。 系统服务名称:mnmsrvc应用协议 协议 端口 终端服务 TCP 3389 网络新闻传输协议 (NNTP)
“网络新闻传输协议 (NNTP)”系统服务允许运行 Windows Server 2003 的计算机用作新闻服务器。客户端可以使用新闻客户程序(如 Microsoft Outlook Express)从服务器检索新闻组,并阅读各个新闻组中的文章标题或正文。 系统服务名称:NNTPSVC应用协议 协议 端口 NNTP TCP 119 NNTP over SSL TCP 563 性能日志和警报
“性能日志和警报”系统服务根据预先配置的日程表参数,从本地或远程计算机搜集性能数据,然后将这些数据写入日志或触发消息。根据指定日志集合设置中包含的信息,“性能日志和警报”服务启动和停止每个指定的性能数据集合。仅当安排了至少一个性能数据集合时,此服务才运行。 系统服务名称:SysmonLog应用协议 协议 端口 NetBIOS 会话服务 TCP 139 后台打印程序
“后台打印程序”系统服务管理所有的本地和网络打印队列,并控制所有打印作业。后台打印程序是 Windows 打印子系统的中心。它管理系统上的打印队列,并与打印机驱动程序和输入/输出 (I/O) 组件(如 USB 端口和 TCP/IP 协议套件)进行通信。 系统服务名称:Spooler应用协议 协议 端口 NetBIOS 会话服务 TCP 139 SMB TCP 445 SMB UDP 445 远程安装
使用“远程安装”系统服务可以在启用了预启动执行环境 (PXE) 远程启动的客户计算机上安装 Windows 2000、Windows XP 和 Windows Server 2003。启动信息协商层 (BINL) 服务(远程安装服务器 (RIS) 的主要组件)应答 PXE 客户端请求,检查 Active Directory 以进行客户端验证,然后与服务器相互传递客户端信息。当您从“添加/删除 Windows 组件”添加 RIS 组件,或者当您第一次安装操作系统时选中该组件时,就会安装 BINL 服务。

系统服务名称:BINLSVC应用协议 协议 端口 BINL UDP 4011 远程过程调用 (RPC)
“远程过程调用 (RPC)”系统服务是一种进程间通信 (IPC) 机制,它启用驻留在另一个进程中的数据交换和功能调用。不同的进程可以位于同一台计算机上、LAN 上或位于远程位置,并且可以通过 WAN 连接或 VPN 连接进行访问。RPC 服务充当 RPC 终结点映射器和组件对象模型 (COM) 服务控制管理器。许多服务的成功启动都依赖于 RPC 服务。 系统服务名称:RpcSs应用协议 协议 端口 RPC TCP 135 RPC over HTTP TCP 593 远程过程调用 (RPC) 定位器
“远程过程调用 (RPC) 定位器”系统服务管理 RPC 名称服务数据库。此服务打开后,RPC 客户端可以定位 RPC 服务器。默认情况下此服务处于关闭状态。 系统服务名称:RpcLocator应用协议 协议 端口 NetBIOS 会话服务 TCP 139 SMB TCP 445 SMB UDP 445 远程存储通知
“远程存储通知”系统服务在用户读取或写入仅从辅助存储介质可用的文件时通知他们。停止此服务后将禁止此通知。

系统服务名称:Remote_Storage_User_Link应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 远程存储服务器
“远程存储服务器”系统服务将不经常使用的文件存储到辅助存储介质上。如果停止了此服务,用户将无法从辅助存储介质移动或检索文件。 系统服务名称:Remote_Storage_Server应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 路由和远程访问
“路由和远程访问”系统服务提供多协议 LAN 到 LAN、LAN 到 WAN、VPN 和 NAT 路由服务。此外,路由和远程访问还提供拨号和 VPN 远程访问服务。虽然路由和远程访问可以使用下面列出的所有协议,但它通常仅使用这些协议的一部分。例如,配置位于筛选路由器后面的 VPN 网关时使用的通常只是一种技术。如果在 IPSec 中使用第 2 层隧道协议 (L2TP),则必须允许 IPSec 增强型串行端口 (ESP)(IP 协议 50)、NAT-T(端口 4500 上的 TCP)和 IPSec Internet 安全关联和密钥管理协议 (ISAKMP)(端口 500 上的 TCP)通过路由器。有关其他信息,请参见本文中的“参考”部分。 系统服务名称:RemoteAccess应用协议 协议 端口 GRE(IP 协议 47) GRE 无 IPSec AH(IP 协议 51) AH 无 IPSec ESP(IP 协议 50) ESP 无 L2TP UDP 1701 NAT-T UDP 4500 PPTP TCP 1723 服务器
“服务器”系统服务提供 RPC 支持和文件、打印以及通过网络的命名管道共享。服务器服务允许共享本地资源(如磁盘和打印机)以使网络上的其他用户可以访问这些资源。它还允许本地计算机和其他计算机上运行的程序之间的命名管道通信。命名管道通信是为一个进程的输出将要用作另一个进程的输入而保留的内存。接受输入的进程不必非在本地计算机上。

系统服务名称:lanmanserver应用协议 协议 端口 NetBIOS 数据报服务 UDP 138 NetBIOS 名称解析 TCP 137 NetBIOS 名称解析 UDP 137 NetBIOS 会话服务 TCP 139 SMB TCP 445 SMB UDP 445 SharePoint Portal Server
使用 SharePoint Portal Server 系统服务,可以开发一个智能门户,它将用户、团队和知识紧密地联系起来,使人们能够在不同的业务流程之间利用相关的信息。Microsoft SharePoint Portal Server 2003 提供了一个企业业务解决方案,该方案通过单次登录和企业应用集成功能,将来自不同系统的信息集成到一个解决方案中。

应用协议 协议 端口 HTTP TCP 80 HTTPS TCP 443 简单邮件传输协议 (SMTP)
简单邮件传输协议 (SMTP) 系统服务是电子邮件提交和中继代理。它接受发往远程目标的电子邮件并将它们排队,并以指定的时间间隔进行检索。Windows 域控制器将 SMTP 服务用于站点间基于电子邮件的复制。Windows Server 2003 COM 组件的协作数据对象 (CDO) 可以使用 SMTP 服务提交出站电子邮件并将它们排队。 系统服务名称:SMTPSVC应用协议 协议 端口 SMTP TCP 25 SMTP UDP 25 简单 TCP/IP 服务
简单 TCP/IP 服务实现了对以下协议的支持: Echo,端口 7,RFC 862
Discard,端口 9,RFC 863
Character Generator,端口 19,RFC 864
Daytime,端口 13,RFC 867
Quote of the Day,端口 17,RFC 865 系统服务名称:SimpTcp应用协议 协议 端口 Chargen TCP 19 Chargen UDP 19 Daytime TCP 13 Daytime UDP 13 Discard TCP 9 Discard UDP 9 Echo TCP 7 Echo UDP 7 Quotd TCP 17 Quoted UDP 17

SMS 远程控制代理
SMS 远程控制代理是 Microsoft Systems Management Server (SMS) 2003 中的一项系统服务。SMS 远程控制代理为 Microsoft 操作系统的更改和配置管理提供了一个全面的解决方案。使用该解决方案,组织可以为用户提供相关的软件和更新程序。

系统服务名称:Wuser32应用协议 协议 端口 SMS 远程聊天 TCP 2703 SMS 远程聊天 UDP 2703 SMS 远程控制(控件) TCP 2701 SMS 远程控制(控件) UDP 2701 SMS 远程控制(数据) TCP 2702 SMS 远程控制(数据) UDP 2702 SMS 远程文件传输 TCP 2704 SMS 远程文件传输 UDP 2704 SNMP 服务
SNMP 服务允许本地计算机处理传入的简单网络管理协议 (SNMP) 请求。SNMP 服务中包含监视网络设备活动并向网络控制台工作站报告的代理。SNMP 服务提供了从位于中央位置并且运行网络管理软件的计算机(如工作站或服务器计算机、路由器、网桥和集线器)管理网络主机的方法。SNMP 使用分布式管理系统和代理结构来执行管理服务。 系统服务名称:SNMP应用协议 协议 端口 SNMP UDP 161 SNMP 陷阱服务
SNMP 陷阱服务接收由本地或远程 SNMP 代理生成的陷阱消息,然后将这些消息转发给您的计算机上运行的 SNMP 管理程序。为代理配置了 SNMP 陷阱服务后,如果发生任何特定的事件,都将生成陷阱消息。这些消息被发送到陷阱目标。例如,可以将代理配置为在无法识别的管理系统发送信息请求时启动身份验证陷阱。陷阱目标包括管理系统的计算机名、IP 地址或 Internet 数据包交换 (IPX) 地址。陷阱目标必须是启用网络并且运行 SNMP 管理软件的主机。

系统服务名称:SNMPTRAP应用协议 协议 端口 SNMP 陷阱出站 UDP 162 SQL 分析服务器
使用“SQL 分析服务器”系统服务可以创建和管理联机分析处理 (OLAP) 多维数据集和数据挖掘模型。SQL 分析服务器可以出于创建和存储多维数据集或数据挖掘模型的目的,访问本地或远程数据源。 应用协议 协议 端口 SQL 分析服务 TCP 2725 SQL Server:下层 OLAP 客户端支持
当 SQL 分析服务器服务必须支持来自早期版本 (OLAP Services 7.0) 客户端的连接时,使用此系统服务。 应用协议 协议 端口 OLAP Services 7.0 TCP 2393 OLAP Services 7.0 TCP 2394 SSDP 发现服务
SSDP 发现服务将“简单服务发现协议 (SSDP)”实现为 Windows 服务。SSDP 发现服务管理设备存在通知回执,更新其缓存,并将这些通知连同未决的搜索请求一起传递给客户端。SSDP 发现服务还接受来自客户端的事件回调注册,将它们转变为订阅请求,并监视事件通知。然后将这些请求传递给已注册的回调。该系统服务还为宿主设备提供定期通知。当前,SSDP 事件通知服务使用 TCP 端口 5000。从下一个 Windows XP Service Pack 开始,该服务将依赖 TCP 端口 2869。

注意:在撰写本文时,当前的 Windows XP Service Pack 级别为 Windows XP Service Pack 1 (SP1)。

系统服务名称:SSDPRSR应用协议 协议 端口 SSDP UDP 1900 SSDP 事件通知 TCP 2869 SSDP 旧事件通知 TCP 5000 Systems Management Server 2.0
Microsoft Systems Management Server (SMS) 2003 为 Microsoft 操作系统的更改和配置管理提供了一个全面的解决方案。使用此解决方案,组织可以快速经济地为用户提供相关的软件和更新程序。 应用协议 协议 端口 NetBIOS 数据报服务 UDP 138 NetBIOS 名称解析 TCP 137 NetBIOS 名称解析 UDP 137 NetBIOS 会话服务 TCP 139 随机分配的高 TCP 端口 TCP 随机端口号 TCP/IP 打印服务器
“TCP/IP 打印服务器”系统服务使用“行式打印机后台程序 (LPD)”协议来启用基于 TCP/IP 的打印操作。服务器上的 LPD 服务从运行于 UNIX 计算机上的“远程行式打印机 (LPR)”实用工具接收文档。

系统服务名称:LPDSVC应用协议 协议 端口 LPD TCP 515 Telnet
用于 Windows 的 Telnet 系统服务为 Telnet 客户端提供 ASCII 终端会话。Telnet 服务器支持两种类型的身份验证,并支持以下四种类型的终端:
美国国家标准协会 (ANSI)
VT-100
VT-52
VTNT

系统服务名称:TlntSvr应用协议 协议 端口 Telnet TCP 23 终端服务
终端服务提供了一个多会话环境,允许客户端设备访问虚拟 Windows 桌面会话和服务器上运行的基于 Windows 的程序。终端服务允许多个用户以交互方式连接到一台计算机。 系统服务名称:TermService应用协议 协议 端口 终端服务 TCP 3389 终端服务授权
“终端服务授权”系统服务安装许可证服务器,并在已注册的客户端连接到终端服务器(启用“终端服务器”的服务器)时为这些客户端提供许可证。终端服务授权是一种低影响服务,它存储已颁发给终端服务器的客户端许可证,然后跟踪已颁发给客户计算机或终端的许可证。 系统服务名称:TermServLicensing应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 终端服务会话目录
“终端服务会话目录”系统服务允许负载平衡终端服务器集群将用户的连接请求正确地路由到用户已在其上运行会话的服务器。不论用户是否正在服务器集群中运行另一个会话,用户都被路由到第一个可用的终端服务器。负载平衡功能使用 TCP/IP 网络协议集中多个服务器的处理资源。在终端服务器集群中,可以使用此服务在多个服务器之间分配会话,以提高单个终端服务器的性能。终端服务会话目录跟踪集群上断开连接的会话,并确保用户重新连接到那些会话。 系统服务名称:Tssdis应用协议 协议 端口 随机分配的高 TCP 端口 TCP 随机端口号 普通 FTP 后台程序
“普通 FTP 后台程序”系统服务是 RIS 不可缺少的一部分,不需要用户名和密码。普通 FTP 后台程序服务实现了“普通 FTP 协议 (TFTP)”支持,后者由以下 RFC 定义:
RFC 1350 - TFTP
RFC 2347 - 选项扩展
RFC 2348 - 块大小选项
RFC 2349 - 超时间隔和传输大小选项

TFTP 是一种文件传输协议,旨在支持无盘引导环境。TFTP 后台驻留程序侦听 UDP 端口 69,但从随机分配的高端口进行响应。因此,启用此端口后,TFTP 服务可以接收传入的 TFTP 请求,但所选服务器并不能响应这些请求。必须将所选服务器配置为从端口 69 进行响应,它才能响应入站 TFTP 请求。

系统服务名称:tftpd应用协议 协议 端口 TFTP UDP 69 通用即插即用设备主机
“通用即插即用主机发现”系统服务实现了设备注册、控制和响应宿主设备事件所需的全部组件。与设备相关的注册信息(说明、有效期和容器)可以选择存储在磁盘上,并在注册后或者在操作系统重新启动时在网络上公布。此服务除了包括服务说明和演示页外,还包括为设备提供服务的 Web 服务器。 系统服务名称:UPNPHost应用协议 协议 端口 UPNP TCP 2869 Windows Internet 名称服务 (WINS)
Windows Internet 名称服务 (WINS) 启用 NetBIOS 名称解析。此服务使用 NetBIOS 名称帮助您定位网络资源。除非已将所有域都升级到 Active Directory 目录服务并且网络上的所有计算机都运行 Windows 2000 或更高版本,否则需要 WINS 服务器。WINS 服务器使用 NetBIOS 名称解析与网络客户端通信。仅在 WINS 服务器之间才需要 WINS 复制。 系统服务名称:WINS应用协议 协议 端口 NetBIOS 名称解析 TCP 137 NetBIOS 名称解析 UDP 137 WINS 复制 TCP 42 WINS 复制 UDP 42 Windows 媒体服务
Windows Server 2003 中的 Windows 媒体服务取代了 Windows 媒体服务 4.0 版和 4.1 版中包含的以下四项服务:
Windows 媒体监视服务
Windows 媒体节目服务
Windows 媒体广播站服务
Windows 媒体单播服务

Windows 媒体服务现在是单个服务,运行于 Windows Server 2003 标准版、Windows Server 2003 企业版和 Windows Server 2003 数据中心版上。其核心组件是使用 COM 开发的,它具有灵活的结构,可以根据具体的节目自定义。它支持各种控制协议,包括实时流协议 (RTSP)、Microsoft Media Server (MMS) 协议和 HTTP。

系统服务名称:WMServer应用协议 协议 端口 HTTP TCP 80 MMS TCP 1755 MMS UDP 1755 MS Theater UDP 2460 RTCP UDP 5005 RTP UDP 5004 RTSP TCP 554 Windows Time
Windows Time 系统服务保持网络上所有基于 Windows XP 和 Windows Server 2003 的计算机上的日期和时间同步。此服务使用网络时间协议 (NTP) 使计算机时钟同步,以便为网络验证和资源访问请求分配准确的时钟值或时间戳。NTP 的实现和时间提供程序的集成帮助 Windows Time 成为您企业的可靠、灵活的时间服务。对于没有加入域的计算机,可以配置 Windows Time 以使时间与外部时间源同步。如果关闭此服务,则本地计算机的时间设置将不能与 Windows 域中的时间服务或外部配置的时间服务同步。Windows Server 2003 使用 NTP。NTP 运行于 UDP 端口 123 上。此服务的 Windows 2000 版本使用简单网络时间协议 (SNTP)。SNTP 也运行于 UDP 端口 123 上。 系统服务名称:W32Time应用协议 协议 端口 NTP TCP 123 SNTP UDP 123 万维网发布服务
万维网发布服务提供了注册、管理、监视向 IIS 注册的 Web 站点和程序以及为它们提供服务所需的基础结构。此系统服务包含一个进程管理器和一个配置管理器。进程管理器控制自定义应用程序和 Web 站点驻留的进程。配置管理器读取已存储的万维网发布服务的系统配置,并确保 Http.sys 被配置为将 HTTP 请求路由到相应的应用程序池或操作系统进程。通过 Internet 信息服务 (IIS) 管理器管理单元,可以对此服务所使用的端口进行配置。如果启用了管理 Web 站点,则将创建一个在 TCP 端口 8098 上使用 HTTP 通信的虚拟 Web 站点。 系统服务名称:W3SVC应用协议 协议 端口 HTTP TCP 80 HTTPS TCP 443

端口与协议
下表汇总了本文“系统服务端口”部分的信息。此表按端口号(而不是按服务名称)排序。端口 协议 应用协议 系统服务名称 无 GRE GRE(IP 协议 47) 路由和远程访问 无 ESP IPSec ESP(IP 协议 50) 路由和远程访问 无 AH IPSec AH(IP 协议 51) 路由和远程访问 7 TCP Echo 简单 TCP/IP 服务 7 UDP Echo 简单 TCP/IP 服务 9 TCP Discard 简单 TCP/IP 服务 9 UDP Discard 简单 TCP/IP 服务 13 TCP Daytime 简单 TCP/IP 服务 13 UDP Daytime 简单 TCP/IP 服务 17 TCP Quotd 简单 TCP/IP 服务 17 UDP Quotd 简单 TCP/IP 服务 19 TCP Chargen 简单 TCP/IP 服务 19 UDP Chargen 简单 TCP/IP 服务 20 TCP FTP 默认数据 FTP 发布服务 21 TCP FTP 控制 FTP 发布服务 21 TCP FTP 控制 应用层网关服务 23 TCP Telnet Telnet 25 TCP SMTP 简单邮件传输协议 25 UDP SMTP 简单邮件传输协议 25 TCP SMTP Exchange Server 25 UDP SMTP Exchange Server 42 TCP WINS 复制 Windows Internet 名称服务 42 UDP WINS 复制 Windows Internet 名称服务 53 TCP DNS DNS 服务器 53 UDP DNS DNS 服务器 53 TCP DNS Internet 连接防火墙/Internet 连接共享 53 UDP DNS Internet 连接防火墙/Internet 连接共享 67 UDP DHCP 服务器 DHCP 服务器 67 UDP DHCP 服务器 Internet 连接防火墙/Internet 连接共享 69 UDP TFTP 普通 FTP 后台程序服务 80 TCP HTTP Windows 媒体服务 80 TCP HTTP 万维网发布服务 80 TCP HTTP SharePoint Portal Server 88 TCP Kerberos Kerberos 密钥分发中心 88 UDP Kerberos Kerberos 密钥分发中心 102 TCP X.400 Microsoft Exchange MTA 堆栈 110 TCP POP3 Microsoft POP3 服务 110 TCP POP3 Exchange Server 119 TCP NNTP 网络新闻传输协议 123 UDP NTP Windows Time 123 UDP SNTP Windows Time 135 TCP RPC 消息队列 135 TCP RPC 远程过程调用 135 TCP RPC Exchange Server 137 TCP NetBIOS 名称解析 计算机浏览器 137 UDP NetBIOS 名称解析 计算机浏览器 137 TCP NetBIOS 名称解析 Server 137 UDP NetBIOS 名称解析 Server 137 TCP NetBIOS 名称解析 Windows Internet 名称服务 137 UDP NetBIOS 名称解析 Windows Internet 名称服务 137 TCP NetBIOS 名称解析 Net Logon 137 UDP NetBIOS 名称解析 Net Logon 137 TCP NetBIOS 名称解析 Systems Management Server 2.0 137 UDP NetBIOS 名称解析 Systems Management Server 2.0 138 UDP NetBIOS 数据报服务 计算机浏览器 138 UDP NetBIOS 数据报服务 信使 138 UDP NetBIOS 数据报服务 服务器 138 UDP NetBIOS 数据报服务 Net Logon 138 UDP NetBIOS 数据报服务 分布式文件系统 138 UDP NetBIOS 数据报服务 Systems Management Server 2.0 138 UDP NetBIOS 数据报服务 许可证记录服务 139 TCP NetBIOS 会话服务 计算机浏览器 139 TCP NetBIOS 会话服务 传真服务 139 TCP NetBIOS 会话服务 性能日志和警报 139 TCP NetBIOS 会话服务 后台打印程序 139 TCP NetBIOS 会话服务 服务器 139 TCP NetBIOS 会话服务 Net Logon 139 TCP NetBIOS 会话服务 远程过程调用定位器 139 TCP NetBIOS 会话服务 分布式文件系统 139 TCP NetBIOS 会话服务 Systems Management Server 2.0 139 TCP NetBIOS 会话服务 许可证记录服务 143 TCP IMAP Exchange Server 161 UDP SNMP SNMP 服务 162 UDP SNMP 陷阱出站 SNMP 陷阱服务 389 TCP LDAP 服务器 本地安全机构 389 UDP LDAP 服务器 本地安全机构 389 TCP LDAP 服务器 分布式文件系统 389 UDP LDAP 服务器 分布式文件系统 443 TCP HTTPS HTTP SSL 443 TCP HTTPS 万维网发布服务 443 TCP HTTPS SharePoint Portal Server 445 TCP SMB 传真服务 445 UDP SMB 传真服务 445 TCP SMB 后台打印程序 445 UDP SMB 后台打印程序 445 TCP SMB 服务器 445 UDP SMB 服务器 445 TCP SMB 远程过程调用定位器 445 UDP SMB 远程过程调用定位器 445 TCP SMB 分布式文件系统 445 UDP SMB 分布式文件系统 445 TCP SMB 许可证记录服务 445 UDP SMB 许可证记录服务 500 UDP IPSec ISAKMP IPSec 服务 515 TCP LPD TCP/IP 打印服务器 548 TCP Macintosh 文件服务器 Macintosh 文件服务器 554 TCP RTSP Windows 媒体服务 563 TCP NNTP over SSL 网络新闻传输协议 593 TCP RPC over HTTP 远程过程调用 593 TCP RPC over HTTP Exchange Server 636 TCP LDAP SSL 本地安全机构 636 UDP LDAP SSL 本地安全机构 993 TCP IMAP over SSL Exchange Server 995 TCP POP3 over SSL Exchange Server 1270 TCP MOM-Encrypted Microsoft Operations Manager 2000 1433 TCP SQL over TCP Microsoft SQL Server 1433 TCP SQL over TCP MSSQL$UDDI 1434 UDP SQL Probe Microsoft SQL Server 1434 UDP SQL Probe MSSQL$UDDI 1645 UDP 旧式 RADIUS Internet 身份验证服务 1646 UDP 旧式 RADIUS Internet 身份验证服务 1701 UDP L2TP 路由和远程访问 1723 TCP PPTP 路由和远程访问 1755 TCP MMS Windows 媒体服务 1755 UDP MMS Windows 媒体服务 1801 TCP MSMQ 消息队列 1801 UDP MSMQ 消息队列 1812 UDP RADIUS 身份验证 Internet 身份验证服务 1813 UDP RADIUS 计帐 Internet 身份验证服务 1900 UDP SSDP SSDP 发现服务 2101 TCP MSMQ-DC 消息队列 2103 TCP MSMQ-RPC 消息队列 2105 TCP MSMQ-RPC 消息队列 2107 TCP MSMQ-Mgmt 消息队列 2393 TCP OLAP Services 7.0 SQL Server:下层 OLAP 客户端支持 2394 TCP OLAP Services 7.0 SQL Server:下层 OLAP 客户端支持 2460 UDP MS Theater Windows 媒体服务 2535 UDP MADCAP DHCP 服务器 2701 TCP SMS 远程控制(控件) SMS 远程控制代理 2701 UDP SMS 远程控制(控件) SMS 远程控制代理 2702 TCP SMS 远程控制(数据) SMS 远程控制代理 2702 UDP SMS 远程控制(数据) SMS 远程控制代理 2703 TCP SMS 远程聊天 SMS 远程控制代理 2703 UPD SMS 远程聊天 SMS 远程控制代理 2704 TCP SMS 远程文件传输 SMS 远程控制代理 2704 UDP SMS 远程文件传输 SMS 远程控制代理 2725 TCP SQL 分析服务 SQL 分析服务器 2869 TCP UPNP 通用即插即用设备主机 2869 TCP SSDP 事件通知 SSDP 发现服务 3268 TCP 全局编录服务器 本地安全机构 3269 TCP 全局编录服务器 本地安全机构 3343 UDP 集群服务 集群服务 3389 TCP 终端服务 NetMeeting 远程桌面共享 3389 TCP 终端服务 终端服务 3527 UDP MSMQ-Ping 消息队列 4011 UDP BINL 远程安装 4500 UDP NAT-T 路由和远程访问 5000 TCP SSDP 旧事件通知 SSDP 发现服务 5004 UDP RTP Windows 媒体服务 5005 UDP RTCP Windows 媒体服务 42424 TCP ASP.Net 会话状态 ASP.NET 状态服务 51515 TCP MOM-Clear Microsoft Operations Manager 2000

- 作者: linxh 2005年09月17日, 星期六 01:11  回复(0) |  引用(0) 加入博采

Win32ASM经验点滴

- 如何隐藏/显示任务栏?

shell db "Shell_TrayWnd",0 ; 任务栏的类名
invoke FindWindow,addr shell,NULL ; 先获得句柄,之后隐藏.
.if eax != 0
invoke ShowWindow,eax,SW_HIDE ;
SW_SHOW显示
.endif

 


- 如何禁止/允许/显示/隐藏开始按钮?

.data?
buffer db 127 dup(?)

.data
shell db "Shell_TrayWnd",0
sbar db "BUTTON",0
child dd ?
slen dd ?

.code

invoke FindWindow,addr shell,NULL ; 获得状态栏句柄
mov tray, eax
invoke GetWindow,tray, GW_CHILD ;
获得状态栏的子窗口(如果有的话)
mov child, eax
.if child != 0
invoke GetClassName,child,offset buffer, sizeof buffer ;
获得子窗口类名
.if eax > 0
invoke lstrlen, offset buffer ;
获得类名长度
mov slen,eax
invoke CharUpperBuff,offset buffer,slen ;
转为大写
invoke lstrcmp,addr buffer, addr sbar ;将类名与'BUTTON'比较
.if eax == 0
invoke ShowWindow,child,SW_HIDE ;
隐藏开始按钮
; invoke ShowWindow,child,SW_SHOW ; 显示开始按钮
; invoke EnableWindow,child,FALSE ; 禁止开始按钮
; invoke EnableWindow,child,TRUE ; 允许开始按钮
.endif
.endif
.endif

 


- 如何创建一个真正的"总在最上面"窗口?

invoke SetWindowPos,hWin, HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE

 


- 如何创建热键?比如CTRL + ALT + A

.data
hmsg db "HotKey CTRL + ALT + A Works good!",0
hcap db "Hotkey Example",0

.code
.if uMsg == WM_CREATE
invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL + ALT + A (041h is 65 - 065h is 101)

.elseif uMsg == WM_HOTKEY
invoke MessageBox,hWin,addr hmsg,addr hcap, MB_OK or MB_ICONINFORMATION

.elseif uMsg == WM_DESTROY
invoke UnregisterHotKey,hWin,065h
invoke PostQuitMessage,NULL
return 0
.endif

 


-如何获得Windows目录和系统目录

.data
buffer db 50 dup(?)
hCap db "WindowsDirectory",0

.code
invoke GetWindowsDirectory, addr buffer, sizeof buffer ;
Windows目录于缓冲区中
; invoke GetSystemDirectory, addr buffer, sizeof buffer ;置系统目录于缓冲区中
invoke MessageBox,hWnd, addr buffer, addr hCap, MB_OK or MB_ICONINFORMATION

 


- 如何从我的程序打开开始菜单?

invoke SendMessage,hWnd,WM_SYSCOMMAND,SC_TASKLIST,NULL

 


- 如何关闭正被激活的程序 ?

.data
fwin dd ?

.code
invoke GetForegroundWindow
mov fwin,eax
invoke SendMessage, fwin, WM_CLOSE,NULL

 


- 如何去掉窗口标题 ?

invoke GetWindowLong,hWnd,GWL_STYLE ; 获得当前窗口类
and eax,not WS_CAPTION ; 去掉WS_CAPTION
invoke SetWindowLong,hWnd,GWL_STYLE,eax ;
设置窗口类

 


- 如何知道窗口是否在任务栏中(或可见)?

invoke IsWindowVisible,hWin
.if eax == TRUE
;
窗口可见
.else
;
窗口不可见
.endif

 


- 如何隐藏一个窗口?

.data
mirc db "mIRC32",0
mhand dd ?

.code
invoke FindWindow,addr mirc, NULL ;
寻找mIRC32
mov mhand,eax
.if mhand != 0 ;
找到?
invoke ShowWindow,mhand,SW_SHOW ;
显示窗口
; invoke ShowWindow,mhand,SW_HIDE ; 隐藏窗口
.else
; mIRC32
未运行...
.endif

 


- 如何将窗口置于前台?

invoke SetForegroundWindow, mhand

 


- 如何屏蔽CTRL+ALT+DEL,ALT+TAB+CTRL+ESC这些键?

invoke SystemParametersInfo,SPI_SCREENSAVERRUNNING,1,NULL,NULL
; Windows98 only 1
关闭 0 允许

 


- 如何确定Windows任务栏的自动隐藏特性是否被激活?

.data
AppBar APPBARDATA {} ; {}
指使用默认值... Thanks to TTom

.code
mov AppBar.cbSize, sizeof AppBar
invoke SHAppBarMessage, ABM_GETSTATE, addr AppBar ; ShellApi
命令
and eax, ABS_AUTOHIDE
.if eax == TRUE
;
任务栏被隐藏
.else
;
任务栏未被隐藏
.endif

 


- 如何使用默认的浏览器或邮件程序?

.data
lpPage db "http://win32asm.cjb.net",0
lpMail db "ates@anet.net.tr",0
lpOperation db "open",0

.code
invoke ShellExecute,hWin,addr lpOperation, addr lpPage, NULL, NULL, SW_SHOWNORMAL
invoke ShellExecute,hWin,addr lpOperation, addr lpMail, NULL, NULL, SW_SHOWNORMAL

 


- 如何用Win32 API显示网络连接对话框?

include MASM32INCLUDEmpr.inc
includelib MASM32LIBmpr.lib
invoke WNetConnectionDialog,hWnd,RESOURCETYPE_DISK

 

- 作者: linxh 2005年09月17日, 星期六 01:05  回复(0) |  引用(0) 加入博采

Win32asm 初学者常见问答集
 

win32asm 是什么?

win32asm

是描述使用汇编语言进行 32Windows 编程的一个术语, 它本身并不是一种语言. win32asm里你可以使用各种不同的汇编编译器.


在开始

win32asm 编程前需要做哪些准备?

至少

, 你需要32Windows :) 可以是Windows 95/98/NT/2000. 就我的个人意见, 最好的编程平台是Windows NT/2000, 因为它更稳定, 此外, 一些有着在Windows 95/98中会被忽略的小错误的程序运行在Windows NT/2000下将立即得到错误通知.

你必须要有一些汇编语言的基本知识

现在需要结合你的汇编语言的

. 如果你是一个完全的汇编语言新手, 你可以在网上寻找一些教材和指南. 完整的汇编书籍站点是 Randal Hyde's The Art of Assembly Language Programming. 注意这本书是关于16DOS汇编的. 当然, 无论在OS/Windows 还是 Linux, 基本的汇编命令是相同的. 我已经网上找到一些教授32位汇编语言的地方. 下一步是学习更多的关于一般Windows 编程的知识. 关于这方面, 可以找到的最好的书是Charles Petzold Programming Windows 95. 这本书不是在线读物,你可以从本地的书店里购买。你将发现这本书的价值远远高于他的价格。Windows编程两方面的知识以使得工作更加容易。我写了一些关于这个主题的指南,你可以在下面的网站找到: http://win32asm.cjb.net.

需要的工具是

    概略的讲

    , 如果你想使用 MASM, 下载 MASM32 package 然后阅读 my win32asm tutorials. 我高度建议你使用 MASM: 99% win32asm 程序员使用 MASM 所以你可以更容易的获得许多支持.


    哪里可以获得关于

    win32asm 编程的帮助?

    你可以在

    win32asm webboard 贴出你的问题,如果你喜欢更直接的方式,试试 IRC. 我可以连接到 EFNET, channel #win32asm. 或者如果 EFNET 上不去, 试试Undernet, channel #win32asm. 你也可以发email给我我的email地址是 Iczelion@galaxycorp.com. 我将尽量给你最好的回复但我不对我的回复做任何形式的担保.
    :
  • 编译
  • 文本编辑
  • 资源编辑器(
  • Win32 API
  • 调试器(
  • /连接器(Assembler/Linker. 你可以使用好几个编译器. 我更喜欢微软宏汇编 (MASM). 你可以从以下站点免费下载 http://masm32.cjb.net. 它包含在叫做 MASM32 的包中. 你也可以使用 Borland/InPrise Turbo Assembler (TASM) NetWide Assembler (NASM). TASM 未作为一个单独的产品升级. 最后的版本是5.0r. 此外, 它不是免费的. NASM 是一个自由软件汇编器. 可是,就我所知,它的定位并不在 win32asm. 它更多的用在Linux. 你可以从以下站点下载最新版本的 NASM its main page. 还有一个新的自由软件汇编器叫 SpAsm ,也可以使用. 它包含一个IDE和内置的调试器(debugger. /综合编程环境(Text Editor/IDE. 你可以使用任何文本编辑器. 我一般用 UltraEdit. 有的人更喜欢 WinEdit. Justin Decker 编的 VisualASM 是一个MASMIDE. TASM 用户来说, 可能会发现 TASM IDE 更让你喜欢. Resource editor. 如果你需要设计对话框,菜单,图标,光标等,就需要一个好的资源编辑器。 有几个资源编辑器可以选择. 比如, Borland Resource Workshop (BRW), Symantec Resource Editor. 我更喜欢整合到 Visual C++ IDE 中的那个资源编辑器. 参考. 在你编程过程中需要频繁的查找这个参考. 你可以从这个站点下载免费版本:Borland/InPrise site. 然而, 这个版本比较过时. 在里面找不到最新技术的信息. Microsoft Developer Network有很多关于这个参考的升级更新信息,如果你能买到MSDNCD那是最好的了,它将使得你的知识库里拥有许多很棒的资源。 Debugger. 相信我, 你需要一个调试器来找出你程序中的bug. 可以买到的最好的软件调试器是 SoftICE. 还有一个 Netwalker 的免费调试器,可以从这里下载: my site

    - 作者: linxh 2005年09月17日, 星期六 01:04  回复(0) |  引用(0) 加入博采

    PGP 简介
    本文主要简介PGP的历史,PGP的工作流程,以及PGP用到的加密、解密算法,最后简要介绍PGP的密钥管理机制。

    PGP(Pretty Good Privacy),是一个基于RSA公匙加密体系的邮件加密软件。可以用它对邮件保密以防止非授权者阅读,它还能对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。它可以可以提供一种安全的通讯方式,而事先并不需要任何保密的渠道用来传递密匙。它采用了一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计。它的功能强大,有很快的速度。而且它的源代码是免费的。

    实际上PGP的功能还包括: PGP可以用来加密文件,还可以用PGP代替UUencode 生成RADIX 64 格式(就是MIME 的 BASE 64格式)的编码文件。

    PGP 的创始人是美国的 Phil Zimmermann。他的创造性在于他把RSA公匙体系的方便和传统加密体系的高速度结合起来,并且在数字签名和密匙认证管理机制上有巧妙的设计。因此PGP成为几乎最流行的公匙加密软件包。

    1.首先简要介绍PGP加密系统的流程。

    PGP加密系统是采用公开密钥加密与传统密钥加密相结合的一种加密技术。它使用一对数学上相关的钥匙,其中一个(公钥)用来加密信息,另一个(私钥)用来解密信息。

    PGP采用的传统加密技术部分所使用的密钥称为“会话密钥”(sek)。每次使用时,PGP都随机产生一个128位的IDEA会话密钥,用来加密报文。公开密钥加密技术中的公钥和私钥则用来加密会话密钥,并通过它间接地保护报文内容。

    PGP中的每个公钥和私钥都伴随着一个密钥证书。它一般包含以下内容:

    • 密钥内容(用长达百位的大数字表示的密钥)
    • 密钥类型(表示该密钥为公钥还是私钥)
    • 密钥长度(密钥的长度,以二进制位表示)
    • 密钥编号(用以唯一标识该密钥)
    • 创建时间
    • 用户标识 (密钥创建人的信息,如姓名、电子邮件等)
    • 密钥指纹(为128位的数字,是密钥内容的提要表示密钥唯一的特征)
    • 中介人签名(中介人的数字签名,声明该密钥及其所有者的真实性,包括中介人的密钥编号和标识信息)

    PGP把公钥和私钥存放在密钥环(KEYR)文件中。PGP提供有效的算法查找用户需要的密钥。

    PGP在多处需要用到口令,它主要起到保护私钥的作用。由于私钥太长且无规律,所以难以记忆。PGP把它用口令加密后存入密钥环,这样用户可以用易记的口令间接使用私钥。

    PGP的每个私钥都由一个相应的口令加密。PGP主要在3处需要用户输入口令:

    1. 需要解开受到的加密信息时,PGP需要用户输入口令,取出私钥解密信息
    2. 当用户需要为文件或信息签字时,用户输入口令,取出私钥加密
    3. 对磁盘上的文件进行传统加密时,需要用户输入口令

    2.以上介绍了PGP的工作流程,下面将简介与PGP相关的加密、解密方法以及PGP的密钥管理机制。

    PGP是一种供大众使用的加密软件。电子邮件通过开放的网络传输,网络上的其他人都可以监听或者截取邮件,来获得邮件的内容,因而邮件的安全问题就比较突出了。保护信息不被第三者获得,这就需要加密技术。还有一个问题就是信息认证,如何让收信人确信邮件没有被第三者篡改,这就需要数字签名技术。RSA公匙体系的特点使它非常适合用来满足上述两个要求:保密性(Privacy)和认证性(Authentication)。

    RSA(Rivest-Shamir-Adleman)算法是一种基于大数不可能质因数分解假设的公匙体系。简单地说就是找两个很大的质数,一个公开即公钥,另一个不告诉任何人,即私钥。这两个密匙是互补的,就是说用公匙加密的密文可以用私匙解密,反过来也一样。

    假设甲要寄信给乙,他们互相知道对方的公匙。甲就用乙的公匙加密邮件寄出,乙收到后就可以用自己的私匙解密出甲的原文。由于没别人知道乙的私匙,所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。另一方面由于每个人都知道乙的公匙,他们都可以给乙发信,那么乙就无法确信是不是甲的来信。这时候就需要用数字签名来认证。

    在说明数字签名前先要解释一下什么是“邮件文摘”(message digest)。邮件文摘就是对一封邮件用某种算法算出一个最能体现这封邮件特征的数来,一旦邮件有任何改变这个数都会变化,那么这个数加上作者的名字(实际上在作者的密匙里)还有日期等等,就可以作为一个签名了。PGP是用一个128位的二进制数作为“邮件文摘”的,用来产生它的算法叫MD5(message digest 5)。 MD5是一种单向散列算法,它不像CRC校验码,很难找到一份替代的邮件与原件具有同样的MD5特征值。

    回到数字签名上来,甲用自己的私匙将上述的128位的特征值加密,附加在邮件后,再用乙的公匙将整个邮件加密。这样这份密文被乙收到以后,乙用自己的私匙将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个128位的特征值来和用甲的公匙解密签名所得到的数比较,如果符合就说明这份邮件确实是甲寄来的。这样两个安全性要求都得到了满足。

    PGP还可以只签名而不加密,这适用于公开发表声明时,声明人为了证实自己的身份,可以用自己的私匙签名。这样就可以让收件人能确认发信人的身份,也可以防止发信人抵赖自己的声明。这一点在商业领域有很大的应用前途,它可以防止发信人抵赖和信件被途中篡改。

    PGP用的实际上是RSA和传统加密的杂合算法。因为RSA算法计算量极大在速度上不适合加密大量数据,PGP实际上用来加密的不是RSA本身,而是采用了一种叫IDEA的传统加密算法。传统加密,一般说来说就是用一个密匙加密明文,然后用同样的密匙解密。这种方法的代表是DES,也就是乘法加密,它的主要缺点就是密匙的传递渠道解决不了安全性问题,不适合网络环境邮件加密需要。IDEA的加(解)密速度比RSA快得多,所以实际上PGP是以一个随机生成密匙(每次加密不同)用IDEA算法对明文加密,然后用RSA算法对该密匙加密。这样收件人同样是用RSA解密出这个随机密匙,再用IDEA解密邮件本身。这样的链式加密就做到了既有RSA体系的保密性,又有IDEA算法的快捷性。PGP利用这种链式加密,既保证了保密性,又保证了加密的速度。

    PGP最核心的功能是:文件加密、通信加密和数字签名。下面将简介一些PGP辅助功能,它们虽然不是整个加密系统的核心,但却起到了协调各部分和方便用户的作用。这儿主要介绍PGP的密钥管理机制。

    一个成熟的加密体系必然要有一个成熟的密匙管理机制配套。公匙体制的提出就是为了解决传统加密体系的密匙分配过程难以保密的缺点。如果密匙是通过网络传送,那么网络上其他人就可以通过监听得到。举个例子:Novell Netware 的老版本中,用户的密码是以明文在线路中传输的,这样监听者轻易就获得了他人的密码。当然 Netware 4.1 中数据包头的用户密码现在是加密的了。对PGP来说公匙本来就要公开,就没有防监听的问题。但公匙的发布中仍然存在安全性问题,例如公匙的被篡改(Public Key Tampering),这可能是公匙密码体系中最大的漏洞。必须有一种机制保证用户所得到的公钥是正确的,而不是别人伪造的。下面举一个例子来说明这个问题,以及如何正确地用PGP堵住这个漏洞。

    假设Mike想给Alice发封信,那他必须有Alice的公匙。该用户从BBS上下载了Alice的公匙,并用它加密了信件用BBS的Email功能发给了Alice。但是,另一个用户叫Charlie的用户潜入BBS,把他自己用Alice的名字生成的密匙对中的公匙替换了Alice的公匙,而参与通信的这两个人都不知道。那么Mike用来发信的公匙就不是Alice的而是Charlie的,一切看来都很正常。于是Charlie就可以用他手中的私匙来解密Mike给Alice的信,甚至他还可以用Alice真正的公匙来转发Mike给Alice的信,这样谁都不会起疑心,他如果想改动Mike给Alice的信也没问题。甚至他还可以伪造Alice的签名给Mike或其他人发信,因为这些用户手中的公匙是伪造的,他们会以为真是Alice的来信。

    防止这种情况出现的最好办法是避免让任何其他人有机会篡改公匙,比如直接从Alice手中得到她的公匙,然而这在很多情况下是比较困难的。PGP发展了一种公匙介绍机制来解决这个问题。举例来说:如果Mike和Alice有一个共同的朋友David,而David知道他手中的Alice的公匙是正确的(关于如何认证公匙,PGP还有一种方法,后面会谈到,这里假设David已经和Alice认证过她的公匙)。这样David可以用他自己的私匙在Alice的公匙上签名,表示他担保这个公匙属于Alice。当然Mike需要用David的公匙来校验他给出的Alice的公匙,同样David也可以向Alice认证Mike的公匙,这样David就成为Mike和Alice之间的“介绍人”。这样Alice或David就可以放心地把David签过字的Alice的公匙上载到BBS上让Mike去拿,没人可能去篡改它而不被发现,即使是BBS的管理员。这就是从公共渠道传递公匙的安全手段。

    那么怎么能安全地得到David的公匙呢,确实有可能Mike拿到的David的公匙也是假的,但这就要求这个伪造密钥的人参与这整个过程,他必须对这三个人都很熟悉,还要策划很久,这一般不可能。当然,PGP对这种可能也有预防的建议,那就是由一个大家普遍信任的人或机构担当这个角色,即所谓的“密匙侍者”或“认证权威”(认证中心),每个由他签字的公匙都被认为是真的,这样大家只要有一份他的公匙就行了,认证这个人的公匙是方便的,因为他广泛提供这个服务,假冒他的公匙是很极困难的,因为他的公匙流传广泛。这样的“权威”适合由非个人控制组织或政府机构充当,现在已经有等级认证制度的机构存在。

    对于那些非常分散的人们,PGP更赞成使用私人方式的密匙转介方式,因为这样有机的非官方途径更能反映出人们自然的社会交往,而且人们也能自由地选择信任的人来介绍。总之和不认识的人们之间的交往一样。每个公匙有至少一个“用户名”(User ID),最好再加上本人的Email地址,以免混淆。

    3.下面,再介绍如何通过电话认证密匙。

    每个密匙有它们自己的标识(keyID),keyID是一个八位十六进制数,两个密匙具有相同keyID的可能性是几十亿分之一,而且PGP还提供了一种更可靠的标识密匙的方法:“密匙指纹”(key's fingerprint)。每个密匙对应一串数字(十六个两位十六进制数),这个指纹重复的可能就更微乎其微了。而且任何人无法指定生成一个具有某个指纹的密匙,密匙是随机生成的,从指纹也无法反推出密匙来。这样当拿到某人的公匙后就可以和他在电话上核对这个指纹,从而认证他的公匙。如果无法直接和通信的另一方直接通电话,可以和公钥介绍机制中的中间介绍人通电话认证该介绍人的公匙,从而通过介绍人认证了通信另一方的公匙,这就是直接认证和间接介绍的结合。

    这样又引出一种方法,就是把具有不同人签名的自己的公匙收集在一起,发送到公共场合,这样可以希望大部分人至少认识其中一个人,从而间接认证了你的公匙。同样你签了朋友的公匙后应该寄回给他,这样就可以让他可以通过你被你的其他朋友所认证。和现实社会中人们的交往一样。PGP会自动为你找出你拿到的公匙中有哪些是你的朋友介绍来的,那些是你朋友的朋友介绍来的,哪些则是朋友的朋友的朋友介绍的……它会帮你把它们分为不同的信任级别,让你参考决定对它们的信任程度。你可以指定某人有几层转介公匙的能力,这种能力是随着认证的传递而递减的。

    转介认证机制具有传递性,这是个有趣的问题。PGP的作者Phil Zimmermann说过一句话:“ 信赖不具有传递性;我有个我相信决不撒谎的朋友。可是他是个认定总统决不撒谎的傻瓜,可很显然我并不认为总统决不撒谎。”

    上面所说的是关于公匙的安全性问题,这是PGP安全的核心。另外,和传统单密匙体系一样,私匙的保密也是决定性的。相对公匙而言,私匙不存在被篡改的问题,但存在泄露的问题。RSA的私匙是很长的一个数字,用户不可能将它记住,PGP的办法是让用户为随机生成的RSA私匙指定一个口令(pass phase)。只有通过给出口令才能将私匙释放出来使用,用口令加密私匙的方法保密程度和PGP本身是一样的。所以私匙的安全性问题实际上首先是对用户口令的保密。当然私匙文件本身失密也很危险,因为破译者所需要的只是用穷举法(强力攻击)试探出口令了,虽说很困难但毕竟是损失了一层安全性。需要说明的是:最好不要把私钥写在纸上或者某一文件里,因为这样很容易被别人得到在这里。

    PGP在安全性问题上的审慎考虑体现在PGP的各个环节。比如每次加密的实际密匙是个随机数,大家都知道计算机是无法产生真正的随机数的。PGP程序对随机数的产生是很审慎的,关键的随机数像RSA密匙的产生是从用户敲键盘的时间间隔上取得随机数种子的。对于磁盘上的 randseed.bin 文件是采用和邮件同样强度的加密的。这有效地防止了他人从randseed.bin文件中分析出加密实际密匙的规律来。

    4.最后提一下PGP的加密前预压缩处理,PGP内核使用PKZIP算法来压缩加密前的明文。

    一方面对电子邮件而言,压缩后加密再经过7bits编码密文有可能比明文更短,这就节省了网络传输的时间。另一方面,明文经过压缩,实际上相当于经过一次变换,信息更加杂乱无章,对明文攻击的抵御能力更强。PKZIP算法是一个公认的压缩率和压缩速度都相当好的压缩算法。在PGP中使用的是PKZIP 2.0版本兼容的算法。

    5.参考书目:

    Philip Zimmermann : “PGP User’s Guide Volume I : Essential Topics”
    NAI
    microsoft

    - 作者: linxh 2005年09月17日, 星期六 01:00  回复(0) |  引用(0) 加入博采

    Windows下DLL编程技术及应用

    摘 要: 本文介绍了DLL技术在Windows编程中的基本运用方法及应用,给出了直接内存
    访问及端口I/O的两个实用DLL的全部源代码。
    关键词: DLL Windows编程 内存访问 I/O

    一 、引 言
    由于Windows为微机提供了前所未有的标准用户界面、图形处理能力和简单灵便的操作,绝大多数程序编制人员都已转向或正在转向Windows编程。在许多用户设计的实际应用系统的编程任务中,常常要实现软件对硬件资源和内存资源的访问,例如端口I/O、DMA、中断、直接内存访问等等 。若是编制DOS程序,这是轻而易举的事情,但要是编制Windows程序,尤其是WindowsNT环境下的程序,就会显得较困难。
    因为Windows具有"与设备无关"的特性,不提倡与机器底层的东西打交道,如果直接用Windows的 API函数或I/O读写指令进行访问和操作,程序运行时往往就会产生保护模式错误甚至死机,更严重的情况会导致系统崩溃。那么在Windows下怎样方便地解决上述问题呢?用DLL(Dynamic Link Libraries)技术就是良好途径之一。
    DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来实现的,因此掌握它、应用它是非常重要的。其实Windows本身就是由许多的DLL组成的,它最基本的三大组成模块Kernel、GDI和User 都是DLL,它所有的库模块也都设计成DLL。凡是以.DLL、.DRV、.FON、.SYS和许多以.EXE为扩展名的系统文件都是DLL,要是打开Windows\System目录,就可以看到许多的DLL模块。尽管DLL在Ring3优先级下运行,仍是实现硬件接口的简便途径。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式,减少了编程设计上的不便;同时,一个DLL在内存中只有一个实例,使之能高效经济地使用内存;DLL实现的代码封装性,使得程序简洁明晰;此外还有一个最大的特点,即DLL的编制与具体的编程语言及编译器无关,只要遵守DLL的开发规范和编程策略,并安排正确的调用接口,不管用何种编程语言编制的DLL都具有通用性。例如在BC31中编制的DLL程序,可用于BC、VC、VB、Delphi等多种语言环境中。笔者在BC31环境下编译了Windows下直接内存访问和端口I/O两个DLL,用在多个自制系统的应用软件中,
    运行良好。

    二、DLL的建立和调用
    DLL的建立及调用方法在许多资料上有详细的介绍,为了节省篇幅,在这里仅作一些
    主要的概括。
    1.DLL的建立
    关于DLL的建立,有如下几个方面的要素是不可缺少和必须掌握的:
    ?. 入口函数LibMain( )
    就象C程序中的WinMain( )一样,Windows每次加载DLL时都要执行LibMain( )函数,主要用来进行一些初始化工作。通常的形式是:



    int FAR PASCAL LibMain(HINSTANCE hInstance,WORD wDataSeg,WORD
    wHeapSize,LPSTR lpszCmdLine)
    {
    if(wHeapSize!=0) //使局部堆、数据段可移动
    UnlockData(0); //解锁数据段
    /*此处可进行一些用户必要的初始化工作*/
    return 1; //初始化成功
    }
    ?出口函数WEP( )
    Windows从内存中卸载DLL时,调用相应的出口函数WEP( ),主要做一些清理工作,如释放占用的内存资源;丢弃某些字串、位图等资源;关闭打开的文件等等。
    ?自定义的输出函数
    为了让位于不同内存段的应用程序进行远程调用,自定义的输出函数必须定义为远程函数(使用FAR关键字),以防使用近程指针而得到意外的结果;同时,加上PASCAL关键字可加快程序的运行速度,使代码简单高效,提高程序的运行速度。
    ?输出函数的引出方法
    ? 在DLL的模块定义文件中(.DEF)由EXPORTS语句对输出函数逐一列出。例如:
    EXPORTS WEP @1 residentname //residentname可提高DLL效率和处理速度
    PortIn @2
    PortOut @3 //通常对所有输出函数附加系列号
    ? 在每个输出函数定义的说明中使用_export关键字来对其引出。
    以上两种方法任选其中的一种即可,不可重复。后面的两个实例分别使用了上述两种不同的引出方式,请留意。

    2.DLL的调用
    加载DLL时,Windows寻找相应DLL的次序如下:
    ?.当前工作盘。
    ?Windows目录;GetWindowsDirectory( )函数可提供该目录的路径名。
    ?Windows系统目录,即System子目录;调用GetSystemDiretory( )函数可获得这个目录的路径名。
    ?DOS的PATH命令中罗列的所有目录。
    ?网络中映象的目录列表中的全部目录。

    DLL模块中输出函数的调用方法:
    不论使用何种语言对编译好的DLL进行调用时,基本上都有两种调用方式,即静态调用方式和动态调用方式。静态调用方式由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(如还有其它程序使用该DLL,则Windows对DLL的应用记录减1,直到所有相关程序都结束对该DLL的使用时才释放它),简单实用,但不够灵活,只能满足一般要求。动态调用方式是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。具体来说,可用如下的方法调用:
    ?.在应用程序模块定义文件中,用IMPORTS语句列出所要调用DLL的函数名。如:
    IMPORTS MEMORYDLL.MemoryRead
    MEMORYDLL.MemoryWrite
    ?让应用程序运行时与DLL模块动态链接



    先用LoadLibrary加载DLL,再用GetProcAddress函数检取其输出函数的地址,获得其指针来调用。如:
    HANDLE hLibrary;
    FARPROC lpFunc;
    int PortValue;
    M
    hLibrary=LoadLibrary("PORTDLL.DLL"); //加载DLL
    if(hLibrary>31) //加载成功
    {
    lpFunc=GetProcAddress(hLibrary,"PortIn"); //检取PortIn函数地址
    if(lpFunc!=(FARPROC)NULL) //检取成功则调用
    PortValue=(*lpFunc)(port); //读port端口的值
    FreeLibrary(hLibrary); //释放占用的内存
    }
    M

    三、DLL应用实例源程序
    1.直接内存访问的DLL源代码
    //.DEF文件
    LIBRARY MEMORYDLL
    DESCRIPTION 'DLL FOR MEMORY_READ_WRITE '
    EXETYPE WINDOWS
    CODE PRELOAD MOVEABLE DISCARDABLE
    DATA PRELOAD MOVEABLE SINGLE
    HEAPSIZE 1024 //DLL无自己的堆栈,故没有STACKSIZE语句
    EXPORTS WEP @1 residentname
    ReadMemory @2
    WriteMemory @3

    //.CPP文件
    #include <windows.h>

    int FAR PASCAL LibMain(HINSTANCE hInstance,WORD wDataSeg,WORD
    wHeapSize,LPSTR lpszCmdLine)
    {
    if(wHeapSize!=0)
    UnlockData(0);
    return 1;
    }

    int FAR PASCAL MemoryRead(unsigned int DosSeg,unsigned int DosOffset)
    {
    WORD wDataSelector,wSelector;
    char far *pData;
    char value;
    wDataSelector=HIWORD((DWORD)(WORD FAR *)&wDataSelector);
    wSelector=AllocSelector(wDataSelector); //分配选择器
    SetSelectorLimit(wSelector,0x2000); //置存取界限
    SetSelectorBase(wSelector,(((DWORD)DosSeg)<<4)+(DWORD)DosOffset); //置基地址
    pData=(char far *)((DWORD)wSelector<<16);
    value=*pData;
    FreeSelector(wSelector); //释放选择器
    return (value);
    }



    void FAR PASCAL MemoryWrite(unsigned int DosSeg,unsigned int DosOffset,char Data)
    {
    WORD wDataSelector,wSelector;
    char far *pData;
    wDataSelector=HIWORD((DWORD)(WORD FAR *)&wDataSelector);
    wSelector=AllocSelector(wDataSelector);
    SetSelectorLimit(wSelector,0x2000);
    SetSelectorBase(wSelector,(((DWORD)DosSeg)<<4)+(DWORD)DosOffset);
    pData=(char far *)((DWORD)wSelector<<16);
    *pData=Data;
    FreeSelector(wSelector);
    }

    int FAR PASCAL WEP(int nParam)
    {
    return 1;
    }

    2.端口读写I/O的DLL源代码
    //.DEF文件
    LIBRARY PORTDLL
    DESCRIPTION 'DLL FOR PORT_IN_OUT '
    EXETYPE WINDOWS
    CODE PRELOAD MOVEABLE DISCARDABLE
    DATA PRELOAD MOVEABLE SINGLE
    HEAPSIZE 1024

    //.CPP文件
    #include <windows.h>
    #include <dos.h>

    int FAR PASCAL LibMain(HINSTANCE hInstance,WORD wDataSeg,WORD
    wHeapSize,LPSTR lpszCmdLine)
    {
    if(wHeapSize!=0)
    UnlockData(0);
    return 1;
    }

    int FAR PASCAL _export PortOut(int port,unsigned char value)
    {
    outp(port,value);
    return 1;
    }

    int FAR PASCAL _export PortIn(int port)
    {
    int result;
    result=inp(port);
    return (result);
    }

    int FAR PASCAL _export WEP(int nParam)
    {
    return 1;
    }


    分别将上面两个实例的.DEF文件和.CPP文件各自组成一个.PRJ文件,并进行编译链接成.EXE或.DLL文件就可以在应用程序中对其进行调用。

    四、结 束 语
    在上面,我们利用DLL技术方便地实现了Windows环境下对内存的直接访问和端口I/O的访问,仿效这两个例子,还可以编制出更多的适合自己应用系统所需的DLL,如用于数据采集卡的端口操作及扩展内存区访问、视频区缓冲区及BIOS数据区操作等许多实际应用的编程任务中。必要时只需直接更新DLL,而用不着对应用程序本身作任何改动就可以对应用程序的功能和用户接口作较大的改善,实现版本升级。因此,掌握好DLL技术对Windows程序开发者很有裨益。

    - 作者: linxh 2005年09月17日, 星期六 00:54  回复(2) |  引用(0) 加入博采