2006年3月31日星期五

微软卫星地图

  微软终于也耐不住寂寞,推出了Beta版的微软卫星地图(Windows Live Local),用以对抗日益强大的Google卫星地图

  这是微软在本地搜索与地图服务方面对Google的一次反击。去年年初,Google推出了自己的卫星地图服务,在业界可算风头出尽,并且引起了世界各国军方和政府的关注。

  微软于是也不甘落后,推出了新版的Windows Live Local微软地图),其实也是基於地理资讯服务的一个地图查询系统。新版的微软地图美化了界面,显得比以前漂亮了不少,另外,地图界面也显得更加详实,清晰。

  值得注意的是,微软的这个地图不仅仅是卫星图片,还增加了鸟瞰的功能,图片数据据说来源于高清晰航拍照片,这样微软地球就能够提供比Google Earth更高解析度和更高品质的图像。用户可以把图像放的更大,可以旋转视图从东西南北4各不同方向观看地貌。这些航空照片品质非常高,解析度已经小於0.1米,视角高度距地面最小近约23米(25yds),也就如同站在20多米的楼顶看地面的效果,立体感的效果是卫星照片无法比拟的。

自由女神像鸟瞰图,清晰地令人震惊

纽约曼哈顿岛的一角,汽车和行人都依稀可见

  然而,这些鸟瞰图片是不连贯的,仅仅也覆盖了美国主要的地址,没有中国的鸟瞰图(估计中国政府也不会让微软去拍),中国的卫星图片的解析度也很低,不如Google的卫星图片,可以说,对于中国用户来说用处还是不大的。

  这种鸟瞰图的成本一定很高,微软为了和Google竞争也是花了血本了。希望微软也推出类似Google Earth的客户端软件,那样用起鸟瞰功能可能会感觉好一些,速度应该也会快一些。

  微软地图的地址是:http://local.live.com

2006年3月30日星期四

计算机病毒的通用清除技术

  这篇文章是我十年前写的第二篇在杂志上发表的文章。发表在微电脑世界1997年的第三期上。

  那个年代我对计算机病毒也非常感兴趣。在九二年我刚上大学时候,对计算机病毒其实一点概念也没有,只是感觉计算机病毒是很神秘很高深的东西。对于病毒程序能够在不同电脑之间传播,那时感觉很不可思议。

  那的确是个很古老的时代,我们用的操作系统是DOS 3.31,学的是TRUE BASIC,电脑是33M主频的PC/AT,286是当时最先进的机器。那时候的电脑病毒也很有意思,比如小球病毒,就是一个活蹦乱跳的小圆点,不停地运动,当碰到屏幕边沿就立刻反弹。雨点病毒则是一些下落的雨点或字符。64/Bloody病毒则是在屏幕上显示血红的Bloody文字。

  计算机系的大学老师们对病毒其实也很感兴趣,记得一个老师曾经指着小球病毒的汇编代码跟我们说:整个中国会编这个病毒的人不超过10个。

  最开始的病毒破坏力都很小,在现在看来,甚至有些可爱。我估计都是一些高手在编写病毒,写病毒的目的大概是为了炫耀自己的编程能力。DOS病毒几乎全是用汇编写的代码,汇编语言其实和二进制机器语言差不多,用那个东西写程序可真是一场噩梦啊,我曾经写过一个八百多行的汇编程序,写的我头晕脑涨,我知道,用汇编来写一个病毒的确不是一件容易的事情,特别是一些病毒甚至还有自身加密、变种的功能,因此,那些人也的确值得炫耀一下的。不过现在,汇编语言我都快忘光了,原因很简单,用机器代码写程序的可维护性很差,自然用的人也肯定会越来越少。

  大学毕业后的几年,我逐渐对这些失去了兴趣,主要因为一些计算机业的害群之马影响了我的心情,CIH病毒开了一个恶劣的开头,对电脑用户的资料信息甚至硬件进行恶性破坏,而后的病毒似乎在比谁更不要脸,现在互联网的普及,以及一些脚本语言的流行,编写木马病毒门槛非常低了,菜鸟都可以写木马病毒了,而现在的木马病毒清一色全是恶性病毒,不是偷密码、弹广告就是改IE,甚至还出了HAO123这样依靠木马病毒发家的“成功案例”,但这些病毒的编写目的都令我感到恶心,对于那些低劣的病毒编写者,我只觉得他们可怜,让他们继续为了他们那低劣的理想和愿望而编写病毒吧,我还有更重要的事情要做呢。

  下面是我写的论文,其目前已经没有实际意义,因为外部环境发生了巨大变化,我写那篇论文的前提是“计算机病毒大部分不是恶性病毒”的基础上,甚至执行病毒代码来还原恢复原始程序,现在的环境下这已经不可能了,现在是什么世道?谁敢运行病毒啊!

 

计算机病毒的通用清除技术

 

摘要   本文就当前流行的文件型病毒出发,分析介绍了从文件结构特性入手清除计算机病毒的一种技术.

关键字   病毒  传染  加载执行(EXEC)  文件前缀段(PSP)  进程

 

第一章  引言

   计算机病毒的发展历史悠久,从80年代中后期广泛传播开来.时至今日,据统计世界上已存在的计算机病毒有5000余种,并且每月以平均几十种的速度增加.计算机病毒的发展一定程度上影响了反病毒产品的发展,原有的反病毒技术在新型病毒面前显得陈旧而无能为力.病毒检测产品是以病毒的特征码为基础的针对具体病毒的判断技术,因此,病毒的变种以及未知病毒给检测软件带来较大的困难.病毒的清除是建立在病毒检测的基础上,目前病毒的清除实际上是针对已知病毒.这种被动式的方法使反病毒技术总是落后于病毒技术,虽然这类反病毒产品对病毒的抑制是不容忽视的,但它所暴露出来的漏洞却越来越多.新一代的开放式反病毒技术应运而生,这种开放式反病毒技术将病毒的结构用一个统一的数据结构加以描述,用户可以根据自身对病毒进行分析,并具有更加灵活的升级优势,对于新一代具有反跟踪,加密技术的多维变异病毒,这种方法显示出其灵活及高效的特色,这种广谱型的查毒杀毒系统将逐渐成为反病毒产品的发展趋势.

   下面,本文将介绍一种基于可执行文件结构特性的通用杀毒技术.

第二章 计算机病毒的机理

   首先,我们先了解一下计算机病毒的结构特点以及其工作原理.

   计算机病毒的结构决定了计算机病毒的特点,大致归纳如下:

   (1) 计算机病毒是一段可执行的程序

   计算机病毒和其它合法程序一样,是一种可存储可执行的非法程序,它可以直接或间接地运行,可以隐蔽在可执行程序和数据文件中而不易被人们察觉和发现.在病毒程序运行时,其与合法程序争夺系统的控制权.

   (2) 计算机病毒的广泛传染性

   由于病毒一词来源于“生物学”,传染也相应成为计算机病毒的一个重要特性.传染性是衡量一种程序是否为病毒的首要条件.计算机病毒的传染性是计算机病毒的再生机制,病毒程序一旦进入系统与系统中的程序接在一起,它就会在运行这一被传染的程序之后开始传染其它程序.这样一来,病毒就会很快地传染到整个计算机系统.

   (3) 计算机病毒的潜伏性

   计算机病毒的潜伏性是具有依附于其它媒体而寄生的能力.一个编制巧妙的计算机病毒程序,可以在几周或者几个月甚至几年内隐藏在合法文件之中,对其它系统进行传染,而不被人们发现.计算机病毒的潜伏性于传染性相辅相成,潜伏性越好,其在系统中存在的时间就会越长,病毒的传染范围也就会越大.

   (4) 计算机病毒的可触发性

   计算机病毒一般都有一个触发条件:或者触发其传染,或者在一定条件下激活计算机病毒的表现部分或破坏部分.触发实质上是一种条件控制,一个病毒程序可以按照设计者的要求,在某个点上激活并对系统发起攻击.

   (5) 计算机病毒的针对性

   现在世界上出现的计算机病毒,并不是对所有计算机系统都进行传染的.例如,有针对IBM PC及其兼容机的,有针对APPLE公司的Macintosh的以及针对Unix操作系统的.现在流行的绝大多数计算机病毒都是针对基于MS DOS系统的IBM PC及其兼容机的.

   (6) 计算机病毒的衍生性

   由于计算机病毒本身是一段计算机系统可执行的文件(程序),所以这种程序反映了设计者的一种设计思想.同时,又由于计算机病毒本身也是由几部分组成的,如安装部分,传染部分和破坏部分等,因此这些模块很容易被病毒本身或其它模仿者所修改,使之成为一种不同于原病毒的计算机病毒.[1]

   计算机病毒按链接方式可分为以下几类:

   (1)源码型病毒 (Source Code Virus) (2)入侵型病毒 (Intrusive Virus) (3)操作系统病毒 (Operating System Virus)  (4)外壳型病毒 (Shell Virus).

   (1)(2)攻击的是高级语言编写的源文件及目标文件,在微机上很少见, (3)即引导区病毒,主要攻击计算机的Boot区,其诊治方法较为简单,一般用DEBUG或NU等工具就能方便地清除.本文所提的病毒专指目前在PC在机上流行最广的攻击可执行文件的外壳型病毒.

   计算机外壳型病毒是将其自己包围在主程序的四周,对原来的程序不作修改.外壳型病毒易于编写,也较为常见,但诊治却较为麻烦.

   外壳型病毒具有以下特点:

   自身复制在目标文件外围(即文件尾部);不修改原来正常文件[2];运行时病毒抢先进入内存.病毒执行完后,转回原文件入口运行(隐蔽性).

   在基于DOS操作系统PC机上,外壳型病毒主要攻击的目标是两类可执行文件:COM文件与EXE文件.COM文件结构比较简单,解毒比较容易.而广泛流行的EXE文件相对复杂,但操作却更灵活,适合于超过64K的程序,更易与将来的操作系统兼容,因此得到广泛的使用.

第三章 COM病毒的清除

一  实现原理

   COM文件是DOS的一种二进制代码的可执行文件,COM文件结构比较简单,加载过程十分迅速.整个程序只有一个段.因此全部代码长度必须小于64K,其入口代码地址是CS:100H. DOS装入COM文件时,先在内存建立一个长度为100H的程序前缀段(PSP,由DOS建立,是DOS用户程序和命令行之间的接口),然后将整个文件装载于PSP上端,不进行重定位操作,接着将四个段地址寄存器DS(Data Segment),CS(Code Segment),SS(Stack Segment),ES(Extra Segment)初始化为程序前缀段(PSP)的段地址,最后将程序的控制权交于CS:100H处.如表1所示.

                表1:  COM文件的装入执行

地址 内容  
XXXX:0000 PSP ← CS,DS,ES,SS
XXXX:0100 程序代码 ← IP
  数据  
  堆栈 ← SP

   寄生于COM文件的病毒,大部分是采用保存文件头若干字节,并将第一条指令改为”JMP 病毒入口”,以确保病毒最先执行,也有部分病毒附加在文件首部,病毒执行完后恢复寄生程序原先的状态,并用JMP FAR等指令使程序再次回到CS:100H处,以确保寄生程序与PSP的一致.

   可见,病毒执行完后,必将会恢复并运行原文件,以便传播,当其将原文件参数全部恢复后,会将控制权交于CS:100H处.因此,判别COM文件的真正入口的标准是:最后一次在CS:100H处执行的程序段(CS=当前PSP段地址,IP=100H).

   于是,可以设想出这样一种跟踪器,每执行一条指令,便判断上述条件是否满足,如果满足,则此时CS:100H处的代码便是原文件的影像,由于COM文件只有一个段,因此此时内存的影像既是磁盘文件的内容.将CS:100H处的代码写回原文件,此病毒即被消除了,如果知道病毒的长度,还可将文件尾的无用代码去掉,这样病毒就物理上消除了.

二  实现方案

   设想的跟踪器的实现是核心问题,也是主要的难点.事实上单步陷阱中断(INT 1)完全符合跟踪器的条件,但由于目前的计算机病毒广泛采取破坏单步断点的技术,因此这种跟踪器在具体实现上还有一定难度.

   目前有一种比较方便的替代方法,即DOS的EXEC(INT 21H的功能4BH,加载执行)功能,此功能有一个有趣的现象,即执行完加载程序后,它会将所有寄存器恢复到执行前的状态,并且它不清除内存,此方法易于实现,操作简便,但对所处理的文件有一定的要求及限制.

   具体实现是,先保存中断向量表,然后在分配一块内存,调用DOS的EXEC功能执行被感染的COM文件.执行结束后,重写中断向量表以清除内存中的病毒,然后将内存偏移100H上的代码写入文件,文件长度为原文件长度,最后,在知晓病毒长度的情况下去掉文件尾的病毒代码,清除工作结束.

   这种技术可以对付任何一种文件型病毒,但对于COM文件却有一定的要求:即文件在执行过程中不可以修改代码段的内容,未被加密或压缩的文件一般均可满足此条件.

四  使用调试器DEBUG.COM的EXEC功能

   更简单的方法是用DEBUG来实现,先用L命令装入一个文件,再用G命令运行,EXEC功能结束后,返回寄存器与运行前完全一样,此时用W命令存盘,这时病毒便被清除了.(全过程只用了三条命令)

 

第四章 EXE病毒的清除

一  实现原理

   EXE文件是DOS系统最为常见且灵活的可执行文件,其应用十分广泛.但EXE文件的结构要比COM文件复杂得多.EXE文件由文件头(Header)和装入模块(Load Module)两大部分组成.文件头由格式化区(Format Area)和重定位表(Relocation Table)组成.装入模块为程序代码部分,从位移量100H字节开始.DOS系统在调用EXE文件时,先在内存块底部建立一个程序前缀段(PSP),再将装入模块读入内存指定区域(PSP上方),DS和ES初始化为PSP段地址,CS,IP,SS,SP由文件头格式化区确定,并通过重定位参数调整.然后根据重定位项修改代码数据,最后将程序的控制权由CS:IP传递给目标程序. (如表2所示)

                表2:  EXE文件的装入执行

地址 内容  
XXXX:0000 PSP ← DS,ES
XXXX:0100 数据  
  程序代码 ← CS:IP
  堆栈 ← SS:SP

   对于EXE文件而言,计算机病毒主要是附着于宿主文件的尾部,由于它必须首先获得程序的控制权,因此它必须对文件头进行修改.一般来说,只要恢复了正确的文件头,便可达到杀毒的目的.

   EXE文件被加载时,系统根据EXE文件头的CS:IP参数确定第一条执行语句,因此病毒只需将CS:IP地址指针修改,便可首先执行,事实上,大多数病毒仅仅只修改了文件头,而未修改原文件内容.这便为完整地恢复原程序代码提供了条件.

   从上面的分析可知,感染病毒的EXE文件尾部形成明显的层次,CS:IP指向病毒体,不管病毒采取什么样的措施,它最终必定会在内存中恢复宿主程序所有的真实参数,并且用一条长跳转指令返回原程序.这时,我们便可直接提取出正确的CS:IP和SS:SP参数指针,用它修改文件头后,再将外层病毒代码去掉,这便彻底地恢复了原EXE文件.

   问题在于如何找到EXE文件的正确入口.判断EXE文件的真正入口是十分复杂的,但对于基于DOS系统的病毒来说,其编写语种基本上是汇编语言,因此便具有一些独特的特点.经过大量分析看出,一般情况下,当EXE病毒执行到真正的文件开头时,其CS和DS均要改变,并且DS内容必定是PSP段地址,SS:SP指针被初始化,对于不修改重定位表的病毒来说,CS:IP指针应处于重定位区域内.

   于是,可以再设想出这样一种跟踪器,每执行一条指令,便判断上述条件是否满足,如果满足,则此时CS:IP处的代码便是原文件的影像,根据CPU各个寄存器的内容便可正确地恢复EXE文件头,以达到杀毒的目的.

二  实现方案

   同COM文件杀毒一样,这种理论上的跟踪器实际上是很难奏效的.因此,我们又要求助于我们的老朋友--EXEX功能.

   MS DOS的功能4B有两个重要的子功能:4B00为装入并执行,4B01为装入不执行(未公开的文档功能),4B00用于执行所有的可执行程序,4B01则用于DEBUG调试器中的装入功能.(关于4B01功能的具体参数见附录1).

   由于问题的关键在于如何找到原程序的第一条指令,也就是说在执行到原程序的第一条指令时发生中断,因此我们可以人为地将第一条指令改为中断指令.为了完成这种功能,只需用4B01功能来仿真4B00功能.

   具体是这样做的,当系统调用加载执行功能4B00时,先用功能4B01加载,并初试化所有参数,这时内存的影像应如表3所示.

               表3:  EXE 染毒程序内存影像

地址 内容
  原程序代码区
  CS:IP→ 病毒代码区

   假定病毒的第一条指令处于病毒代码的最前端,原程序的内存影像应为PSP:100~CS:IP(病毒的第一条指令),将这部分区域全部用ASCII码CD填充.这样,原程序的每一条指令都变成了中断指令INT CD(不用INT 3断点中断是因为大部分病毒都具有破坏单步断点中断的功能),也就是说,无论从原程序的任何地址开始运行,所执行的第一条指令都是INT CD.这样,一旦病毒代码执行完毕,打算用长跳转指令返回原程序执行时,都会触发软中断INT CD,而通过INT CD的中断服务程序便可取得EXE文件头真正的初始化CS:IP和SS:SP指针.

   另外值得注意的是,修改后的INT 21必须是可递归的,因为有些病毒(如新世纪病毒)是通过第二次加载原程序来返回的,因此,内存填充要进行两次.4B01也被调用了两次.

   此方法的效率和准确度要远远高于用DEBUG等工具逐步跟踪分析的手工杀毒法.可以为各种染上已知或未知病毒的文件去除病毒外壳.与RCOPY等去壳程序不同的是,这种方法对EXE程序的恢复是全真的恢复,它并不改变原EXE文件的任何内容.它所恢复的EXE程序代码应与原EXE程序代码完全一样.另外,此法由于采用了剥壳还原法,因此还可以用来清除交叉感染的病毒,方法是从外到内逐层脱壳,最后彻底恢复最内层的宿主文件.

 

第五章 结论

   本文所论述的这种清除病毒的方法的实现原理是非常独特的.当然,文中所给出的实现方案并不能清除所有的计算机病毒,但它却给出了一种思想,即抛弃以前那种一个杀毒算法只能杀一个病毒,而是一个算法可以杀一类病毒.根据这种思想,笔者已用C语言和汇编语言编写出这个通用杀病毒程序,并且用大量的病毒对它进行了测试,效果良好.当然,病毒是五花八门的,因此一个统一的病毒对抗软件应接受广泛的考验.其具体的功效还需要多方面的验证,笔者也仅仅希望这种思想能够在反病毒领域发挥出积极的作用.

 

参考文献

1.  李向宇 著   <<计算机病毒概论>>      IDG国际数据集团  1990

2.  Ray Dancan  <<高水平MS DOS程序设计>>   电子工业出版社  1988

   Ray Dancan  Advanced MS-DOS Programing   Microsoft Press  1988

3 . Ray Dancan   <<MS DOS百科全书>>     电子工业出版社  1990

   Ray Duncan  the MS-DOS Encyclopedia    Microsoft Press  1990

  附录:MS-DOS EXEC功能详解

  翻译人:William Long 于1996年 译自:MS DOS百科全书(Ray Duncan: the MS-DOS Encyclopedia)

  MS-DOS系统的加载,即把磁盘上的COM及EXE文件装入内存并执行,可以被任何程序使用MS-DOS功能(功能4BH,加载执行)产生.DOS的命令解释程序COMMAND.COM使用EXEC装入它的外部命令,如CHKDSK,或其它应用程序.许多流行的商业软件,例如数据库和字处理,都使用EXEC执行辅助程序(例如拼写检查),或是装入COMMAND.COM的另一个副本,这就允许用户在不失去当前工作上下文时运行一个辅助程序或打入MS-DOS命令.

  当EXEC被一个程序(父进程)调用并加载另一个程序(子进程),父进程可以通过一串字符即环境块,命令行及两个文件控制块,来传输一定的信息给子进程.子进程同样继承了父进程的MSDOS标准设备及其它父进程打开的设备的句柄(除非打开的操作有"非继承性"的选择).任何操作都可被子进程的继承句柄执行,例如定位或文件输入输出,而且还影响着与父进程句柄联系着的文件指针.子进程也可装入另一程序,如此循环直至系统内存溢出.

  因为MSDOS并非一个多任务的操作系统,子进程直到运行结束才交出系统控制权,父进程此时被挂起,这种进程操作有时也叫做同步执行.当子进程中止,父进程得到控制权并可用另一个系统功能调用(INT 21H功能4DH)取回子进程的返回码并检查子进程的中止是否正常,或是一个重大的硬件错误,比如用户按了Ctrl-C.

  除了装入子进程外,EXEC还可以被用来装入由于用汇编或高级语言写成而不能包含在其库文件中的子程序或应用程序的覆盖文件,这种类型的覆盖文件不能单独运行,多数需要主程序的段内的"帮助"工作或数据.

  EXEC功能仅存在MSDOS 2.0版以上,在MSDOS 1.X版中,父进程可以用INT 21H的功能26H建立一个子进程的程序前缀段,但必须自己完成装载,重定位,执行代码的过程,而不是依靠操作系统的帮助.

  EXEC是怎样工作的

  当EXEC功能接到一个执行程序的请求时,它首先试图打开并定位指定的程序文件.如果文件没有找到,EXEC立刻失败并返回调用者一个错误码.

  如果文件存在,EXEC打开此文件,确定它的大小,并检查文件的首块.如果块的头两个字节是ASCII码MZ,文件便设定为一个EXE装入模式.程序代码段,数据段,堆栈段的大小可以从文件头获得.否则,整个文件便设定为一个决对装入影像(COM程序).实际的文件名后缀(COM或EXE)在这个测试中被忽略.

  此时,内存所需要装入程序的大小是知道的,假如有足够的空间装入程序,EXEC便在内存分配两个块:一个包括新程序的环境块,另一个包括程序的代码段,数据段和堆栈段.不同类型的程序实际分配的大小不同.COM程序得到系统中全部的空余内存(除非内存空间过早形成碎块),而分配给EXE程序的空间大小是由文件头的两个字段控制,MINALLOC和MAXALLOC,它是由LINK设置的.

  EXEC接着将父进程的环境块拷入子进程的环境块,在子进程内存块的底部建立一个程序前缀段(PSP).并将命令行及缺省文件控制块拷入PSP.以前的终止地址(INT 22H),Ctrl-C(INT 23H)

  及严重错误(INT 24H)中断向量的目录存入新的PSP,终止地址向量被更新,以便子进程终止或失败时控制能够返回到父进程.

  接着子进程的实际代码和部分数据便由磁盘文件读到新PSP结构上方的程序内存块.如果子程序是一个EXE文件,文件头的重定位表常用于在程序里定位参考段以便反映出它实际的装入地址.

  最后,EXEC功能建立为程序的CPU寄存器和堆栈并将控制传给程序.COM文件的入口指针常是程序内存块中偏移100H(PSP后第一个字节).而EXE文件的入口地址由文件头指定,可以在程序中任何位置.

  当EXEC用于装入并执行一个覆盖文件而不是子程序时,它的操作会比上述更为简单.对于覆盖文件,EXEC并不试图分配内存或建立PSP及环境块,它只简单地将文件的内容装入调用文件所指定的地址,并执行一些必要的重定位(如果覆盖文件有一个EXE文件头).使用的段值也是由调用者提供.EXEX接着并不是将控制传给最新装入文件的代码,而是返回所产生的程序,请求程序负责在适当的位置调用覆盖.

  使用EXEC装入程序

  当一个程序装入并执行另一个程序时,它必须执行以下几步:

  1.确认有足够的空闲内存来装入子进程的代码,数据和堆栈.

  2.建立EXEC和子进程所需要的信息.

  3.调用MSDOS的EXEC功能运行子进程.

  4.恢复并测试子进程的结束及返回码.

  分配内存

  MSDOS典型地分配给被加载的COM或EXE文件所有可用的内存.一个不常见的例外是当一个由/CPARMAXALLOC开关联接或被EXEMOD修改的EXE程序会由它先前驻留的数据或代码分裂一个短小的程序块.所以,当一个程序要装入另一个程序之前,它必须释放所有它本身代码数据堆栈所不用的内存.

  释放多余的内存是调用MSDOS的重分配内存块功能(INT 21H,功能4AH).此时,ES寄存器置父进程的PSP段地址,BX寄存器置程序自身必须使用的内存块数,如预期的父进程是COM程序,且它减少它的内存分配数低于64K时,它必须移动它的堆栈到一个安全的空间.

  准备EXEC的参数

  当使用装入和执行一程序时,必须提供EXEC功能两条参数:

  1.子程序路径名的地址.

  2.参数块地址.

  参数块依次包括子程序所需信息的地址.

  程序名

  子程序的路径名必需是明确的,零结尾(ASCIIZ),规定文件名(没有非识别字符).如果没有包含路径,便在当前目录下寻找程序,如果无驱动器名,则使用默认驱动器.

  参数块

  参数块包括四个数据项地址:

  1. 环境块

  2. 命令行

  3. 二个缺省文件控制块(FCBs)

  在参数块中为环境块指针准备的空间只有两个字节,包括一个段地址.这是因为环境块总是排在段落上(它的地址总可以被16整除).值0000H表示子进程的环境应被毫不改变地继承.余下的三个地址全是双字节地址,是标准的Intel格式,一个低字的段偏移,一个高字的段地址.

  环境块

  一个环境块总是从一个边界段开始,包含一系列的以0结尾的字符串(ASCIIZ),形式如下:

  name = variable   全部字符串的结尾以一个附加的0表示.

  如果在参数块中的环境块指针提供给一个EXEC的调用包含0,那么子进程只需简单地拷贝父进程的环境块.父进程能够提供一个不同或是增长一组字符串的段指针.另一方面,在MSDOS 3.0

  以后的版本里,EXEC使子程序的环境块具有完整的路径名.环境块最大为32字节.通过这种途径,这么大的信息也可被程序识别.

  最初的(或主控的)系统环境块属于系统接通或重新启动后的命令处理程序(通常是COMMAND.COM)所装入的.COMMAND.COM将字符串PATH,SHELL,PROMPT和SET命令的结果写入系统的主环境块.前两个通常使用的是默认值.例如,一个MSDOS 3.2版的系统从C驱启动,在AUTOEXEC.BAT文件中无PATH命令,CONFIG.SYS文件中也无SHELL命令,则主环境块将下面两行字符串写入:

  PATH =

  COMSPEC = C: COMMAND.COM

  COMMAND.COM为运行"外部"命令而寻找这些说明清单,同时也为了找到自身在磁盘上的可执行文件以便它能在必要的时候重新装入它的暂态部分.当PROMPT字串存在时(先前的PROMPT或SET PROMPT命令产生的结果),COMMAND.COM它来修订用户的提示显示.

  环境块中的其它字符串仅仅为了特殊程序提供信息,它不影响操作系统的操作.例如,Microsoft C 编译器和 Microsoft Object 连接器在环境块中寻找INCLUDE,LIB和TMP字符串,以确定头文件,库文件,临时文件的指定位置.图2给出了一个典型的环境块的十六进制显示图.

  命令行

  命令行是传给子进程的,它包括一字节指明余下命令行的长度,紧接着的ASCII字符串是以ASCII码回车(0DH)为结束的.回车码并不包含在长度值里.命令行可包括子进程可以检查到的所有开关,文件名,以及其它参数,用以影响程序的操作.命令行被拷贝到子进程PSP偏移80H处.

  当COMMAND.COM使用EXEC运行一个程序时,它的命令行包括除程序名或重定向参数外所有用户打下的命令.I/O的重定向是在COMMAND.COM内部处理的,它表明子进程继承了标准设备句柄的活动.其它程序使用EXEC来运行子进程必须自己做一些必要的重定向而且必须提供一个合适的命令行,以便子进程表现得如同被COMMAND.COM装入一样.

  确省的文件控制块

  EXEC参数块的二个确省的FCBs指向拷贝到子进程PSP的偏移5CH和6CH.

  当前只有极少数应用程序使用FCB作为文件和记录的I/O.这是因为FCBs不支持目录树结构.但有些程序检查确省的文件控制块作为分离前二个开关或其它命令行参数的快速的方法.然而,使它自己本身对子进程透明,父进程应该仿效COMMAND.COM那样把命令行前二个参数装入确省的文件控制块.这能使MSDOS的分析文件名功能(INT 21H,功能29H)能方便地使用.

  如果子进程不需要这二个确省的文件控制块,应用程序内存中的参数块中正确的地址会初始化指向二个空FCBs,这些空FCBs是由1字节0和11字节ASCII码空格(20H)组成.

  运行子进程

  当父进程构造完所必要的参数后,它就可以通过中断21H来调用EXEC,各寄存器设置如下:

  AH = 4BH

  AL = 00H (EXEC子功能,装入并执行程序)

  DS:DX = 程序路径名的段地址:偏移址

  ES:BX = 参数块的段地址:偏移址

  从以上软件中断返回后,父进程必须要测试一下进位标志,以此来检测子进程是否实际运行过.如果进位清楚,则成功装入并控制了子进程.如果进位置位,则EXEC功能失败,错误码返回在AX中,可检测原因.通常的原因是:

  指定文件没有找到

  文件找到,但没有足够的内存装入

  其它不常见的服务错误可以从整个系统感到其特征(如磁盘文件或内存中的MSDOS被损坏),使用MSDOS 3.0以后的版本,可以通过调用INT 21H功能59(取扩展错误信息)来获得EXEC更详细的失败原因.

  总的来说,提供给EXEC参数块一个无效地址或参数块本身地址无效并不会引起EXEC错误,但这将使子进程产生一些不可的后果.

2006年3月29日星期三

局域网上的点对点通信

  整理旧文档,发现了这篇很陈旧的论文,这是我十年前写的第一篇论文,也是我第一篇在杂志上发表的论文,同时也是我大学的毕业设计论文。

  十年前,我写毕业设计论文的时候,为了写这篇论文也花费了我不少的时间和精力,整天都泡在图书馆里。今天再看这篇文章,竟然感觉如同隔世的感觉,那时候什么是网络呢?Windows95刚刚发布,WindowsNT和Windows2000都没有普及,网络在那时还是一个神秘而高深的技术,那时我们建立局域网用的一律都是Novell系统,没有图形环境,设置非常繁琐复杂。而现在,这些东西完全都过时了,那时候先进的TCP/IP现在面临其协议不安全、有漏洞的指责,NETBIOS和IPX就早已失传了,十年时间,竟然整个网络技术发生了如此天翻地覆的变化,慨叹,自己都已经快跟不上这个时代了。

  这篇文章还是重新发布一下,以做纪念。

 

局域网上的点对点通信

 

   摘要:本文讨论了在局域网络环境下,实现工作站之间的实时通信的三种方法.重点介绍了基于NetBIOS 及TCP/IP协议实现工作站之间的点对点通信(Peer to Peer), 并给出了设计的应用程序实例.

   关键词:局域网 点对点通信 NetBIOS TCP/IP IPX/SPX

 

一  引 言

   在信息化社会里,人们都希望以快速简的方法获取信息,计算机网络的出现,使人们的这个想法得以实现.通过计算机网络,人们可以方便地实现通讯和共享资源:计算机网络使信息传播和信息处理加工的设备和工具空前紧密地结合在一起,这种技术的进步和发展对提高人类社会信息化水平有着巨大的推动作用.

   但在实际的计算机网络中,往往需要互连来自不同厂家的机器,要具备异 种机的互联能力.由于各厂家的机器有其各自的总线结构,文件系统,输入输出系统和采用的字符集等,因而使这种互联成为一件十分困难的事情.

   另外,从局域网的运行情况来看,以Novell Netware网络为例,文件服务器是网络的核心,其上运行Netware操作系统软件,为网上工作站提供共享资源与服务.因此,文件服务器的好坏对网络的性能极其重要.随着网络的扩大,连接的工作站增多,服务请求也迅速增加,服务器的负载也相应加重,服务器有可能成为网络工作的"瓶茎".

   针对上述情况,本文利用网络上的点点通信思想,在不使用服务器的情况下实现不同工作站之间的文件传输和共享打印.

 

二  局 域 网 概 述

   随着微型计算机技术的迅猛发展和日益成熟,微型计算机的价格在不断下降,因此人们有条件的将十几台微机,外设依网络通信协议连接起来,形成局域网(Local Area Network).它具有以下几个特点:

   1) 采用基带传输,传输速度较高.

   2) 网络覆盖地域较小,可不用调制解调器.

   3) 传输误码率低.

   局域网的功能概括起来可归为以下几点:

   1) 资源共享.包括大容量硬盘,高速打印机,数据及软件.

   2) 电子邮件系统.

   3) 使用分布处理实现负载均衡.

   机算机网络中对于各种约定做了如下定义:将机算机网络同等层间的通信约定称为网络协议.将不同层的通信约定称为接口.到目前为止最有代表性的网络分层模型有两种.其一为国际标准化组织(ISO)所提出的开放系统互连(OSI)七层协议参考模型,其二为美国电气与电子工程师学会(IEEE)802委员会所提出的参考模型.

   (一) ISO/OSI七层协议及参考模型

   OSI参考模型的七层分层结构如图1所示.该模型是按逻辑组合功能来分层的,上一层是建立在下一层的基础上,较高层向较低层提供服务请求,而较低层为较高层提供服务.所谓开放系统是指按照这种模型所构成的网络是可以互连的,是彼此开放的,从而便于世界各地的网络互连.

   OSI模型各层定义如下:

    应用层       网中的网络应用软件在此层运行.

    表示层       辅助用户执行诸如文间传送,程序运行等任务.

    会话层       管理低层与用户之间的连接,是用户到网络的接口.

    传输层       检查网络数据的完整性,必要时将数据分组调整到正确的位   置.设置分组题头,以便将数据组发送到目的地.

    网络层       以分组形式,选择路径发送数据.各分组要穿过两个低层到达目的地.

    数据链路层     管理网络接口处的输入/输出.对原始数据进行组织和检察.

    物理层       定义在网络电缆连接及接线中用的规则与协议.包括例行联络处理及传输规范,还定义了使用的电缆类型及连接器.

   (二) IEEE 802标准局域网络参考模型

   IEEE 802标准遵循ISO/OSI参考模型的原则,解决了最低两层----物理层和数据链路层的功能以及与网络层的接口服务,网际互连有关的高层功能,IEEE 802 LAN 参考模型与ISO/OSI 参考模型的对应关系如图3所示.

   1 IEEE 802 的五个标准文件

    IEEE ( Institute of Electical and Electronics Engincers ),即电气和电子工程师学会,它是一个专业性质的学会.它对OSI模型的低两层即物理层及数据链路层的协议标准进行了大量的研究.IEEE 802标准制定目的是为了在不同的厂商所制造的设备间具有兼容性,从而为使用该网络的用户和设备制造者在付出较小的代价后就能顺利地在这些设备间进行通信.该学会在经过多年的研究和修订,于1984年正式提出了局域网标准的五个标准文件.

   IEEE 802.1     它阐述了802方案与ISO互连参考模型间的关系.

   IEEE 802.2     逻辑链路控制标准.

   IEEE 802.3     采用CSMA/CD访问的总线结构标准.

   IEEE 802.4     采用令牌访问方法的总线结构标准.

   IEEE 802 各标准间的关系如图2所示.

   2 IEEE 802 LAN 标准局域络参考模型 

   从对ISO参考模型的讨论中以然清楚的了解到物理层,数据链路层及网络层共同完成了报文分组的传输功能,因此物理层,数据链路层是必不可少的.但考虑到局域网络的特点,IEEE 802对OSI参考模型作了修正.IEEE 802将数据链路层分为两个子层,即逻辑链路子层(LLC)和介质访问控制子层(MAC).在MAC子层中CSMA/CD,令牌总线(Token Bus),令牌环(Token Ring)等几种介质访问控制方式.在数据链路层同网络层的接口设置了服务访问点(SAP).

 

三  网 络 通 信 及 实 例

   (一) 进程通信

   进程,指程序的一次执行.进程通信指各进程之间共享资源,相互进行数据传输的信息交换方式.OSI的传输层为进程通信提供了服务.

   进程通信的实现方法:

   1) 建立和拆除进程间的连接

   2) 信息传递与控制

   (二) 点对点通信

   从OSI参考模型的应用层来看,可认为网络是由工作站和服务器组成的,但从传输层和网络层的角度看,工作站和服务器没有本质的区别,它们都是连接到网络上的一台机器,都可以用网络地址或名称来代替.它们之间的通信,就是所谓的点对点通信,也叫对等通信.在局域网上,点点通信意味着两个工作站可以直接对话而不用经过文件服务器中转.

   (三) 实例:  Windows 95的点对点网络通信功能:

   Windows 95操作系统的Network Neighborhood(网络邻居)的三个重要的部分是:Netware的客户服务,点对点对等服务,Internet或/TCP/IP服务.

   在Windows 95内建的点对点对等网络功能,可以很容易地在一个小 工作组内共享文间和打印机,而不用文件服务器.Windows 95 比Windows for workgroup3.11最具特色的功能之一是:它有一个大大改进的安全方案,每个用户即可以在用户级又可以在资源级共享文件和打印机等资源.

   在Windows 95下,点对点的对等网络具有更大的灵活性,因为它可在Netware多用户(运行于IPX/SPX或TCP/IP协议下)之间建立点对点对等连接.Windows 95 能做Windows for workgroup 客户能做的每件事,还可以做得更好.

   无论用户选用什么样的平台,他们都可以利用Network Neighborhood非常方便地浏览网络资源.用户选中工作台面上的一个图标即可直接进入Network Neiborhood工作窗口,此后,用户不关心网络连接,驱动器映像,打印机队列等工作,即可连接到任意类型的网络服务器,浏览服务器中的文件或其它共享资源.

   安装对等网络服务功能具体是这样的,从Control Panel中打开Network对话窗口,移动其中的Configuration标签,点中add按扭后,在弹出窗口中选择Client.此后,会弹出一个Select Network Client(选择网络客户)的对话窗口,选中其中的Client for Microsoft Network后,点OK按扭.重新启动机器后,在Network Neighbour hood中将显示同一工作组中共享文件的所有客户.同时,在Network Neighborhood中也列出了网络中的Microsoft,Warp Connect以及IBM LAN Server域名,Microsoft工作组和Netware通过使用全局命名规则(Universal Naming Convention,UNC)而不是通过驱动器映射到的Netware网络服务器.

   文件共享在Configuration标签中设置File and Print Sharing(文件与打印共享)选择项,然后在Access Control(访问控制)标签中选中Share Level Access Control项,为了配置共享选择项,必须返回到Desk top或Explorer中,用鼠标右键在准备共享资源(如键盘,光驱)上点一下.此后,会弹出一共享设置Sharing对话框.如使用Netware网络,那么结果是:要么网络中其他用户都可以访问你的共享文件,要么无人可访问.

 

四  点 对 点 通 信 的 实 现

   局域网中工作站之间的通信程序的开发一般通过四种途径:第一种是通过改造网络原有通信软件来实现.但这种改造必须以对该软件充分了解为基础,否则改造后很难保证不影响网络的整体性能,甚至会造成系统运行不可靠,而改造后的通信质量不一定理想.第二种是利用Novell网本身的网络协议IPX/SPX来实现,由于这种方法开发比较麻烦,采用的并不多.第三种是通过NetBIOS功能调用来实现,NetBIOS是PC LAN的通信接口标准,广泛适用于多种微机网络,使得以它为基础的设计和应用开发可移植性好.它不依赖于任何网络硬件,是一个介于网络硬件和用户应用程序之间的接口协议.其通信原理是:两个要进行通信的工作站通过名字建立一个虚电路,然后向相应的虚电路号发送或接收信息,这样通过虚电路实现了两个工作站之间的对等通信.利用NetBIOS实现工作站之间的实时通信,功能比较强,编程实现比较容易,所以应用比较广泛.第四种是通过TCP/IP协议来实现.下面我们将详细讨论各种技术的实现.

   (一) 基于IPX/SPX 的实现技术

   由于IPX/SPX不能支持多协议之间的通信,因此本文略之.

   (二) 基于NetBIOS的编程接口

   NetBIOS是Network Basic Input/Output System 的缩写,即网络基本输入输出系统,它是一种应用程序的接口.用户可以调用各种NetBIOS功能,而无需涉及到各种最低层的通信协议,从而实现数据源地与数据目的地之间的信息交换.

   1 NetBIOS概述

   NetBIOS是IBM公司于1984年首次推出的.它可以支持各种著名的通信协议,如TCP/IP,MAP/TOP,XNS,IEEE和OSI等,不仅适用于DOS环境,还可以用在UNIX,OS/2,WINDOWS环境.

   NetBIOS作为一种网络支撑软件,在ISO的开放系统互联(OSI)模型中的位置如图3所示.

   2 NetBIOS的基本概念

   命令

   NetBIOS的功能是由执行一系列命令来完成的.有Wait和No_wait两种形式.

   名字

   NetBIOS是一种按名字工作的系统,每一网络工作站和服务器都有一个(或几个)名字,每个节点还有一个永久节点名,它是在网络适配卡上的6字节网络地址前面再添上10个字节0构成.

   数据报和会话

   数据报是一种无连接的服务,即各个数据报之间互相独立,单独传送.在网络上任意两个名字之间可以建立一个会话,或多个会话.

   网络控制块(NCB)

   应用程序调用NetBIOS命令,必须先构造一块网络控制块(NCB),然后执行一次5CH中断.

   信息帧

   在网络中传递的信息是以帧的形式组织的.NetBIOS根据用户的命令,NCB以及它所知道的有关会话和名字的情况自动生成和管理信息帧,用户不必直接过问.

   服务器报文块

   3 NetBIOS设计要点

   在设计两个或多个工作站之间对话的时候,要注意处理好以下几个问题:

   1) 选择通信方式

   网络中的通信可以采用数据报方式,也可以采用会话方式.

   会话方式的特点是由通信协议保证每一报文能够正确地送到目的地.如果报文在传送过程中发生了差错,则通信协议会自动地进行重发,加以改正.而且,如果你发出的报文不止一个,那么通信协议还能够保证接收到的报文次序和发送时的次序一致.这些保证都是对用户应用程序透明地进行的,用户完全不需操心.但是,会话方式的主要缺点是过程比较复杂,在发送报文之前先要建立会话,送完报文之后又要撤除会话.因此,会话方式比较适合于点到点的多次往复式的对话.

   数据报的特点正相反.它是把每一个报文作为一个独立的数据报处理,从而免除了建立和撤除会话的麻烦.但正因如此,它不能保证接收到的报文次序和发送次序一致,甚至不能保证每一个报文都能够正确无误地达到收方.在报文丢失或发生错误时,系统不向发送方提供出错信息.如果你所设计的对话环境由一系列互不相关的报文组成,或者每次对话都很简单,那么采用数据报传送可以大大加快对话的速度.另外,如果用数据报传送比较重要的报文,为了防止差错和丢失,可以在应用程序中为报文加上查错和序号功能.

   2) 选择命令返回方法

   执行NetBIOS命令可以采用等待方式和非等待方式.对于非等待方式,又可以有两种不同的做法:一种是轮询方法,即循环检查网络控制块(NCB)中的最终返回代码字段,当它的值从0xFF变为其它值时,表示该命令执行完毕. 另一种是异步事件处理方法,即告诉NetBIOS,在当前命令执行完毕后存放在NCB的POST程序地址字段中的程序指针,继续执行一个指定的程序段.需要指出的是,这两种做法虽然难易程度不同,但都是在后台进行.对于前后操作,都是立即返回用户程序,不必等待命令完成.它们的主要差别在于对网络负荷的影响.比如,一个工作站发出一条命令,要求另一个工作站执行一项比较费时的任务.如果这个工作站采用轮询方式,持续不断地询问对方是否完成,就会极大地增加网络的负荷.这时,尽管轮询比较容易编程,那也不是一种好的选择.

   4 NetBIOS基本程序

   1)调用NetBIOS

    要调用一NetBIOS功能,需要做以下三件事:

       (1) 构造一个NCB,包含所有需要告诉NetBIOS的信息.

 

#define USGC unsigned char

#define USGI unsigned int

#define USGL unsigned long

 

struct NCB  {

   USGC NcbCommand;

   USGC NcbRetCode;

   USGC NcbLsn;

   USGC NcbNum;

   char * NcbBufferOffset;

   USGI NcbBufferSegment;

   USGI NcbLength;

   char NcbCallName[16];

   char NcbName[16];

   USGC NcbRto;

   USGC NcbSto;

   char * NcbPostRtnOffset;

   USGI NcbPostRtnSegment;

   USGC NcbLanaNum;

   USGC NcbCmdCplt;

   char NcbReseredArea[14];

} ZeroNcb;

 

       (2) 把网络控制块地址写入ES:BX寄存器,作为指向该NCB的远程地址指针.

       (3) 执行5CH中断.执行中断时,NetBIOS自动进入ES:BX寄存器指定的地址,读出网络控制块,得知一切有关该操作的信息. 下面是设置指针和执行中断的程序段:

void NETBIOS  (struct NCB *NcbPtrNear)

 

{

   union REGS InRegs,OutRegs;

   struct NCB far *NcbPtrFar=(struct NCB far*)NcbPtrNear;

 

   segread(&SegRegs);

   SegRegs.es=FP_SEG(NcbPtrFar);

   InRegs.x.bx=FP_OFF(NcbPtrFar);

 

   int86x(NetbiosInt5c,&InRegs,&OutRegs,&SegRegs);

 

}

  

   2)定义NetBIOS命令

   在程序段中还包括对所有NetBIOS命令(包括WAIT和NO_WAIT)

   3) POST程序

   在执行非等待命令时,可以把一个POST程序的地址告诉NetBIOS,然后直接返回前台操作.当后台命令完成时,它会自动转去执行POST程序.从这段描述可以看出,我们必须把POST程序编成一个中断处理程序.

 

unsigned  es_reg,bx_reg,msg_received_flag;

NCB far *posted_ncb_ptr;

void interrupt POST (void)

{

    es_reg=_ES;

    bx_reg=_BX;

    posted_ncb_ptr=MK_FP (es_reg,bx_reg);

    msg_received_flag=TRUE;

}

 

   4)数据报服务

   假定A工作站和B工作站之间以数据报方式通信,其主要步骤如下:

    工作站A               工作站B

   增加名字A              增加名字B

   发送报文给B  ----------->      收到一个报文

   收到一个报文     <------------  发送报文给A

   删除名字A               删除名字B

   5)会话服务

   A工作站和B工作站之间以会话方式通信步骤如下:

    工作站A               工作站B

   增加名字A               增加名字B

   Listen                Call  A站

   发送报文给B  ----------->      收到一个报文

   收到一个报文     <------------  发送报文给A

   Hang up  B站             Hang up  A站

   删除名字A               删除名字B

 

    5 Windows 通信程序的特点

   在Windows中,由于它是非抢先多任务,所以NetBIOS最好用异步方式(非等待式),CPU发出NetBIOS调用后,处理其他消息, 当NetBIOS完成后会自动执行后置例程POST, POST 通过 PostMessage 把一条用户定义的消息放到合适的队列中.Windows 应用程序接到该消息后再处理接收到的网络数据.

   其次,由于Windows的代码段和数据段可移动,这对异步NetBIOS是致命的,当异步NetBIOS命令发出后,如果代码段或数据段移动,命令完成后,NCB所指示的缓冲区已发生变化.解决的方法是使代码段和数据段不可移动.在DEF文件中定义如下:

     CODE   PRELOAD   FIXED

     DATA   PRELOAD   FIXED   SINGLE

 

   6 点对点通信程序源代码. (基于NetBIOS)

   完整的源程序见附录.

 

   (三) 基于TCP/IP协议的编程接口

   1 TCP/IP简介

   TCP/IP的历史要追溯到70年代中期,当时ARPA为了实现异种网之间的互连(interconnection)与互通(intercommunication),大力资助网间网技术的研究和开发,于1977年到1979年推出目前形式的TCP/IP体系结构和协议规范.到今天,TCP/IP技术以及Internet网间网已经为广大计算机工作者,机算机厂商和机算机用户所接受.据统计,到1990年,Internet以包含遍布欧美的五千个活动网络,超过三十万台机算机.作为一种事实上的工标准,TCP/IP技术方兴未艾.

   2 TCP/IP的网络分层结构

   对TCP/IP协议来说,TCP提供传输层服务,IP提供网络层服务.TCP/IP协议组(或Internet协议组)的分层结构及其与OSI模型的对应关系如图4所示.图中有关协议的名称及其基本含义如下:

   (1) TCP.  为传输控制协议(Transmission Control Protocol).它是提供给用户进程的一个可靠的全双工字节流的面向连接的协议.大多数Internet应用程序使用TCP.因为TCP使用IP,所以整个Internet协议组也常称为TCP/IP协议组.

   (2) UDP. 为用户数据报协议 (User Datagram Protocol).

   (3) ICMP. 为网间报文控制协议 (Internet Control Message Protocol).

   (4) IP. 网间协议 (Internet Protocol). IP协议是为TCP,UDP和ICMP提供分组发送服务协议.

   (5) ARP. 地址转换协议.

   (6) RARP. 反向地址转换协议.

   3 Socket编程界面

   (1) Socket 原理

   Socket编程界面由4BSD UNIX首先提出,目的是解决网间网进程通信问题.Socket接口为进程间通信提供了一种新的手段,它不但能用于同一机器中的进程之间的通信,而且支持网络通信功能.Socket具有类型,反应了对用户透明的通信特性.

   一个完整的Socket连接用一个相关描述:

       { 协议,本地地址,本地端口,远地地址,远地端口 }

   Socket 是面向客户-服务器模型而设计的,针对客户和服务器程序提供不同的Socket系统调用.

   (2) Socket系统调用

   不管Socket内部机制如何,它提供给应用程序员的最终界面是一组系统功能调用.下面,我们一一给出重要的Socket系统调用.

     1. 创建 Socket ----- socket()

     调用格式如下:

       sockid = socket (af,type,protocol)

    af : 地址族,指本socket所用地址类型.

    type :  类型,指创建socket的应用程序所希望的通信服务器类型.

    protocol : 协议,指本socket请求的协议.

     2. 指定本地地址 ---- bind()调用

     bind()将本地socket地址与所创建的socket联系起来,即将本socket地址赋予socket,以指定本地半相关.bind()的作用相当于给socket命名,调用格式为:

         bind (sockid,localaddr,addrlen)

     sockid : socket号.

     localaddr : 本地socket地址.

     addrlen : 地址长度.

     3. 建立socket连接 ---- connect () 与 accept ()调用

     这两个系统调用用于完成整个相关的建立.其中connect用于建立连接 .调用格为:

         connect (sockid,destaddr,addrlen)

     destaddr : 指向对方socket地址(信宿地址)结构的指针.

     accept : 用于面向连接的服务器,其调用格式为:

         newsock = accept (sockid,clientaddr,paddrlen)

     clientaddr : 指向客户socket地址指针.

     paddrlen : 客户socket地址长度.

     4. listen() 调用

     此调用用于面向连接服务器,表明它愿意接收连接,listen()在accept()之前调用,格式为:  

         listen (sockid,quelen)

      quelen : 请求队列长度.

     5. 发送数据 ---- write(),writev(),send()与sendto(),sendmsg()

     用于socket数据发送的系统调用一共有五个,其中三个,write(),writev()和send()用于面向连接传输,其余两个用于无连接传输.面向连接的调用可以不指定信宿地址,而无连接的调用必须指定.假如无连接socket的双方均调用过connect(),可以认为是建立有连接的socket,也可以面向连接调用发送数据.

     三个面向连接调用三者的格式大致相同:

     write (sockid,buff,bufflen) : 缓冲发送

     writev (sockid,iovector,vectorlen) : 集中发送

     send (sockid,buff,bufflen,flags) : 可控缓冲发送

     其中buff指向发送缓冲区的指针,bufflen是发送缓冲区大小.

     用于无连接数据发送的调用有两个:

     sendto (sockid,buff,bufflen,flags,dsadd,addrlen)

     sendmsg (sockid,message,flags):可控集中无连接发送.

     6. 接收数据 ---- read(),readv(),recv()与recvfrom(),recvmsg()

     接收数据与发送数据系统调用是一一对应的,两者参数的最大区别是,前者buffer是一个指针,其所指单元初值为欲读数据长度,调用后的值是实际读出的值.

   4 客户--服务器模型的Socket实现框架

     1)客户--服务器模型时序图

     下图是面向连接客户--服务器模型的典型时序图

       服务器                 客户

       socket()                socket()

       bind()                bind()

       listen()                

      accept()   等待客户连接请求      

     阻塞   <━━━━━━━━━━━━━━━ connect()

       read() <━━━━━━━━━━━━━━━> write()

 

     2)服务器socket地址的确定

     在客户--服务器模型中,所有的作用者都是客户首先发起的(如连接请求,服务请求等),因此客户必须要知道服务器socket地址,另外,客户调用服务器之前,可以在命令行中给出服务器所在主机的域名,根据域名可以获得服务器主机的地址,系统调用为:hp=gethostbyname(host).其中host可以是服务器主机域名,返回hp是一个指向主机地址结构的指针.

 

五  结 论

   综上所述,TCP/IP对于异种机具有极强的互连能力,很可能成为未来网络协议的标准,其通信编程有一整套方便实用的工具.因此,用其开发通信软件方便,容易,可升级.

   而NetBIOS是一种可加载模块,其特点是可方便地实现不同协议之间的通信,其通用性极强,可方便地在不同局域网间移植.

   以上两种方法各侧重点不同,而近年来由于Internet的兴起,TCP/IP逐渐变得重要了。TCP/IP使得互连UNIX终端,WINDOWS终端以至MAC终端成为现实。成为世界上最大的网络。目前,世界上各大公司正争先恐后的开发Internet上的资源.因此可以预见在不久的将来,以TCP/IP为基础的点点通信必将成为网络通信的重要手段.

  

                参 考 文 献

1. 顾隽修 等编著   <<计算机局域网络原理与应用>>   中国广播电视出版社   1993

2. 陈洛资 等编著   <<计算机网络软件设计,开发与编程>>   科学出版社   1994

3. 汤毅坚 编著    <<计算机实用网络编程>>   人民邮电出版社   1993

4. 张公忠 等编著  <<Novell 网组网原理与实用技术>>   清华大学出版社   1992

5. 徐建平 岳东 编著  <<Novell 网络原理,操作及开发指南>>  电子工业出版社  1994

6. 汤岳清 编著   <<Novell 网络及其互联技术>>   电子工业出版社   1992

7. 周明天 编著   <<TCP/IP网络原理,操作及开发指南>>   清华大学出版社   1993

8. Tim Farrell,Runnoe Connally  <<Windows 3.1 编程指南>>   清华大学出版社  1994

9. Daniel Appleman  <<Visual Basic 与 Windows API 接口大全>>   电子工业出版社  1995

10. 陈佳海 等编著   <<Visual C++ 程序开发指南>>   科学出版社  1995

11. 唐文卫 鲍敏   Novell 网上的点对点通信   <<微计算机应用>>   1995(6)

12. 邱勇攀   基于IPX的工作站实时通信的实现   <<微计算机应用>>   1995(2)

2006年3月28日星期二

生成Feed的代码进行了修改

  今天我将主要的几个网站的Feed生成代码都进行了一些修改。

  我也是不得不这么做。因为我发现现有的Z-BLog写的TAG始终无法被technorati获取,然而别人用WordPress写的Blog里的TAG却可以被technorati获取,我自己也手动Ping了technorati,但发现也没有用,只好仔细分析其中的原因了。

  我仔细分析了一下WordPress和Z-Blog的代码,我发现在Feed生成上有一点不同,Z-Blog缺少了几个东西,有可能和这个有关,于是我就修改了一下Z-Blog的rss相关代码,生成和WordPress类似的feed,早上修改的代码,没想到晚上立刻就生效了,新发布的日志的TAG都被收录了,看来我修改的是正确的,只可惜过去一年多的日志里面的TAG都没有被收录。不过我也想到了补救办法,我打算自己再写一个程序,在以后的10天内分别将以前的四百多篇日志提交到technorati上。可惜啊,要是我一早发现这些原理,就不用这么麻烦了。

  另外我给我另外的网站也生成了Feed。Write100的feed原先是使用OBlog 3.12自带的,地址是http://feeds.feedburner.com/write100,但我发现OBlog的Feed生成代码根本写的就有问题,日期的格式不是RFC-822的日期格式,feed合法性校验都无法通过,我只好在手动修改一下里面的代码,同时也不由地感叹,国内地一些开发者总是在开发一些花里胡哨的东西,却在一些最基本的功能上马马虎虎,没有国外开发团队的那种专业性,这样只能和国外的系统比如WordPress差距越来越大。

  当然,对于feed能够产生的实际功效,很多人也在怀疑,而且feed是否是广告商的恶梦,是否能带来更大的流量,也是一个有争议的话题,不过,只要feed不给我的网站带来负面影响,我也是乐于将原先的WEB 1.0的网站增加上feed的。

  最后,介绍一个校验feed合法性的网站:http://feedvalidator.org/ ,用这个地址可以校验feed语法是否正确。

2006年3月27日星期一

祭父

  今天是我父亲的两周年祭日,两年前的今天,父亲突然瘁死在交大附属二院。

  我父亲做了几十年的大学老师,是一个典型的知识分子。具有知识分子的清高和自负。晚年工作上很不顺心,因为我父亲的正直,看不惯单位里的一些头头私设小金库,侵吞国有资产,而成为某些人心中的眼中钉。知识分子对于官场的黑暗和邪恶往往估计不足,我父亲吃了很多亏,心情十分不好。

  我父亲对自己身体太自信了,当一只眼暂时失明的时候才住进医院,住院才一星期,就花费了父亲数个月的工资,可惜的是医院依然没有放过我父亲,就在住院的第六天,我父亲就突然瘁死在病房中,终年59岁。我永远也忘不了那个医院-西安交大附属二院,从某种意义上来讲,西安交大附属医院和我有杀父之仇。

  我想不通,这世界发疯了吗?这些医院知道赚来的钱是沾满鲜血的吗?他们对得起自己的良心吗?他们感觉不到死尸的沉重吗?他们不怕这世界有报应吗?

  我们国家的很多改革都很不对劲,教育产业化让穷人上不起大学,医疗产业化让普通人看不起病。我父亲的命运也真验证了那句话:“小病忍、大病挨、重病才往医院抬”,“辛辛苦苦几十年,一病回到解放前”。医疗产业化所引发的种种问题,不得不让我们质疑:医院的存在究竟是为了救人还是为了杀人

  这的确是个邪恶的世界,什么样的魔鬼才能创造这样的邪恶帝国?恐怕撒旦也会自愧莫如,他们的灵魂是魔鬼缔造的,他们在毁灭我们几千年的中华文明,我们却无能为力。但人总有一死,那些双手沾满鲜血的刽子手们迟早难逃一死,希望那些老东西们快些下地狱吧。我们还有后代,我们不能让我们的后代也像我们这样生活,在谎言、欺骗、恐惧的白色恐怖下度过这一生。

2006年3月26日星期日

风之花-Windflowers

  今天翻看以前的文件,无意中发现了一首好听的老歌:齐秦齐豫版的Windflowers(风之花),查看了歌曲文件的日期,竟然是1998年的。

  传说希腊神话中有一个深得太阳女神阿波罗喜爱,名叫风信子的年轻美男子,被充满醋意的西风神苏菲洛误杀,风信子的血泊中片刻就长出了一种神奇美丽的花,心痛着的阿波罗女神把这朵盛开在血泊中的美丽的花朵命为风信子花,作为情侣间守节的信物。

  Windflowers的歌词中父亲以一过来人的身份,轻轻地告诉儿子,爱情虽然甜美却易逝去。

  “不要去靠近风之花,那种古老的风之花,一旦靠近了就会离不开它,就会时时地追逐它,使自己痛苦。但是我没有听话。果然,我如今再也离不开它了......”

  Windflowers,my father told me not to go near them,he said he feared them always,and he told me that they carried him away.

  Windflowers,beautiful windflowers, I couldn''t wait to touch them, to smell them I held them closely, and now I cannot break away ,their sweet bouquet disppears,like the vapor in the desert,so take a warning, son.

  Windflowers,Ancient windflowers, their beauty captures every young dreamer,who lingers near them, but Ancient windflowers,I love you.

  Windflowers,my father told me not to go near them,he feared them always, said they carried him away. windflowers,I couldn''t wait to touch them, to smell them,I held them closely, now,I cannot break away,their sweet bouquet disppears, like the vapor in the desert,take a warning,son. windflowers,their beauty captures every young dreamer, who lingers near them,Ancient windflowers,I love you.

  风之花,风之花,父亲对我说别走近它,他说他总有些害怕,他说他迷恋过它

  风之花,美丽的风之花,我急切地要抚摸它,贴近脸颊闻久嗅,如今我已无法自拔,它的芳香犹如水汽,沙漠中蒸发,所以,孩子,听句劝告吧

  风之花,古老的风之花,美丽迷惑了每个年轻的梦人,久久的徘徊在它的身旁,而我爱你,古老的风之花

  渥特豪斯 (John William Waterhouse 1849-1917) 的名画《Windflowers》风之花

Windflower

  美丽的少女在遍开花朵的林间采摘银莲花,头发和衣裙在风中飘拂,银莲花的希腊语是风的意思,风之花是一种凄凉而寂寞的花。

  《Windflowers》是一首古老的外国歌谣。这首歌曲的演唱者是Seals和Crofts,一个嗓音低沉,充满了沧桑感;一个天真烂漫,充满了梦幻和活力。先是的弦乐,风琴和键盘的合奏,然后一把带着俄罗斯民谣色彩的木吉他轻轻的和进来,民谣歌手充满感情的吟诵,演绎,梦幻般的柔情似水,清新,舒畅,纯净而荡埃涤尘。

  齐秦齐豫姐弟版低吟浅唱,婉转唯美,有如天籁,直触人心!

2006年3月25日星期六

Google和百度收录网站页面的比较

  Google和Baidu收录网站页面的标准是不同的。我用一句话来形容,就是Google更乐于收录大站的页面,百度则乐于收录新站的页面。

  为此我做一个实验:先申请了一个新域名,在上面放一个网站,然后不在其他任何网站做链接,而直接往百度和Google搜索引擎的提交页面进行提交。一个月过去了,百度收录的网页是24,900篇,Google收录的网页是0,这证实了我以前的猜测。

  这说明了什么呢?说明百度比Google好吗?绝对不是的。因为Baidu和Google收录页面的标准是完全不同的。

  Google是按照网页级别(PageRank)来收录的,只要网站有一定的网页级别,Google会快速收录的,而没有网页级别的网站,Google则坚决不去收录。Baidu则很夸张,采用的是来者不拒,多多益善的原则,无休止的进行收录。Baidu的这种不按网页级别的收录方式其实有很大的恶果,最主要的恶果是造成大量的垃圾网站流行,因为只要做一个垃圾站,Baidu就会立刻收录(25000页以内),这等于变相的鼓励大家去做垃圾站,去盲目采集。当垃圾站横行的时候,Baidu再通过人工的方式封站,甚至一些百度业务员对于大流量的网站还会要求其站长办理百度竞价排名。

百度谷歌

  这两种收录方式哪种更好呢?我个人认为Google的这种收录方式是比较科学的。因为互联网上的页面是个天文数字,收录应该是有选择的收录,好的网站则多收录,新站则应该少收录,等其慢慢知名了以后再多收录,这样也提高了效率,让用户搜索到更好的页面而不是更多的页面。如果对于新站不做分析就快速收录,那么会使得从技术上对抗恶意网站作弊(SEO)变得非常困难,Google通过给予新站给出一定的“考察期”来分析这个新站是否是作弊的垃圾站,而百度就只能依靠人工方式手动地删除垃圾站。对于收录网站的具体操作上,Google的爬虫显得较为“体贴”站长-Google爬虫占用服务器的资源非常少,通常是先用head来查看网页是否更新,如果更新了再抓取整个页面,这种方法耗费流量较少。而百度则不管三七二十一上来就抓整个站,有时甚至不遵守robots规则,而且其爬虫数量非常庞大,对于页面较多的网站通常会耗费惊人的流量,并且常常造成恶劣的后果。

  当然,百度这种“贪婪”爬虫抓取方法,虽然会让用户能够在百度搜索出一些Google里搜索不到的页面,但这实在是损人利己。其带给网站站长不少负面效果:服务器和带宽资源过度消耗,垃圾站被变相鼓励了,原创的有特色的网站则被边缘化,MP3音乐网站则更苦不堪言-自己的MP3被百度盗链后带来大量文件下载却没有带来页面访问。

  因此,中国的网民也出现了很奇怪的现象:大量的新网民和菜鸟新手喜欢用百度搜索,因为百度往往搜索到很多别处搜索不到的页面,但内容的匹配度则令人质疑,而专业人士和老鸟则更喜欢用Google,个人站长则普遍和百度有“个人恩怨”。因此百度在业界的Blog以及社区中口碑都不太好,但在普通的低层次的网民心中却不错,这些大量的普通网民给百度带来了大量流量。

  注:本文已发布于2006年4月17日第14期《计算机世界·华南市场》

2006年3月23日星期四

十大营养食品和十大垃圾食物

  踏入21世纪,人类的寿命愈来愈长,除了有赖医学昌明进步,也因为人们重视养生。“吃得好,住得好,心境开朗”,自然有助身心舒泰,长命百岁。因此大家对食物的要求早已超越单纯去满足生理上的需要,还讲究营养。今时今日,话题当然要说到最有营养的食物。

  美国《时代周刊》专辑介绍了十大最佳营养食品:

  一、绿茶 (green tea)

  - 防治各类癌症,如胃癌、食道癌、肝癌及皮肤癌等。
  - 预防心脏病
  - 用来漱口可防治蛀牙

  二、三文鱼 (salmon)

  - 含有omega-3s脂肪酸
  - 可防治血管阻塞
  - 预防脑部老化例如老人痴呆症
  - 降低胆固醇

  三、菠菜(spinach)

  - 含大量铁质及叶酸
  - 可防治血管疾病及心脏病
  - 保护视力
  - 热量低

  四、西兰花 (broccoli)

  - 含丰富胡萝卜及维他命c
  - 减少罹患各类癌症的机会,如乳癌、直肠癌及胃癌等。

  五、蒜头 (garlic)

  - 防治心脏病
  - 降低胆固醇
  - 杀菌

  六、红酒 (red wine)

  - 含抗氧化剂,有助增加好的胆固醇
  - 减少血管硬化
  - 喝小量对心脏有益
  
  七、西红柿 (tomatoes)

  - 含有具抗氧化功能的红西红柿素
  - 防治前列腺癌
  - 防治与消化系统有关的癌症
  - 有丰富维他命C

  八、果仁 (nuts)

  - 含丰富维他命E
  - 降低胆固醇
  - 预防癌症
  - 含甘油三酸酯,预防心脏病

  九、燕麦 (oats)

  - 降低血压
  - 降低胆固醇
  - 防治大肠癌
  - 防治心脏疾病

  十、蓝莓 (blueberries)

  - 抗氧化
  - 预防心脏病
  - 防治癌症
  - 增进脑力

  世界卫生组织公布的全球十大垃圾食物:

  一、油炸类食品

  - 导致心血管疾病元凶(油炸淀粉)
  - 含致癌物质
  - 破坏维生素,使蛋白质变性

  二、腌制类食品

  - 导致高血压,肾负担过重,导致鼻咽癌
  - 影响粘膜系统(对肠胃有害)
  - 易得溃疡和发炎

  三、加工类肉食品(肉干、肉松、香肠等)

  - 含三大致癌物质之一:亚硝酸盐(防腐和显色作用)
  - 含大量防腐剂(加重肝脏负担)

  四、饼干类食品(不含低温烘烤和全麦饼干)

  - 食用香精和色素过多(对肝脏功能造成负担)
  - 严重破坏维生素
  - 热量过多、营养成分低

  五、汽水可乐类食品

  - 含磷酸、碳酸,会带走体内大量的钙
  - 含糖量过高,喝后有饱胀感,影响正餐

  六、方便类食品(主要指方便面和膨化食品)

  - 盐分过高,含防腐剂、香精(损肝)
  - 只有热量,没有营养

  七、罐头类食品(包括鱼肉类和水果类)

  - 破坏维生素,使蛋白质变性
  - 热量过多,营养成分低

  八、话梅蜜饯类食品(果脯)

  - 含三大致癌物质之一:亚硝酸盐(防腐和显色作用)
  - 盐分过高,含防腐剂、香精(损肝)

  九、冷冻甜品类食品(冰淇淋、冰棒和各种雪糕)

  - 含奶油极易引起肥胖
  - 含糖量过高影响正餐

  十、烧烤类食品

  - 含大量“三苯四丙吡”(三大致癌物质之首)
  - 1只烤鸡腿=60支烟毒性
  - 导致蛋白质炭化变性(加重肾脏、肝脏负担)

2006年3月21日星期二

Google和百度、雅虎的站内搜索代码

  对于一个网站来说,使用搜索引擎来进行站内搜索往往比自己编写的站内搜索更高效,并且不占用网站服务器的资源,下面是我搜集到的几个主要搜索引擎(Google和百度、雅虎)的站内搜索代码,使用时只需要将代码里的"www.williamlong.info"替换成你的网址即可。

<!--Google站内搜索开始--><form method=get action="http://www.google.com/search"><input type=text name=q><input type=submit name=btnG value="Google 搜索"><input type=hidden name=ie value=GB2312><input type=hidden name=oe value=GB2312><input type=hidden name=hl value=zh-CN><input type=hidden name=domains value="www.williamlong.info"><input type=hidden name=sitesearch value="www.williamlong.info"></form><!--Google站内搜索结束-->

<!--Baidu站内搜索开始--><form action="http://www.baidu.com/baidu"><input type=text name=word><input type="submit" value="Baidu 搜索"><input name=tn type=hidden value="bds"><input name=cl type=hidden value="3"><input name=ct type=hidden value="2097152"><input name=si type=hidden value="www.williamlong.info"></form><!--Baidu站内搜索结束-->

<!--Yahoo站内搜索开始--><form action="http://www.yahoo.com.cn/search"><input type=text name="p"><input type="submit" value="Yahoo 搜索"><input type=hidden name=vs value="www.williamlong.info"></form><!--Yahoo站内搜索结束-->

  下面是Google和百度的Javascript版的站内搜索代码:

<!--Google站内搜索开始--><script type="text/javascript"> function googlesearch () {var wq=document.getElementsByName("wq")[0].value;var link="http://www.google.com/search?domains=www.williamlong.info&sitesearch=www.williamlong.info&q="+wq;window.open(link); }</script><input type="text" name="wq"/><input type="submit" onclick="javascript:googlesearch()" value="Google 搜索" /><!--Google站内搜索结束--><!--Baidu站内搜索开始--><script language="javascript">function baidusearch () {var wd=document.getElementsByName("wd")[0].value;var link="http://www.baidu.com/s?si=www.williamlong.info&cl=3&ct=2097152&tn=baidulocal&word="+wd;window.open(link); }</script><input type="text" name="wd"/><input type="submit" onclick="javascript:baidusearch()" value="Baidu 搜索" /><!--Baidu站内搜索结束-->

2006年3月20日星期一

贼喊捉贼-百度开通超级搜霸举报网站

  最近,百度又上演了一场荒唐的做秀闹剧-开通超级搜霸315举报网站。

  我之所以反感百度搜霸,是因为我自己的电脑就曾经中过百度的招,被偷偷地安装了百度超级搜霸,极大地影响了我的正常工作和学习,我费了好长时间才找到了卸载百度插件的方法

  百度超级搜霸是一款知名的流氓软件,在北京网络行业协会设立的“流氓软件”网络调查,20多万人投票抗议“流氓软件”,其中百度超级搜霸就“荣登”排行榜前十名。

  百度开发这种强制安装、难以卸载的“流氓软件”,目的其实只有一个,就是强奸用户的浏览器,让用户被迫访问百度的网站。这种做法让是所有正人君子所不耻的东西。

  然而更加荒谬的是,百度居然能够荒谬到上演了一场贼喊捉贼的闹剧来了,难道全体中国人都是白痴了吗?你自己开发的流氓软件,却让用户去你自己的网站去举报,这本身就是荒谬无比的,不过百度做出这样的怪异行径也是其拿手好戏了。

  因此大家如果遇到百度的流氓软件的骚扰,正确的方法是打315投诉热线向工商行政管理局或者消费者协会进行投诉,因为商业公司是受到工商行政管理局所管辖的,只有这样的投诉才能让流氓软件公司收敛一些。

  当然,光骂是不够的,我们也应该看到百度积极的一面,百度最近也将其流氓行径收敛了不少,比如以前在百度搜索“癌症”、“电脑”等热门关键字,要翻到第七八页才能得到正常的搜索结果,而前面的七八页全是赞助商出钱买的广告位,现在好像只有第一页有赞助商的链接了。

  相关新闻:百度开通搜霸315举报网站

  百度开通超级搜霸315举报网站近几年,互联网服务、软件等IT相关领域成为消费者投诉的热点。这不能不让人思考,如何才能让消费者少一些抱怨,增进与消费者之间的信任沟通?作为而这一产业链中的IT企业,又该做些什么,与IT消费者一起,共同塑造和谐相健康的互联网环境?

  据悉,全球最大中文搜索引擎百度将于3月15日消费者权益日正式开通超级搜霸315举报网站(http://bar.baidu.com/315)。用户一旦发现在不知情的情况下被安装了百度超级搜霸以及在使用过程中遇到的问题疑惑,都可以通过这个网站进行投诉和反馈。百度会将处理结果于网上公示。

  百度公司客户端负责人周品指出,我们明确要求合作伙伴,在向用户介绍超级搜霸时要有明确提示,并且说明产品的功能。同时该负责人也善意提醒用户,在安装软件时一定要仔细看清安装说明以后再进行操作,以免误安装不需要的软件。

  周品还告诉记者,百度公司非常尊重用户体验,反对任何强加民意的行为。如果用户发现自己的权益受到伤害可以通过超级搜霸315网站,通过合法途径保护自己的权益。百度将在第一时间内对用户提供的任何投诉问题进行及时处理。

  业内人士认为,百度在3.15此举是希望营造一个和谐健康的中文互联网环境,作为业界领导者,百度此举不仅给中文互联网业界作出表率,而且真正对中国网民予以理性关怀。

  相关新闻:网络行业协会公布十大流氓软件名单,令其整改

  在北京市网络行业协会设立的“流氓软件”网络调查专门网站上,网民举报帖已经达到3624条,有20多万人投票抗议“流氓软件”的恶行。其中多家著名企业发布的软件遭网民投诉,遭投诉的问题包括强制安装、逃避用户卸载、不经用户明确授权即收集私人信息等。网络行业协会对用户投诉的问题进行了技术分析,发现网民投诉的情况多数属实。

  网络行业协会秘书长王铁安表示,网络行业协会成员单位共同拟定了《软件产品行为安全服务规范》向全社会发布,由于一些企业发布的软件没有遵守软件编写规范,可能造成用户的私人信息泄漏,或存在其它安全隐患。他敦促那些被用户投诉的不规范软件提供商要尊重用户的意见,在8月15日前对不符合规范的软件进行整改。如果限期内整改没有完成,则将对其采取必要的处理措施。

  此外,在此次调查中,用户还投诉了一批“流氓网站”,网络行业协会也将加强管理监督整改。

  附:用户举报软件名单

序号 软件及网站名称 所属公司 厂商网址 存在问题
1 3721上网助手、地址栏搜索及网络实名
北京三七二一科技有限公司
www.3721.com 1、强制安装
2、浏览器劫持(添加用户不需要的按钮、ie地址菜单项中添加非法内容)
3、干扰其他软件运行
4、无法彻底卸载
2 淘宝网
阿里巴巴
www.taobao.com 强行弹出过多广告
3 ebay 易趣
ebay inc.
www.ebay.com.cn
1、强制安装
2、浏览器劫持(自动在ie中添加按钮和菜单)
3、无法卸载
4 dudu下载加速器
千橡公司
ddd.dudu.com 1、强制安装 2、诱导用户安装广告程序
3、无法彻底删除
5 中文上网
中国互联网络信息中心
www.cnnic.net.cn
1、强制安装 2、无法彻底卸载
6 青娱乐聊天软件(qyule)
青娱乐 锋力科技 青鸟科联
www.qyule.com
强制安装
7 很棒小秘书
很棒信息服务有限公司
www.henbang.net
1、强制安装 2、无法彻底卸载
8 百度搜霸、百度超级搜霸
百度
www.baidu.com
强制安装
9 一搜工具条
雅虎
toolbar.yisou.com 强制安装
10 网络猪、划词搜索
中搜在线
pig.zhongsou.com 1、强制安装 2、无法彻底卸载

2006年3月19日星期日

民国以来最黑暗的一天

  昨天是三月十八日,鲁迅称这一天为“民国以来最黑暗的一天”。

  1926年3月12日,冯玉祥国民军与奉军作战期间,两艘日本军舰护卫奉系军舰进入大沽口,并炮击国民军,守军死伤十余名。国民军开炮自卫还击,将日本军舰逐出大沽口。事后,日本认为国民军破坏了《辛丑条约》,与英、美、法、意、荷、比、西等8国公使,于16日向北洋军阀段祺瑞执政府发出最后通牒,提出拆除大沽口国防设施的要求,并限令48小时内答复,否则以武力解决。同时各国派军舰云集大沽口,用武力威胁北洋政府。

  1926年3月18日,为抗议帝国主义侵略,北京学生和民众约5000多人在天安门举行“反对八国最后通牒的国民大会”,大会结束后,游行队伍到铁狮子胡同段祺瑞执政府门前集会请愿,遭到执政府卫队和军警的屠杀,死亡47人,受伤200余人。这一天被鲁迅先生称为“民国以来最黑暗的一天”。

  不能遗忘的血写的历史

  三一八事件是一个永恒的历史事件,影响了包括鲁迅在内的整整一代知识分子,为什么“三一八”惨案会在这一代人的心中留下如此刻骨铭心、须臾不忘的记忆?周作人在一篇论及“五四与三一八”的短文里这样写道:“正如五四是代表了知识阶级对于北京之政府进攻的成功,三一八乃是代表北京政府对于知识阶级以及人民的反攻的开始,而这反攻却比当初进攻更为猛烈”,“在三一八那年之前,学生和教授在社会上似乎保有一种权威和地位,虽然政府讨厌他们,但不敢轻易动手”,“及至三一八那时,执政府卫队公然对了学生群众开排枪,这情形就不同了。对知识阶级的恐怖时代可以说就此开始了”。

  “三·一八惨案”发生后,尽管,当年的北洋政府是军阀政权,段其瑞本人也是著名军阀,其执政时期的独裁和乱相颇受病垢。然而,执政段祺瑞在知道政府卫队打死徒手请愿的学生之后,随即赶到现场,面对死者长跪不起,之后又处罚了凶手,并从此终生食素,以示忏悔。

  中国知识份子和媒体表现出前所未有的社会良知,用同仇敌忾来形容,一点也不过分。周作人、林语堂、朱自清、蒋梦麟、王世杰、闻一多、梁启超(刚刚动过手术、正在住院)、许士廉、高一涵、杨振声等着名知识份子纷纷谴责段祺瑞政府;刘半农作词、赵元任谱曲的哀歌唱遍京城;鲁迅先生更是激愤不已,为此而终止正常创作,就此惨案连续写了七篇檄文,名垂青史的悼文《纪念刘和珍君》便是其中之一。

  当时,诸多媒体加入谴责屠杀暴行的行列,如《语丝》、《国民新报》、《世界日报》、《清华周刊》、《晨报》、《现代评论》等,特别是邵飘萍主持的《京报》,大篇幅地连续地发表消息和评论,广泛而深入地报导“三·一八惨案”真相,在惨案发生后的12天内,就连续发表了113篇有关“三·一八惨案”的消息、评论、通电,《京报·副刊》也发表了有关文章103篇。

  惨案发生后,北京各高校和大学校长、教授也纷纷谴责段祺瑞政府的。时任北大校长的傅斯年在昆明见到对惨案负有直接责任的关麟征,傅斯年第一句话就是:“从前我们是朋友,可是现在我们是仇敌。学生就像我的孩子,你杀害了他们,我还能沈默吗?”1926年3月23日,北京各界人士、各社会团体、各学校齐聚北京大学大操场,为亡灵们举行万人公祭大会。北大代校长的蒋梦麟在会上沈痛地说:“我任校长,使人家子弟,社会国家之人材,同学之朋友,如此牺牲,而又无法避免与挽救,此心诚不知如何悲痛。”他说到这里竟潸然涕下,引得“全场学生相向而泣,门外皆闻哭声”。

  强大的民意压力也启动了半死的国会和司法,曾被讥为“花瓶”的国会也破天荒地召集非常会议,通过了屠杀首犯“应听候国民处分”的决议;京师地方检察厅对惨案进行了调查取证并发表正式档认定:“此次集会请愿宗旨尚属正当,又无不正侵害之行为,而卫队官兵遽行枪毙死伤多人,实有触犯刑律第三百十一条之重大嫌疑。”由此可见,当时中国,还多少有些议会政治和司法独立。最后,执政府的国务院总辞职,执政段祺瑞颁布“抚恤令”。

  尽管如此,也没有最终保住民心尽失的军阀政权。因为,对于一个政府来说,一旦向徒手的青年学生与平民百姓开了枪,不仅践踏了为政之德的最低底线,也越过了维护社会秩序的法治界限。正如周作人在《为三月十八日国务院残杀事件忠告国民军书》中所言:屠杀学生和平民的政府,“同情、信用与期望之损失是无可估量,也无法挽救的”。所以,在屠杀发生后不到一个月,段祺瑞政府就在遍布全国上下的抗议声中于1926年4月倒台。而国民党北伐之所以迅速成功,除了军事上获得苏联的大量支援之外,国民党相对于军阀政权在政治道义的优势,也是其取胜的重要原因之一。可以说,段祺瑞军阀政权的合法性资源,已经因“三·一八惨案”而丧失殆尽。

  总之,在发生“三·一八惨案”的1926年,中国虽然因军阀混战而乱相丛生,但那毕竟还是个有些许言论自由、议会政治和司法独立的时代,政府合法性的来源多少还有主权在民的影子,所以,践踏了最低的为政底线的政府暴行不可能畅通无阻,杀人者也不可能仍然大权在握且满世界招摇,并用各种理由来炫耀脸上的血污。

  (以上史料,请参见:付国涌《三·一八枪响之后》;吴言《历史上最黑暗的一天──“三·一八”惨案七十三周年祭》;江长仁编《“三·一八”惨案资料汇编》)。

  墨写的谎说,决掩不住血写的事实

  鲁迅先生于“三·一八”当天就在《无花的蔷薇之二》上写了这样的话:

  “如果中国还不至于灭亡,则已往的史实示教过我们,将来的事便要大出于屠杀者的意料之外——

  这不是一件事的结束,是一件事的开头。

  墨写的谎说,决掩不住血写的事实。

  血债必须用同物偿还。拖欠得愈久,就要付更大的利息!

  实弹打出来的却是青年的血。血不但不掩于墨写的谎语,不醉于墨写的挽歌;威力也压它不住,因为它已经骗不过,打不死了。”

  The blood that lies upon the square cannot be washed away

2006年3月18日星期六

西冲一日游

  昨天我们的新软件发版了,研发决定采用了户外团队活动的形式进行庆祝,希望我们在紧张的工作之余,能放松心情,呼吸户外的新鲜空气,感受大自然的清新氛围。

  于是今天一早,我们就从深圳乘车出发了。

  首先是去坝光出海捕鱼。

  坝光是深圳东南边上大亚湾畔的一个小村庄,导游小姐带我们参观了坝光村的原生农家风光。

  农村的建筑的确很奇怪啊。

  农家的小孩子则在地上玩耍。

  后山有个银叶树长的非常特别。

  我们开始出海捕鱼了。

  捕鱼使用一种很细的鱼网来粘鱼。

  鱼儿感到很郁闷。

  我们的战利品。

  出海捕鱼结束后,我们就来到了下一个目的地:西冲。

  西冲大鹏半岛的边缘,南面临海,三面环山,中间地势较为平缓,是一处生态环境良好的滨海未开发地区。

  西冲的海水,清澈而美丽。

  西冲海滩也是深圳最美的海滩之一,这里没有如织的游人,没有什么污染。

  海滩上的海积海蚀地貌给人印象深刻。

  我们开始烧烤。

  坝光捕来的鱼壮烈牺牲。

  有意思的是,在海滩上我们发现有剧组在拍摄小电影。

  不过演员的演技可实在夸张啊。

  天快黑的时候,我们又去水头吃海鲜,吃到八点半才往回赶,十点钟终于到家了。

  总结一下,西冲的海滩的确非常不多,面积比东冲要大的多,西冲到东冲的海岸线穿越也是非常刺激的户外旅行,因此,西冲到东冲这段海岸线是深圳值得一玩的海岸之一。

2006年3月17日星期五

“按摩乳”和“奶猪”的博客门事件

  前些天的事件,让我彻底改变了对中国某些记者的看法。我不停地问自己?他们想要做什么?他们有良心吗?他们为什么要愚弄善良的人民?我感觉我实在无法压抑住我内心的愤怒。那种被欺骗和愚弄而产生的愤怒。

  对于一个人的所作所为,我一直在思考一个尺度,就是做出什么样的事情会跨越我的心理底线,现在我明白了,一个人如果将一个民族的痛苦当做自己取乐的玩笑、或者出名的工具、更甚至是捞取政治资本的手段,那么这种人的行为就跨过了我的底线。

  老大不小的人了,还开这种愚蠢而幼稚的玩笑,我实在是无法理解,什么样的玩笑可以开,什么样的玩笑不能开,难道他们分辨不出来吗?

  道不同,不相为谋。

  更新:这篇日志中部分文字我进行了删除和修订,我写那这文章的时候,是因为对王小峰有所不满,内心也对“博客门事件”充满了怒火,不过现在想想,我那时的想法有些偏激了,人非圣贤,孰能无过,我后来也一直都在看他的“不许联想”,这么长时间看下来,感觉其实他的文章写的也很不错的,也是个不错的人,所以我还是将原文中的攻击性文字进行了删除和修订。

博客

  参考文章:“中国博客门”耍了西方媒体

  中新网3月12日电 新加坡联合早报今天发表文章说,博客在中文网里越来越流行了。经验告诉我们,某事物一旦流行起来,就会引起多方的关注。而来自不同方面的“眼睛”,在“关注”了博客之后,都会有不同的看法,而所作出的反应也是不一样的。

  也许是因为中国大陆的传统媒体过于“正儿八经”,所以颇为“离经叛道”的大陆电子媒体,如网站、论坛、BBS、博客等,就成为了外界(主要是西方媒体)观察中国舆论环境的晴雨表。

  最近,西方媒体“关注”两个中国博客后的“即时反应”,就很能说明这个问题。

  三八妇女节当天,两个很受欢迎的中国博客——《三联生活周刊》记者王晓峰的“按摩乳”和中国博客圈中的著名娱乐记者袁蕾的“奶猪”,突然变成空白页,上面只能看到一行字:“因为众所周知不可抗拒的原因,本博客暂时关闭。”

  久负盛名、信誉卓著的西方通讯社路透社的记者,获悉此事后,眼睛登时为之一亮,在最短的时间内向全世界发布了新闻报道:“中国又有两个言辞大胆的博客‘按摩乳’和‘奶猪’被政府下令关闭,这是中国在控制整肃互联网的新一轮行动,尤其目前两会期间。”看到路透社的报道后,西方各大新闻媒体如BBC、“美国之音”等,也都一窝蜂地跟进报道。一向标榜以保护记者话语权为己任的“记者无疆界”组织,自然也“当仁不让”,迅速向全球发出新闻稿件。

  这个消息传开时,我正巧也在网上,而且正在和另一个“言辞大胆”的中国博客的主人聊天。他得知“按摩乳”和“奶猪”被封后,忿忿不平地对我说:“要封干嘛不封我的,他们那些个言论算什么激烈?”

  就在我俩在“极其友善的气氛中”,为中国有关当局封禁博客的标准问题,“进行了极具建设性的意见交流”之后,“按摩乳”和“奶猪”突然又“死而复生”了。原来,这两个博客并没有得到有关当局的“垂青”,“按摩乳”和“奶猪”的“突然死亡”,竟然是王晓峰和袁蕾把三八妇女节当作四一愚人节,开的一个超级国际大玩笑。

  事后,王晓峰和袁蕾在博客上,向网友们说明了真相,并郑重道歉。不过,他们显然不愿放过被嘲弄的西方媒体。王晓峰后来接受德国电台“德国之声”记者访问时说:“路透社并没有找我查证此事。”

  天呀!堂堂的英国百年老字号通讯社路透社,居然连“查证新闻事实”这个新闻同业信守不渝的基本功都没有做,就向全世界发布了新闻--当然是假新闻。

  显而易见,路透社的记者和编辑是在看到“按摩乳”和“奶猪”空白页上面的“众所周知不可抗拒的原因”,就理所当然地认定这是中国政府的封网行为,连查证都懒得查证,就把新闻发出去了。

  文章说,在这个“中国博客门”(China Blog Gate)丑闻事件中,首当其冲的当然是“始作俑者”的路透社,而跟着屁股后头的其他西方新闻媒体,如BBC、美国之音、《新闻周刊》等,免不了也都成了被“城门火”“殃及”的“池鱼”。可是,他们也不值得同情,谁叫他们不去向当事人查证呢?

  文章认为,长期以来,西方媒体在报道中国大陆新闻时,一直都有种与生俱来的“傲慢与偏见”,见到黑影就怀疑是魔鬼,见到人事变动就猜测是权力斗争。这种习惯于把报道中国新闻事件上纲上线政治化的作风再不改变,以后真的不知道他们的中国新闻可信度有多高了。(张从兴)
 

  参考文章:“按摩乳事件”对中国知识界的警醒

  在“3·15”国际消费者权益保护日,一则由中国新闻记者在博客上所开玩笑引起的事件演变成一场新闻界丑闻。据这一天《新京报》引述新加坡《联合早报》的消息,一个星期之前,在互联网界颇具名声的两个中国新闻记者所创立的博客——《三联生活周刊》记者王晓峰的“按摩乳”和著名娱乐记者袁蕾的“奶猪”——突然只留下一行字:“因为众所周知不可抗拒的原因,本博客暂时关闭。”

  于是,西方一些主流媒体和有关组织立即报道了此事,并称其是中国“控制整肃互联网的新一轮行动”,但事实上,这两个博客“被关闭”只是王晓峰和袁蕾的恶作剧——在看到有关报道之后,他们马上道歉并说明了真相,同时称西方媒体在报道前并未找他们核实情况。《联合早报》将西方新闻界所作的这一假新闻称为“中国博客门”丑闻事件。

  由于此事于公于私都涉及很重大的利益问题——于公来说涉及中国目前的新闻自由和舆论环境,于私涉及到这两个著名博客的生存和它无数读者与拥趸的情感利益,因此,此事一出,立即在社会各界引起了巨大反响。据笔者事后所知,在西方媒体报道了这一“新闻”后,国内一些颇具影响的公共知识分子和律师朋友也纷纷站出来替两个博客的主人说话,并呼吁有关部门尊重知识分子的言论自由。

  现在看来,两位博客主人的玩笑所引起的这场风波,真的有点象传说中那个“狼来了”的故事,本来没有任何组织关闭其博客,博客的主人却开了一个国际玩笑,让人们误以为这是言论不自由环境下的结果。我在想,如果哪一天这两个博客真的突然因为某些原因被违法关闭了,还有谁会去替他们维护权益呢?

  有关这事的对与错,舆论界其实也出现了至少两种立场不一的观点,一种认为博客主人太不严肃,玩笑开大了,另一种观点则认为,在电子化条件下,博客主人完全有权在自己的“一亩三分地”上自由“耕作”,只要不违背法律的禁止性规定,开个玩笑没什么。

  对于这件事情,我无意过多地批评王晓峰和袁蕾,从某种意义上讲,这两个博客本身的生存与否,其意义相对来说已经变得很渺小,更多的是,我们应该从此事的表象深入到其深层次看问题。在我看来,此事带给了中国知识界很多警醒和启示。

  不错,博客是个人在互联网世界开设的虚拟个人空间,从法理上属于电子化环境下的私权空间,只要不违背法律的规定,博客主人在自己的博客上开个玩笑,搞点小动作,都无可厚非。但问题是,“按摩乳”和“奶猪”不是一般的博客,而是在中文互联网界甚至整个互联网界都赫赫有名,比如“按摩乳”就曾获得过在德国举办的一次世界性博客大赛奖项。从某种程度上讲,这两个博客被人们看作了中国公民以博客方式组织虚拟私权空间和行使言论自由的代表,与此相关的是,这两个博客的代表——王晓峰和袁蕾——也因为其博客的知名度而成为公众人物。

  众所周知,由于广泛的传播度和号召力,公众人物的一举一动一言一行,都足以成为一种舆论态势,或者深刻地影响到公共利益。以“按摩乳”和“奶猪”为例,正是因为他们在互联网界的广泛知名度,一旦传出其被关闭的消息,这个消息就会以几何递增的形式极大地影响到相关人群的心态,并促成人们形成一种判断。从另一个角度而言,博客的广泛知名度也使其拥有了比普通博客更高的公信力,西方媒体对其玩笑深信不疑并立即作为新闻发布,也有这方面的原因。

  再换一个角度看,“按摩乳”和“奶猪”之所以出名,除了其自身建设得力的原因外,恐怕也和其新闻记者的身份不无关系。《三联生活周刊》是国内著名的杂志,影响力大,作为该刊记者的王晓峰,其公信力也相对较高,袁蕾是著名的娱乐记者,以娱乐新闻所具有的传播效应看,它也的确能为袁氏带来巨大的社会声誉。

  如此看来,作为著名博客主任兼知名记者身份的王、袁二位,这次的玩笑确实开大了,至今为止,我不认为他们有恶意和不良动机,但客观上,他们的玩笑却因其知名度而变成了一场实实在在的舆论危机。这个玩笑一开出,不仅伤害了广大的博客迷的感情和心情,更为极少数敌视中国的媒体提供了口实,他们可以借此恶意攻击中国。

  这一事件的教训告诉我们,作为公众人物,特别是知识界的公众人物,言行都应该高度谨慎,因为他们所左右的,不止是自己个人和少数人的情绪和观点,更牵动大众的心态。现代社会的文明标志之一,就是诚信,而诚信要求公众人物要尽量少开不适当的玩笑,特别是公开面对不特定多数人群并以互联网作为工具的玩笑。 (陈杰人)

2006年3月15日星期三

Eclipse和JBuilder

  这几天可真累,都是因为电信的那个项目

  因为广东电信要赶时间搞演示,所以今天就加班和电信的测试公司测试SOAP通讯接口,不知道怎么回事,用Microsoft SOAP Toolkit建立的Web服务,电信那里总说有问题,我用XMLSPY打开WSDL文档的确也出一个错误,但是使用微软的工具测试却可以通讯成功,真奇怪了。

  后来和电信打听,他们使用JAVA做的SOAP服务端,看来电信是JAVA帮的,我这个老微软帮也该换换口味了。

  我本来是使用JBuilder开发JAVA的,但后来从同事那里知道现在他们都不用JBuilder了,改用Eclipse了,于是我也安装了一下Eclipse。

  初次使用Eclipse,把我吓了一跳,没想到JAVA也能有这个COOL的IDE开发环境,而且是绿色的,不用安装,更绝的是,其竟然是免费开源的,源代码都开放,插件众多,难怪公司要换用Eclipse来进行开发,光软件购买就省了一大笔钱啊。

  粗粗用了一下,感觉Eclipse的确比JBuilder要好用的多,越用越喜欢这个工具,难怪那么多骨灰级的程序员都转到Eclipse了。这样下去,Borland的王牌产品恐怕就快完蛋了吧。

  可是调试还是很累,我对SOAP也不是很熟悉,电信的人也不肯多帮我们忙,好像他们很牛B似的,连一些示例代码也不给我们,晚上干了大半天,感觉效率也不很高。

2006年3月13日星期一

htaccess文件使用大全

  Apache系统中的.htaccess文件(或者”分布式配置文件”提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

  子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

  .htaccess必须以ASCII模式上传,最好将其权限设置为644。

  错误文档的定位

  常用的客户端请求错误返回代码:
  401 Authorization Required
  403 Forbidden
  404 Not Found
  405 Method Not Allowed
  408 Request Timed Out
  411 Content Length Required
  412 Precondition Failed
  413 Request Entity Too Long
  414 Request URI Too Long
  415 Unsupported Media Type

  常见的服务器错误返回代码:
  500 Internal Server Error

  用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:

  ErrorDocument 404 /errors/notfound.html
  ErrorDocument 500 /errors/internalerror.html

  一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:

  ErrorDocument 错误代码 /目录名/文件名.扩展名

  如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:

  ErrorDocument 401 “你没有权限访问该页面,请放弃!”

  文档访问的密码保护

  要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:

  zheng:y4E7Ep8e7EYV

  这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

  有了授权用户文档,可以在.htaccess中加入如下指令了:

  AuthUserFile .htpasswd的服务器目录
  AuthGroupFile /dev/null (需要授权访问的目录)
  AuthName EnterPassword
  AuthType Basic (授权类型)

  require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user)

  注,括号部分为学习时候自己添加的注释

  拒绝来自某个IP的访问

  如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。

  例如:

  order allow,deny
  deny from 210.10.56.32
  deny from 219.5.45.
  allow from all

  第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255

  想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。

  保护.htaccess文档

  在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:

  order allow,deny
  deny from all

  URL转向

  我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:

  Redirect /旧目录/旧文档名 新文档的地址

  或者整个目录的转向:

  Redirect 旧目录 新目录

  改变缺省的首页文件

  一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:

  DirectoryIndex 新的缺省文件名

  也可以列出多个,顺序表明它们之间的优先级别,例如:

  DirectoryIndex filename.html index.cgi index.pl default.htm

  防止盗链

  如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。

  所需要的指令如下:

  RewriteEngine on
  RewriteCond %{ HTTP_REFERER } !^$
  RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
  RewriteRule .(gif&line;jpg)$ - [F]

  如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:

  RewriteEngine on
  RewriteCond %{ HTTP_REFERER } !^$
  RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
  RewriteRule .(gif&line;jpg)$ http://www.mydomain.com/替代图片文件名 [R,L]
 

2006年3月12日星期日

闲聊名人博客和锵锵三人行

  我很喜欢凤凰台的窦文涛的“锵锵三人行”的节目。

  “锵锵三人行”的节目和网络上的播客很像,不同之处是一个是在电视上播放,一个是在网络上。

  可惜的是,“锵锵三人行”的节目时间太晚,经常看的话会影响我正常睡眠休息,好在凤凰网提供了网上的免费音频版本的“锵锵三人行”,让我可以随时都能听到节目,即使电视上错过了,在网络上还可以补听回来。

  今天听了好几段,比较感兴趣的是今年1月25日的锵锵三人行的节目,内容是“闲聊博客”,主要聊的是新浪的名人博客,其中一个是美女主持人李静在聊她在新浪的名人博客,还透露了新浪的公关策略,说有一天新浪员工打电话给她,说送她一块地,可以想写什么就写什么,也不用花钱,美女李静就上当了,跑去给新浪名人博客充数了。

  其实新浪的这起策划还是很成功的,每个方面都有所得:“名人”们得到得是网络上的名气,让他们在网络圈内出名了,新浪抓住了很多“名人”的心里特点,出名就象赚钱一样,永远不会有尽头的,每个人都希望有更大的名气。新浪网则不花一分钱获得了大量的流量和人气,对于网站来说,流量就是金钱,而获得这些流量却不用花钱。

  许子东则对“名人博客”打了一个很形象的比喻“名人以为自己上博客是在嫖娼,其实他们是在卖淫”,非常精辟。

  新浪名人博客为什么这么火,看一看名人博客的点击排行就可以知道原因,排名第一的是徐静蕾,遥遥领先,创下了千万点击的奇迹,排在后面的还有王小丫、李宇春、张靓颖、柴静、伊能静、李冰冰、范冰冰、何洁、李静等等,可以说美女占据了排行榜的绝对优势,而大众们访问她们博客的直接原因就是为了意淫。

  博客其实也叫私人日记,但不同的是,博客是公开的,正是因为私人日记的公开化,引起了大众的群体性意淫,因为人们直接窥视“私人日记”,看客们可以从偷窥中获得很大快感,特别是偷窥美女的私人日记。徐静蕾的点击多,正是因为她的脱俗清纯的形象是最佳的意淫对象。

  人类一切与性有关的行为其出发点都是欲望。意淫与性爱都是人们的欲望,是想象与实际的区别。意淫为多数人所不齿,但同时亦是多数人的通病。

  看客是永远乐衷于在偷窥和意淫中获得快感。名人们为了博得更多眼球经济,不得不费尽心机,制造更多的绯闻来不断寻求新的卖点,以期网络更多眼球。纵观很多所谓的名人博客,纯粹只是自恋般的意淫而已,博客为其提供免费的作秀场所,靠卖弄风骚强占眼球。事实上早已偏离了博客精神的本意……

  草根博客为了获得名人博客相同的点击量,往往需要付出更多东西,视频舞女木木曾经在自己的博客上写了一篇她和徐静蕾博客的对比:

  1. 她是主流的,我是非主流的;

  2. 她是有头有脸的,我是无头无脸的;

  3. 她的文字有些糟糕,我的思想有些糟糕,但我们都是严肃的;

  4. 她的访问量是无法超越的,所以,要作为榜样都很难;我的访问量是可以超越的,因而也就更可具现实意思;

  5. 她是名人努力着写博,我是普通人努力着写博出名;

  6. 和徐博客做链接的基本上都是光明正大的,和我做链接的十有八九是偷偷摸摸的;

  7. 但,意淫徐博客的一般都是偷偷摸摸的,而在我的博客里大家却可以正大光明地发表着意淫的言论;

  8. 我可以号召大家向她学习,但她却不能号召大家向我学习;

  9. 她可以吸引所有的网民去浏览她的博客,却吸引不了菜市场杀猪卖肉的;我吸引不了所有的网民,却可以让那些杀猪卖肉的也来看我的博客,并顺便看看她的博客;

  10.她是演员中写博客最好的,如果有一天我也能去拍电影,我的票房成绩同样也会让她无法想象。

  网络难道果真进入了一个意淫时代?一帮强奸犯在台上表演自己的故事,一大帮意淫者在台下看着,这种风景越看越让人怕。

  当下的网络博客所呈现的这种社会现象,是有深刻的社会原由的,这是长期以来官方刻意的愚民政策所引发的病态社会时代的来临。我们每一个处身其中的成年人都有深切的感受。很长时间以来,我们已经泯灭了是非的界限,甚至不知道究竟何者为是,何者为非。我们甚至不知道什么样的人生,什么样的生活是有意义的。我们也不知道意义是个什么东西。我们只是在依靠本能生活,我们的精神家园一片荒芜。

2006年3月11日星期六

Google服务和软件大全

  Google这个公司现在已经是“家大业大”了,他们总是隔三岔五地推出一些新鲜的服务,让业界跟着也兴奋一把。不过历年来Google所发展出来的服务和软件实在太多了,究竟他们已经有了什么服务?现在就来看看吧。

  Add to Google

  这是一个提供网页信息的站点,主要的功能是把自己的主页介绍给Google让他收录,而时间上较长,起码一两个月才会被Google收录,但是一旦收了你的主页,知名度会更快地上升。

  Blogger

  Google提供的Blog服务,现在已经有中文版本了,大家可以上去安个家,把地址写到本文评论让大家去浏览。

  Froogle

  这是一个专业的引擎,可以输入你想要购买的东西,然后得到符合关键词的结果出来,可以比较一下各个购物网站不同的价格,挑选最合适的地方进行购买。

  Gmail

  Gmail是是Google提供的当前最流行的免费邮件服务,提供了超过2GB的储存空间。

  Google AdSense

  Google提供的广告服务,你是否遇到有不知来源的IP经常恶意点击你的广告,而你无法知道IP所以无法禁止,你是否想知道你的广告在哪个或者哪些页面点击率最高,而又不受渠道数量的限制,它主要针对Google Adsense的规则,在不违反规则的前提下为用户提供及时详细的广告点击统计信息。

  Google AdWords

  Google提供给商家的特殊广告站点,只要有人点击这里就会按一定规则向商家收费,算是网络上的分类广告。

  Google Alerts

  这是一个新闻定制站点,可以通过邮箱定制你需要的内容,然后得到相关的讯息。

  Google Analytics

  Google推出的免费提供的网站统计服务,只需要简单注册,即可帮助站长分析自己的站点情况,而且里面的内容非常详细,不光小网站有用,大网站更是可以作为一个参考的指标。

  Google Answers

  Google的问答站点,可以回答你很多不知道的问题,类似的还有百度出的百度知道,现在这个站点开始进入收费模式,你可以悬赏进行问题答案的购买。

  Google Base

  这个服务相对于Google其它服务的专业化,或许显得比较杂乱,里面也是可以让我们提交不同的信息给Google,让它出现在Google的搜索里面。

  Google Blog Search

  这是一个针对Google博客的搜索服务,专门收集其中的海量信息。

  Google Book Search

  Google的书籍搜索服务,其实也是Google引擎的一个小延伸而已,不过在这里搜索到的结果比较专业和集中。

  Google Bookmarks

  Google的在线网络书签服务,整合了Google工具条4.0和Google搜索历史,此服务还处于beta测试阶段,目前看到的Google Bookmarks还没有共享功能,类似个人网上收藏夹。

  Google Calendar

  Google的日历服务,可以很方便地管理自己生活上的行程安排,例如参加会议的时间、看病的预约时间、约会时间、吃饭订餐时间等等。可以将一个人的所有行程都管理起来。

  Google Catalogs

  Google做的邮购搜索服务,对于国人来说好象用处并不是特别地大。

  Google Code

  Google用来推广及发展开源软件的一个服务,一个适合程序员的源代码公开站点。

  Google Code Search

  Google代码搜索可以用来搜索各种函数的定义以及相关的示例代码,还可以直接使用普通的表达式搜索以获得更精确的结果。

  Google Compute

  Google的网格计算,可以将一些超大规模的计算量分散到全球不同国家地区的电脑上,以尽快得到结果,这是些有益全球的计算,希望有电脑的朋友都参加。

  Google Desktop

  这是一个放置在桌面上的工具条,在这个工具条里可提供新闻,天气,Email等小程序,了解最新的信息。

  Google Directory

  Goolge制作的超大型人工分类目录,让网页根据重要性来排列。目录搜索服务可满足那些想要浏览某特定主题下相关信息的用户。

  Google Earth

  这项服务提供了地球上大部分地区的卫星图片查询,尤其是大城市的图片更加地多,让你如宇航员一般身临其境,足不出户也可了解世界各地。

  Google Groups

  Google提供的群组服务。利用它你可以创建邮件列表、阅读新闻或者是和志同道合的用户分享你感兴趣的东西。

  Google Homepage

  是Google提供的主页服务,你可以定制它,它提供了天气、新闻、占卜等各种各样的服务。

  Google Image Search

  Google的图片搜索,几乎是Google最早的服务了,这是它的图片搜索页面,相信大家都用过吧,图片搜索的精确度还是不错的。

  Google Labs

  Google实验室的一些服务链接,从这里可以看到它们又有什么天才的发明。

  Google Local

  Google本地搜索,通过这一服务,用户可以使用关键字搜索在特定的城市查找某一类型的公司,并在电子地图上显示这些公司的具体位置。这项服务现在有了中国版本

  Google Maps

  Google地图搜索服务,让你浏览到世界各地的地图、公路等信息,比较上面提到的卫星地图来说,比较传统。

  Google Mobile

  Google手机上网用户的服务,只要手机能连上这外网站,即可象用PC一样搜索图片、关键字等信息。

  Google Movie Showtimes

  Google提供的电影上映时间搜索服务,只要输入一个地方的邮政编码或地址,就可以搜索到当地的电影院及电影的上映时间。

  Google News

  Google新闻站点,将最新的新闻呈现在大家的眼前,上面的所有新闻都是由Google特定的电脑自动聚合的。

  Google Notebook

  类似一个网摘工具,以插件的形式安装于浏览器,记录你在浏览网页时看到的有用的信息。

  Google Page

  Google推出的免费个人主页服务,用户可以在这里获得一个100M大小的免费主页空间。

  Google Reader

  Google的在线RSS阅读器,Reader依靠RSS和Atom技术,可帮助用户及时获得信息,用户不必自己检查更新喜欢的站点,Google Reader可以帮你。

  Google Ridefinder

  美国12个城市的公交车和出租车的相关搜索。

  Google Scholar

  学术文章搜索引擎,高年级学生的必备,尤其一些经常需要撰写一些论文的朋友。

  Google Send to Phone

  利用网络发送手机短信的服务,感觉上没什么特别。

  Google Sitemap

  Google的Sitemaps计划,旨在对网站信息搜索进行加速,增强索引能力。Google称:“这种协作搜索系统将进一步提高覆盖和刷新速度,使用户使用Google索此功能实现最优化。”Google呼吁网站管理员在网站服务器中放置Sitemaps格式的文件。这样,Google的搜索引擎就可以看到那些网页在网站内,那些网页内容被修改了。

  Google SMS

  GOOGLE SMS服务,是通过SMS查找特定信息的一项技术。它可以提供驾车服务,在无线产品中支持SMS。

  Google Suggest

  这是一个猜测你意图的测试站,当用户关键词搜索框中输入文字时,下拉清单将显示候补搜索单词或短语一览。还将显示找到的各单词或短语的网页数。从候补中选择单词或短语便可搜索。

  Google Talk

  Google推出的即时在线聊天工具,当时挺火爆的,业内很多人都说能跟各大即时聊天工具一拼,可是现在没多少个人用了,影响较低。

  Google Toolbar

  Google的搜索工具条,上面有很多实用功能,搜索、拦截弹出窗口、查看网页PR值等等一大堆。

  Google Trends

  Google趋势服务,可以得到人们对于不同事物的关注程度,Google通过分析全球的搜索结果,分析处某一搜索关键词在Google被搜索的频率和相关统计数据。

  Google Video

  这又是一个新的尝试,Google推出的视频搜索内容丰富,不过国内用户好象会受到一定的限制。

  Google Web Accelerator

  可以加速网页的载入,尤其是对付一些我们网络访问较慢的外国网站更是好用

  Google Web Search

  Google网站默认的搜索服务。

  Google Webmasters

  Google网站管理员中心,提供了一系列网站管理员常用的功能列表,包括“提交网站”,“Sitemaps”,“支持论坛”等等。

  Hello

  Hello即时聊天工具,是一个极小的即时通信客户端,它和Google的看图软件Picasa一起工作,能让你和亲人好友分享图片。

  Picasa

  超强的图片管理显示的软件,得益于其高效的图片管理模式,我们可将电脑里所有的图片都让它归类,分析。它现在已是免费软件,大家可以让ACDSee下岗了。

2006年3月10日星期五

Z-Blog走到了十字路口

  Z-Blog程序目前似乎走到了一个十字路口。

  昨天,消失了一个多月的zx终于出现了,并透露有意让别人开发Zblog的想法,Aetheripang都对其表示不理解。我看了以后也深有感慨。

  我是2004年10月开始写Blog的,当时在博客中国申请了个地址就开始写了,在那里忍耐了半年时间终于在忍无可忍的情况下将我的Blog迁移到新的网址(国外免费虚拟主机)和域名(就是现在的域名),因为国外的虚拟主机只支持PHP,所以当时换的是另外一个国人用PHP和MYSQL开发的7LOG系统,可是那个免费的虚拟主机上挂了几百个免费用户,速度慢,而且不知道哪个用户的页面触怒了天条,龙颜大怒,5月份这个免费主机的IP竟然被封了,无奈之下,我只好寻找其他的主机商,但老是因为主机不兼容中文而头疼最后只好花美元购买了一个美国的虚拟主机,可惜美国主机从国内访问速度太慢,而且流量限制的厉害,并且7LOG的作者停止开发了,我于是又把目光转移到国内的虚拟主机,国内主机都是ASP的,因此我还必须找一个ASP版本的Blog程序,我于是找啊找,就找到了Z-Blog,那时候的Z-Blog功能还不完善,而且和我自己的需求有一些差距,好在Z-Blog比较好修改,因此我就花了一天时间将Z-Blog 1.2 SP3进行了修改并将7LOG迁移到ZBLOG系统下,整个迁移工作相当成功,其生成的URL地址竟然和7LOG的地址一模一样,我很满意。这时候zx和我有一些接触,并了解了一些我提出关于模板和静态话方面的需求,于是在8月份推出了Z-Blog的一个里程碑版本Z-Blog 1.4,这个版本在代码上变化非常大,并在模板方面增加了大量功能,可维护性有了一个巨大的飞跃,只需要增加了几十行代码就可以完全实现静态版本,之后Z-Blog还开始支持插件和XML-RPC,功能就更完善了。

  在我使用Z-Blog的过程中,我感觉这个Blog程序是单用户Blog中最优秀的,因为其结构很好,并且支持静态HTML输出,很多人觉得其他动态ASP Blog也很好,其实一个问题就可以问倒他们了:“你的Blog支持每天2万个以上的IP访问吗?”,答案是否定的,动态ASP+ACCESS技术不可能支持那么大的访问量,只有支持静态HTML的Blog才可能支持,这也是我选择Z-Blog的一个重要理由。

  当然,zx要是放弃这么有前途的Z-Blog程序实在是难以理解,不过我想,zx可能是开发太累了,一个人维护这么多代码的确也是很辛苦,要是能有类似WordPress那样的开发模式就简单多了,主要开发人员只要开发WordPress内核,而其他爱好者开发的成百上千个插件可以很轻松地嵌入到WordPress系统中,实现五花八门的功能,那多好啊。WordPress也正是因为拥有丰富的插件和模板才会成为PHP Blog中的霸主。当然,那种插件模式实现起来也要费一番功夫,可是一旦实现了,那么以后Z-Blog的开发就相对来说容易多了。

  希望zx不要放弃,目前虽然有一些困难,但困难总会克服的,这里有众多的Z-BLog的用户支持你,未来一定会更好。

2006年3月9日星期四

Z-Blog转换到Blogbus的程序

  今天看到Blogbus提供了一个搬家服务,可以把日志从其他Blog迁移过来,我测试了一下,没有什么用。

  其实我还是很喜欢Blogbus这个服务商的,其Blog使用的大概是Plog搭建的,还是比较专业的,特别是提供了Blog导入导出功能,可惜其Movable Type格式导入一直不成功,不知道是怎么回事。

  我研究了一下Blogbus提供的另外一种XML导入方式,发现和Movable Type格式比较类似,因此我就将以前写的Z-Blog到Movable Type导出的代码修改了一下,因为时间挺匆忙,只导出了摘要和正文,评论没有导出和引用。另外XML的语法也太严格了,导的时候老出错,解析不了XML文件,后来我干脆将某些特殊字符全替换了,估计文本格式可能会有问题。

  这个转换插件提供下载,在此处下载:http://www.williamlong.info/download/blogbus.zip

  解压缩到Z-Blog的PLUGIN目录下,在插件管理里运行即可。

  最终转换后的显示效果参见这个地址:http://williamlong.blogbus.com/

  不过,我自己在转换过程中也发现很多另人郁闷的地方,导入速度极慢,不知道Blogbus用的是啥服务器,更绝的是Blogbus在导入过程中还会自动删除文章,我四百多篇日志,结果有一百多篇就凭空消失了,另外Blogbus还有关键字屏蔽功能,最另人郁闷的地方是其文件重建速度慢的惊人,我点完重建链接后,足足等了十多分钟才重建结束。不知道那些在Blogbus上写作的人是怎么忍受这一切的。

2006年3月8日星期三

安妮宝贝和亦舒

  今天是三八节,恰好看到了一篇关于安妮宝贝的三八文章。

  这篇百度贴吧亦舒吧里的文章(见附录)不知道是谁写的,是攻击安妮宝贝的,整篇文章就是说安妮宝贝不如亦舒小资云云,本来说这些也很无聊,但是这篇文章太恶毒了,因此我打算替安妮宝贝说几句。

  很久以前我曾经很喜欢安妮宝贝的文章,在一九九九年的时候我就给当时还没有出名的安妮宝贝做了一个文集,因为那时我的确很喜欢看她的文章,她的文章触动了我的内心,让我回忆起我的往事。

  安妮宝贝是一个很奇特的女作家,往往被和她一样孤寂的人所喜欢。在我的阅读体验中,她是游离的一条鱼,游走在寂寞的深海。她的文字往往浸含了冰冷和绝望,那些破碎的、颓废的、绽放的都是她眼中的生活,但也是一个真实的世界。

  一个无助的女子在漂泊之中一直抒写着生命中漫无止境的寒冷和孤独。爱情与生命, 告别与死亡,这是安妮作品永远的主题。

  安妮宝贝的小说只有黑暗。或者是半明半暗的灰色。即使偶有亮光,明亮的阳光也像生活一样让人感觉局促。安妮宝贝隐藏在黑暗中。

安妮宝贝的照片

  后来,随着时间的推移,我的生活也发生了巨大的变化,现在读安妮宝贝的文章已经没有什么感觉了,而这时候我发现安妮宝贝似乎热起来了,我给安妮宝贝建立的文集也每天都有大量人来访问。

  虽然如此,当看到有人这样攻击安妮宝贝,我也感觉不爽,附录的这篇批评文章充斥了低级的人身攻击,除了显示作者本身极低的素质以外,说明不了任何问题,讨论这种问题有意义吗?是小资怎样,不是又怎样?讨论这样的问题多么空虚无聊啊。

  对于安妮宝贝,我觉得大家应该报以宽容的态度,纵然她的文字灰色的东西很多,但不可否认她是很有文采的,也有很多人喜欢她的文字,不喜欢她的人,完全可以不看她的文章,而采取人身攻击的方式来表达自己的意见,固然侮辱了别人,但同时损害了自己的形象,贬低了自己的名声,“人身攻击”本来是一柄双刃剑,用来砍别人的时候,也同时砍了自己,人身攻击给自己带来的名誉损失,往往比给别人造成的名誉损失更大,是一笔得不偿失的买卖。所以,对于那些乐于搞人身攻击的人来说,在攻击他人之前,请先净化一下自己的心灵吧。

  附录:区分亦舒与安妮宝贝, 真小资与伪小资

  人家都说,如果讨厌一个人,最好是不要理他,离他远远的,讨厌一个人却又要去了解一个人,如果不是想把这个人干掉,就是有自虐倾向。我讨厌安妮宝贝,不是因为讨厌才去了解,是因为了解了才讨厌。她的名声在这一两年挺大,就看了她写的书。不看不知道,一看吓一跳。她最引我讨厌的一点,是把英俊这个词乱用。她喜欢说她是一个好色的人,喜欢英俊的男人,遗憾她的中文水平显然不如一个小学生,连在《我的父亲母亲》中的年轻父亲,也被她用英俊形容。我就开始彻头彻尾的讨厌她。

  拿她跟亦舒比是没有可比性的,就好象拿小学生的作文同《红楼梦》比一样可笑。我不是有意抬高亦舒,只是想指出安妮的文章质量之差。当然,关于写作的话题下次再讨论,在这里,我只想就小资的问题将她们比较一下。众所周知,人人都把安妮当小资的代表,所以,越来越多的人开始误会小资这个词。以为小资是令人作呕的,惺惺作态的,去了一次星巴克恨不得上回〈女友〉这样的杂志告诉全世界的。虽然小资不是一个好词,但显然它还没有恶俗到安妮那种品味的地步,所以有必要为它正名。为它正名的最好办法,是去看一下亦舒的小说,但有的人不爱看小说,或没时间看,或不喜欢亦舒,而偏偏关于安妮的东西又随处看得到。为了让这部分人知道小资是什么,知道安妮有多恶心,我想做以下一些比较。

  关于语言

  亦舒出生在香港,一个中英双语地区,在外国上过学,后来移民到加拿大,最喜欢嘲笑澳洲人的英语只比苏格兰人好一点,对于这样一个人,却在书中从来没出现过英语单词。不管是洒的名称,世界名牌的名称,或是其它,一律用中文。因为这个世界上没有中文表达不了的东西。亦舒喜欢欧洲,喜欢英国,但不在书中说英语以示其会一点英语。中文书当然要用中文写。

  而安妮呢?她连星巴克也要用英语来写,难道中文没有星巴克这三个字吗?如果说用英语方便一点,那请问本来打的是中文,却要切换成英语,再切换回来,哪一种更麻烦?那么她为什么要用英文写一些名字?想以此证明她学过英语?想以此证明她去过星巴克?会英语并不是一种特殊的才能,这个世界上有几十亿人都会英语,要么全用英语,要么用中文,中英混合,想说明什么?

  而且安妮出生于中国内地,在这一地区大家都只说中文,连出生在香港的在外国上过学的移民到国外的人都不愿意在书中用一点英文来显示什么,安妮这么做想有什么效果呢?

  关于音乐

  亦舒在书中一般没有提到过什么音乐。我们就只看看安妮所喜欢的音乐吧。她说他喜欢爱尔兰音乐。我真郁闷,不知道什么叫爱尔兰音乐。做为中国人,如果有一天一个人告诉你,他喜欢中国音乐,你明白他喜欢什么音乐吗?是京剧?是地下摇滚?是香港流行乐?是梁祝?这肯定是最奇怪的音乐分类法,居然拿一个国家的名字来分类。爱尔兰只有一种音乐吗?并且这种音乐只出一张唱片?

  有时候拿无知当无畏的人,你是不得不佩服的。安妮由始至终都没有说明到底是一种什么音乐。一个恶心的女人,偶然在菜市场边上买了一张打口CD(说不定还不是打口的),然后发现自己听不懂,然后再用自己能够懂得星巴克这个单词的英语发现了和爱尔兰有关的单词,就把这种音乐命名为爱尔兰音乐?

  以上就是爱尔兰人民都不知道的爱尔兰音乐诞生史。

  关于衣服

  亦舒非常喜欢凯斯米大衣和阿曼妮。安妮喜欢G—STAR(对不起,我用了英语,但也是为了尊重安妮小姐的本意,在她看来,外国品牌如果不用英语说出来,就和国内品牌一样),只要不是太笨的人,都看得出来两个人的差别了。再说一个细节。亦舒的书中,在八十年代的时候,一个普通的办公室白领女子,就认为一两千的衣服只不过是普通价钱。而安妮在2000年的时候,还认为一两千的衣服是非常贵的。买下来,甚至有点得意的意思。

  关于酒和咖啡

  亦舒向来是只喝香槟的。而安妮却喝民工和男人喝的啤酒。亦舒也喜欢喝咖啡,只不过从来没有点明过名字。可能是因为亦舒从来不去星巴克喝咖啡,她连吃早餐都要去文华的(一家五星级酒店,在香港中环,张国荣是在那里死的),但安妮可能认为如果不说出来一两种咖啡的名字不足以证明她去过星巴克那种大排档,安妮说她喜欢意大利特浓咖啡,但我怀疑她喝这种咖啡会放糖的,并且肯定是放白纱糖。

  关于旅行

  亦舒和安妮都喜欢到处走,不同的是,亦舒是去欧洲,北美。安妮是去中国内地。去年好不容易出了次国,(去的还是越南,我估计是没钱去欧洲,虽然她没有直接写这个理由)却写了整整一本注水书,顺路去了次香港,还拿来写了很多页。如果亦舒像她一样,恐怕写的书已经可以从美国排到日本了。亦舒去巴黎买衣服,去温哥华散心,去英国读书,就像安妮在上海去南京路一样(她自己说她喜欢去淮海路,我估计她可能也真去过,只不过没在里面买过东西,上海的伪小资不都是去巴黎春天看样式,去华亭路杀价格嘛,不过现在华亭路没有了,但还有襄阳路嘛)。安妮在上海乱逛的时间,亦舒早去了N次米兰买衣服了。

  关于日本和日本食物

  真小资都是瞧不起日本的,因为东京是次文化的代表,不东不西,日本食物也是没有文化的食物。亦舒从来不会有书有对和日本有关的东西作描述。她只会喜欢法国菜或意大利菜。而安妮却喜欢日本食物。喜欢日本文化。说真的,任何一个有文化的人都不会认为日本有文化。日本只有帅哥,哪有美食和文化?

  关于外国人

  亦舒一向有种族歧视,特别歧视白人,认为他们是多毛动物,没有进化完全,根本不会考虑和他们谈恋爱。但安妮不。她明显对白人有一种奴才相,不敢自己和白人谈恋爱,就让书中的第二女主角谈,而且从德国人谈到荷兰人。贱就一个字,安妮说多次。

  关于家具

  亦舒如果要买家具一定是从欧洲定货,直接运过来,绝对不会在香港买,也绝不会买宜家。但安妮好象对宜家情有独钟,也一直不好好写宜家这两个汉字,老用英语代替,好象她用英语写宜家,人家就会给她打个99折一样。宜家只是一种低档家具。在欧洲和发达国家非常受学生和刚刚工作没有多少钱的人欢迎。在香港,买宜家也就是没钱的意思。但在上海好象不同。买宜家居然也可以成小资。就好象一个外国人来中国吃了羊肉泡镆回国向人们吹嘘他吃了最高档的中国菜一样可笑。

  综上所述,安妮只是一个没有见过世面的,没见过大城市,只见过上海的乡下妹妹。对不起可能妹妹这两个字在年龄上不适合她,应该叫大婶才对。她说上海是她见过的最繁华的城市,光这一句话就可以让人笑半天。不过我相信她说的是实话,因为她没去过更繁华的地方,她只见过上海。对她来说,也挺不容易的,一个只去过越南和中国的人,能认识到上海的繁华,也算是难得了。

2006年3月7日星期二

常用正则表达式

  正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

匹配中文字符的正则表达式: [u4e00-u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^x00-xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:
s*

评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?</1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^s*|s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]d{5}(?!d)
评注:中国邮政编码为6位数字

匹配身份证:d{15}|d{18}
评注:中国的身份证为15位或18位

匹配ip地址:d+.d+.d+.d+
评注:提取ip地址时有用

匹配特定数字:
^[1-9]d*$    //匹配正整数
^-[1-9]d*$   //匹配负整数
^-?[1-9]d*$   //匹配整数
^[1-9]d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式

原载地址:http://lifesinger.3322.org/myblog/?p=185

2006年3月6日星期一

最糟糕的五百个用户密码

  人们刚开始使用密码没多久,就有人发现很多人一再使用完全相同的密码,即使是拼错的密码也惊人地一致。事实上,正因为人们对密码的设置可以被猜测出来,所以大部分黑客都会用到下面的常用密码表。从下列500个最常用的密码中,你可以洞悉安全意识薄弱的人有多么危险。如果你在这个表中看到了自己常用的密码,赶紧换掉吧。要知道,下面列出的每个密码都至少被成百上千的其他人使用过。

  其中有一些有趣的密码,它们显示了人们试图表现自己的聪明,但人们的小聪明也可以被预知的……来看看下面这些有意思的密码:

  ncc1701:星河企业的舰船编号。

  thx1138:乔治·卢卡斯第一部电影的名字,它是对先前一部学生作品的再制作。

  qazwsx:经典键盘上的左手侧字母。

  666666:6个6

  ou812:范·海伦1988年一张唱片专辑的标题。

  8675309:Tommy Tutone 乐队1982年的一首歌里提到的数字。

  据说大约有1/9的人至少使用过下列的一个密码,而有1/50的人使用过排名前20的最糟的密码。

  看表吧,密码不区分大小写:

NO Top 1-100 Top 101–200 Top 201–300 Top 301–400 Top 401–500
1 123456 porsche firebird prince rosebud
2 password guitar butter beach jaguar
3 12345678 chelsea united amateur great
4 1234 black turtle 7777777 cool
5 pussy diamond steelers muffin cooper
6 12345 nascar tiffany redsox 1313
7 dragon jackson zxcvbn star scorpio
8 qwerty cameron tomcat testing mountain
9 696969 654321 golf shannon madison
10 mustang computer bond007 murphy 987654
11 letmein amanda bear frank brazil
12 baseball wizard tiger hannah lauren
13 master xxxxxxxx doctor dave japan
14 michael money gateway eagle1 naked
15 football phoenix gators 11111 squirt
16 shadow mickey angel mother stars
17 monkey bailey junior nathan apple
18 abc123 knight thx1138 raiders alexis
19 pass iceman porno steve aaaa
20 fuckme tigers badboy forever bonnie
21 6969 purple debbie angela peaches
22 jordan andrea spider viper jasmine
23 harley horny melissa ou812 kevin
24 ranger dakota booger jake matt
25 iwantu aaaaaa 1212 lovers qwertyui
26 jennifer player flyers suckit danielle
27 hunter sunshine fish gregory beaver
28 fuck morgan porn buddy 4321
29 2000 starwars matrix whatever 4128
30 test boomer teens young runner
31 batman cowboys scooby nicholas swimming
32 trustno1 edward jason lucky dolphin
33 thomas charles walter helpme gordon
34 tigger girls cumshot jackie casper
35 robert booboo boston monica stupid
36 access coffee braves midnight shit
37 love xxxxxx yankee college saturn
38 buster bulldog lover baby gemini
39 1234567 ncc1701 barney cunt apples
40 soccer rabbit victor brian august
41 hockey peanut tucker mark 3333
42 killer john princess startrek canada
43 george johnny mercedes sierra blazer
44 sexy gandalf 5150 leather cumming
45 andrew spanky doggie 232323 hunting
46 charlie winter zzzzzz 4444 kitty
47 superman brandy gunner beavis rainbow
48 asshole compaq horney bigcock 112233
49 fuckyou carlos bubba happy arthur
50 dallas tennis 2112 sophie cream
51 jessica james fred ladies calvin
52 panties mike johnson naughty shaved
53 pepper brandon xxxxx giants surfer
54 1111 fender tits booty samson
55 austin anthony member blonde kelly
56 william blowme boobs fucked paul
57 daniel ferrari donald golden mine
58 golfer cookie bigdaddy 0 king
59 summer chicken bronco fire racing
60 heather maverick penis sandra 5555
61 hammer chicago voyager pookie eagle
62 yankees joseph rangers packers hentai
63 joshua diablo birdie einstein newyork
64 maggie sexsex trouble dolphins little
65 biteme hardcore white 0 redwings
66 enter 666666 topgun chevy smith
67 ashley willie bigtits winston sticky
68 thunder welcome bitches warrior cocacola
69 cowboy chris green sammy animal
70 silver panther super slut broncos
71 richard yamaha qazwsx 8675309 private
72 fucker justin magic zxcvbnm skippy
73 orange banana lakers nipples marvin
74 merlin driver rachel power blondes
75 michelle marine slayer victoria enjoy
76 corvette angels scott asdfgh girl
77 bigdog fishing 2222 vagina apollo
78 cheese david asdf toyota parker
79 matthew maddog video travis qwert
80 121212 hooters london hotdog time
81 patrick wilson 7777 paris sydney
82 martin butthead marlboro rock women
83 freedom dennis srinivas xxxx voodoo
84 ginger fucking internet extreme magnum
85 blowjob captain action redskins juice
86 nicole bigdick carter erotic abgrtyu
87 sparky chester jasper dirty 777777
88 yellow smokey monster ford dreams
89 camaro xavier teresa freddy maxwell
90 secret steven jeremy arsenal music
91 dick viking 11111111 access14 rush2112
92 falcon snoopy bill wolf russia
93 taylor blue crystal nipple scorpion
94 111111 eagles peter iloveyou rebecca
95 131313 winner pussies alex tester
96 123123 samantha cock florida mistress
97 bitch house beer eric phantom
98 hello miller rocket legend billy
99 scooter flower theman movie 6666
100 please jack oliver success albert

  英文原文:The Top 500 Worst Passwords of All Time

  中文翻译:煎蛋