A Chance For Linux and Freeware

连着忙了几天,今天闲话几句。

关于微软正版验证

我家希希说:“我要被黑屏了,怎么办呀?我要学 Linux!”

我说:“没关系,你把自动更新服务关掉就行了。”

我家希希说:“我还是想学 Linux!”

微软准备在 2008 年 10 月 20 日对中国用户启动的 WGA 计划这几天被吵得沸沸扬扬,搞得几乎人人自危,生怕被黑屏了。本人的评论如下:

  • 对此措施,我持欢迎态度。这件事起码给中国的盗版用户提了个醒:软件是有知识产权的!用盗版的操作系统很开心,用盗版的应用软件也很开心,到最后是中国整个落后的软件产业不开心,软件民工们也不开心。

  • 对于效果,我持保留态度。我相信中国盗版产业中广大劳动人民的智慧!

  • 对于影响,我持乐观态度。这是一个 Linux 和免费软件的机遇。此次 WGA 计划一出,势必会督促那些已经有学习其它操作系统愿望的用户真正动起手来,也会使那些使惯了盗版 Office 的人考虑一下免费的优秀国产软件 WPS Office,进而认识到许多优秀的免费软件并不比收费软件差

最后友情提醒一下,WPS Office 2007 目前已更新到支持 M$ Office 2007 文件格式( .docx, .xlsx, .pptx ),永中也于本月 13 号推出了免费的永中 Office 2009 个人版,支持 Windows 和 Linux 平台;免费的国产软件 Foxmail 和"进口软件" Thunderbird 都可以替代 Outlook ; Ubuntu 8.10 Linux 操作系统还有 14 天就发布了。

关于看论文

最近被老师逼着快速浏览了大量论文,发现自己以前看论文的效率还是太低。眼高手低的毛病总是改不了,做研究还是要潜心进去。

关于看书

每天睡前逼着自己看一会儿书效率挺高的。豆瓣上我在读的书已经超过二十本了,平日很难分出大块时间看,目前已经利用睡前十分钟解决了两本。躺床上用台灯看书的感觉蛮惬意的,置身于黑暗中的一小片光明,仿佛又回到了中学时代。当然这也得益于现在宿舍的环境布置,床头就是写字桌,要是像以前在中关村时住上铺的话,势必就会影响室友的睡眠了。

关于 writeos

九月份更新了两次,十一假期无暇写字,第三章到现在还没写完,我希望十月底能完成发布第二个版本。上个星期一个墨西哥的小伙子加我 Gtalk,问这本书的问题,开始我还以为是华裔,后来知道人家根本不懂中文,没办法只好推荐他去看代码注释。也许等我再完成两章之后,会和某些朋友合作开始将它翻译成英文。

豆瓣好友地图

想知道您的豆瓣好友都分布在地球的哪个角落吗?想把这些家伙都揪出来标记在一张地图上吗?也许您想尝试一下这个东东:豆瓣好友地图。(本文最下面就是 solrex 的豆瓣好友地图) 这是一个完全以兴趣为引导的小项目,欢迎您提出您的宝贵建议来帮助完善它,当然了,如果您能顺便在博客里进行一下推广就更感谢了!

LionGG 是我的一个好朋友,他和 Classicning 共同开发了这个豆瓣好友地图。很遗憾那,我很久以前就有了这个想法,而且曾经眉飞色舞地向室友描述了这个应用,只是苦于时间和知识的局限没有实现,否则这个页面就会 host 在 solrex.cn 下了 :)

豆瓣好友地图的开发基于豆瓣、Google Map、Google Chart 和 HeatMap 提供的 API 接口。如果您是 GIS 的爱好者,或者有足够的好奇心,您也可以把这个页面的 js 脚本下载下来看个究竟,没准会找到对您有用的东西。

它的作者 LionGG 毕业于南京大学地理信息科学系,目前在中科院地理所攻读博士学位。此公平常有事儿没事儿爱写一些有关地理信息系统(GIS)的文章,也是一个积极的“社会观察者”,他的博客在这里,感兴趣的话就去逛逛吧!

豆瓣好友地图

一个对 Tor 的新型重放攻击方法

Tor 是一个旨在抵御流量分析的匿名网络访问服务,它也可以被用为穿透网络 censorship 的工具,它的官方网站为:http://torproject.org (很可惜的是,大陆用户已经无法正常访问这个站点了)。

由于 Tor 在中国的使用还算比较广泛,我的朋友中也有不少使用它作为穿墙工具的,我想关于它的安全问题应该有人感兴趣。这篇博客将简要介绍 ICC(International Conference on Communications, 世界通信大会) 2008 的一篇论文 A New Replay Attack Against Anonymous Communication Networks 中描述的对 Tor 匿名性的一个很有效的攻击方法,这篇论文荣获了 ICC 2008 Best Paper Award(好好好好羡慕啊~~~)。

Tor 网络是由洋葱路由器(下简称路由器)、目录服务器和洋葱代理服务器(下简称代理服务器)组成的。所谓洋葱路由,就是用户发出的消息会被多层加密,每到一个路由节点,路由器解密一层来获得下一跳信息,就像剥洋葱一样一层一层解密,到最后一层才是用户的原始消息。

Tor 的工作方式是经过多次转发消息来保护原始地址不被侦知。其进行一次通信的流程是:用户在 PC 机上安装洋葱 socks 代理服务器,设置浏览器或应用程序通过本机的代理服务器访问网络;代理服务器从目录服务器得到可用的路由器列表,在用户发起 TCP 请求时,本机代理服务器选择中间通过哪些路由器转发消息,然后将用户的 TCP 包多层加密后发送出去;转发路径上经过的路由器对消息逐层解密转发,最后一跳的路由器(出口路由器)和目的主机进行正常的 TCP 通信,然后将返回的消息按照原始路径发送给用户。

这样入口路由器知道通信的发起者却不知道接收者,中间路由器只管转发,而出口洋葱路由器知道通信的接收者却不知道发起者,这就保证了用户访问网络的匿名性。

A 文中采取的攻击方法是:假定攻击者可以控制入口路由器和出口路由器,由于 Tor 采用计数器模式的 AES 加密算法(能否解密和包的顺序有关),那么在入口路由器处重放已经发送过的消息(包的顺序被打乱),就会造成出口路由器解密失败,收到错误的数据包。由于攻击者控制了入口和出口路由器,那么通过将入口路由器重放消息的时间和出口路由器检测到错误的时间联系起来,就能确定这次通信的源和目的地,破坏了网络访问的匿名性。

更坏的是如果消息的重放发生在用户通信的末尾,在用户结束通信后和 TCP 连接断开之间,用户甚至都不知道他的网络行为已经被发现。

虽然假定攻击者可以控制入口和出口路由器看起来是一个很强的条件,但 A 文中通过实验验证了拥有洋葱路由网络的路由器并成为入口并不算很难(Tor 网络本身就是由许多志愿者的主机组成的),再加上一个修改过的代理服务器软件,完全可以实现对使用该软件的用户的路由选择策略的控制。如果攻击者拥有足够的资源(比如某些强力部门),使用足够多的主机加入 Tor 网络,根据 Tor 的路径选择策略优化这些路由器的分布,我觉得也有可能实现上述条件。

总的来说,相比与其它一些对匿名网络流量进行监控的攻击方法,A 文的攻击是相当简单直接并且高效的。我简单查看了 Tor 软件的 ChangeLog,没有发现它对这一攻击进行有针对性的修改(也许是我看的不认真)。

所以呢,对中国用户来说,通过 Tor 来穿墙是可以的,但是过于相信 Tor 的匿名性并且用其去发布敏感信息或者进行其它不法行为是要三思而后行的,这也就是为什么 Tor 软件自己也说:
This is experimental software. Do not rely on it for strong anonymity.

Google 词典和 Gtalk 翻译机器人

由于我工作的机器配置实在太低,1.8GHz CPU, 256M 内存,40G 硬盘,跑一个 Ubuntu 也是非常吃力,我平常只敢开三四个程序,这样每次切换程序还要等个十几秒,唉!

虽然我 Ubuntu 里也装了 Stardict 星际译王,但我轻易不敢再开一个程序,太慢了!现在我发现一个非常有意思的东西解决了我的困扰,Gtalk 翻译机器人。其实这是我在尝试另一项服务 Google 词典时无意中发现的,很奇怪的是,我记得曾经看到一个 Google 官方的关于 Gtalk 翻译机器人的页面,怎么再也找不到了?只搜索到一个 Gtalk 开发组的博客上的新闻链接

添加 Gtalk 翻译机器人很简单,就是选择添加好友,好友 email 为:语言缩写2语言缩写@bot.talk.google.com。比如汉英翻译的机器人名字是:zh2en@bot.talk.google.com,英汉翻译的机器人名字是:en2zh@bot.talk.google.com。当然了,还有更多,点上面的新闻链接可以查看。

用这个机器人有什么好处呢?一是方便,直接在聊天软件里就可以查词。就像我用那么落后的机器,打开一个词典软件能让它假死半分钟,而 IM 软件总是会开着的,打开一个聊天窗口显然方便和快很多;还有一个好处是 Google 将你的聊天内容记录到 Gmail 里,那么过一段时间整理一下聊天记录就是一个非常好的生词表 :)。查找聊天记录很简单,只需要在 Gmail 上方的搜索栏中输入:from: en2zh@bot.talk.google.com 再点搜索即可。

Goolge 词典也是非常好用的,但不知道为什么在 Google 首页上点 Language Tools 进去以后却没有词典的链接,只有到 more->even more 中找 Translate 才有。

香港免费 VPN HOWTO

香港网站 Prairie Dog 提供了免费的 VPN 帐户,不要问我这个帐号能干嘛,自己去看。

申请免费 VPN 帐号地址:http://www.pdog-vpn.com/freeaccount.php(一个IP只能申请一个,多账号会被封)。

我不得不感叹中国网民的行动速度,我上午才申请的 pdog 的帐号,下午发文时就无法注册了。不过还有许多好心人收集这些免费 VPN 的信息,请点击 http://blog.119797.com/article/free-vpn/

Windows HOWTO:
http://www.pdog-vpn.com/setup.php

由于它没有 Linux HOWTO,这里我就提供一个

Ubuntu HOWTO:

安装 VPN 软件:
$ sudo apt-get install pptp-linux network-manager-pptp network-manager-vpnc

使用 VPN:
1. 点击 Ubuntu 系统通知栏中的网络连接图标,选择 VPN Connections->Configure VPN。
2. 点 Add 出来对话框之后,点 Forward 进入第二步,Connect to: 选择 PPTP Tunnel,再 Forward。
3. Connection 标签中 Connection Name 填个随便什么名字,我这里就用 pdog,Gateway 填 Prairie Dog 发给您的邮件中的主机名 xxx.pdog-vpn.com,然后 Forward, Apply,Close。
4. 点击网络连接图标,然后 VPN Connections->pdog,弹出窗口,输入用户名密码。然后,网络连接图标就会出来一个金黄色的小锁。
5. 然后访问某些可以查看 IP 地址的网站,比如 www.ip138.com,就会发现自己的 IP 地址变成了来自“香港特别行政区”。

这样,您就可以访问那些由于某些原因无法正常访问的网站了。

PS:我刚刚发现我域名下所有子域名都被我的域名服务商删除,而且无法添加,难道又是因为奥本海默运?

PSS:给域名服务商打了个电话,一个小时后看来已经部分恢复了,也可以添加子域名了。接线员给我的回复是 DNS 设置少了一个,所以系统更新时被当作错误信息删除掉了,看来我过于敏感了。

Math in CS: 数论和公钥密码学

1940年,英国数学家哈代在他的一本小书《一个数学家的辩白》(A Mathematician's Apology)中说:“如果有用的知识是这样的知识(我们暂时同意这样说):它大概会在现在或相对不远的未来,为人类在物质上的享受方面作出贡献,因而,它是否在单纯的智力上满足人们乃是无关紧要的,那么,大量更高级的数学就是无用的。现代几何和代数、数论、集合论和函数论、相对论、量子力学——没有一种比其它的更经得住这种检验,也没有真正的数学家的生涯可以在这个基础上被证明是有价值的。”但是我们会看到,哈代这个断定在当时“不远的未来”几乎被一一证明是错误的,数论就是其中一个。

在 1970 年代以前,人们所知道的密码学都是对称密码学,就是在加密和解密过程中需要使用同一个密钥。在那个时代,一些密码算法已经能保证足够的安全性,比如数据加密标准 DES。但是人类的需求是很难完全得到满足的,他们为每次密钥交换的复杂度而苦恼,比如在战时如果密码本被敌方获得,就必须重新向无线电收发员分发密码本,这个工作量和代价是相当大的;还有一个需求就是数字签名,能不能用加密实现对数字文件的签名,像手写的签名一样,确保该文件出自谁人之手?

上述问题,就是 Whitfield Diffie 和 Martin Hellman 1976 年在他们那篇划时代的论文《密码学的新方向》(New Directions in Cryptography)中提出的,他们也给出了其中一个问题的解决办法,那就是 Deffie-Hellman 密钥交换算法(后来被改为 Deffie-Hellman-Merkle 密钥交换算法,里面还有一段小故事。)。但是 DH 没做完的功课,仅仅在一年后就被 RSA 解决了,那就是 Ron Rivest, Adi Shamir, 和 Leonard Adleman 的 "A Method for Obtaining Digital Signatures and Public-Key Cryptosystems"。RSA 的加密和解密使用的是不同的密钥,即公钥和私钥,你可以将你的公钥扔到世界上任何一个位置,我用你的公钥加密一段信息,除了你用自己的私钥解密,没有别的人能从中得到原始消息。就相当于你把打开了的箱子扔的满世界都是,但箱子一旦锁上,就只有你能再打开。

RSA 算法自其诞生之日起就成为被广泛接受且被实现的通用公钥算法,但是 RSA 算法还带来一个另外的意义,那就是:数论知识从未像现在这样被广泛地使用着。RSA 程序的普及率要远远大于 Windows,因为每台 Windows 上都装配着 RSA 算法程序,但 RSA 并不仅仅装配 Windows。每当你登录邮箱、网上银行、聊天软件、安全终端,你都在使用着数论带来的好处。而且相比之前密码学的字母替换和置换,混淆和扩散,DH 和 RSA 使用的东西更有资格说自己是数学。

大概也是由于其基于数学的简洁性,RSA 和 DH 算法描述要比 DES, AES 简练许多,我在这篇小文中都能写完。

RSA

RSA 用到了数论中的三个基本定理:费马小定理、欧拉定理和中国剩余定理(几乎处处都在),和一个古典难题:大整数分解问题。如果你是数学系的学生,对这些概念一定不会陌生。

费马小定理:若 p 是素数,a 是正整数且不能被 p 整除,则: ap-1 = 1(mod p)。或者另一种形式:ap=a(mod p),这种形式不要求 a 与 p 互素。

欧拉定理:对任意互素的 a 和 n,有 aΦ(n) = 1(mod n)。其中,Φ(n)是欧拉函数,即小于 n 且与 n 互素的正整数的个数。

大整数分解问题:将两个整数乘起来是简单的,但是将一个整数分解为几个整数的乘积是困难的,尤其是当这个数比较大的时候。迄今为止没有有效的算法来解决这个问题,甚至我们连这个问题的计算复杂度量级是多少都不知道。

那么 RSA 算法是什么样的呢?

密钥的产生:
1. 选择两个素数 p 和 q.
2. 计算 n = p*q.
3. 计算 Φ(n) = (p-1)(q-1) (这是欧拉函数的性质)
4. 选择 e<Φ(n) 并使得其与 Φ(n) 互素。
5. 确定 d<Φ(n) 并使得 d*e = 1(mod Φ(n))。
6. 这时候,私钥就是{d, n},公钥就是{e, n}。
加密算法:
假设 M 是明文(M<n),那么密文就是 C = Memod n。(为什么明文是数字?在计算机科学里任何数据最终表示都是数字。)
解密算法:
假设 C 是密文,那么明文就是 M = Cd mod n。

我们来证明一下算法是否正确,由于 Cd = Me*d = Mk*Φ(n)+1 (mod n)。

如果 M 和 n 是互素的,显然直接由欧拉定理我们就能得到:
Cd = Mk*Φ(n)*M1 = M (mod n) = M
说明算法是正确的;
如果 M 和 n 不互素,由于 n 是两个素数 p 和 q 的乘积且 M<n,那么 M 要么是 p 的倍数,要么是 q 的倍数,由 e*d = 1(mod Φ(n)) = 1(mod (p-1)(q-1)) 我们可得:
e*d = 1(mod (p-1)) 且 e*d = 1(mod (q-1))
则 e*d 可以写成: e*d = k*(p-1)+1, e*d = h*(p-1)+1
由费马小定理,我们有:Me*d = Mk*(p-1)+1 = M(mod p) 和 Me*d = Mh*(q-1)+1 = M(mod q)。
由于 p 和 q 均为素数,且 p, q 均整除 Me*d-M,所以我们有:
Cd = Me*d = M (mod p*q) = M (mod n) = M

从上面我们可以看到 RSA 算法实现了加密和解密使用不同密钥,而且证明了这个算法的正确性。但 RSA 算法要想实用,光有正确性还不够,最重要的一点是安全性,即从公钥{e, n}无法推导出私钥{d, n}。在 RSA 算法中我们可以看到,关键要知道 Φ(n),知道了 Φ(n),使用欧几里德算法就能求出 e 的逆元,就得到了用户的私钥{d, n}。要求出 Φ(n),就必须知道 p,q,但 p,q 是不公开的,仅仅知道 p,q 的乘积 n 去求 p,q,根据大整数分解古典难题,当 n 比较大时其分解在计算上是不可行的。这就保证了 RSA 算法的安全性。

而且 RSA 算法是可逆的,所以它就有能力同时实现加密和签名的功能。由于公钥是公开的,每个人都可以用你的公钥加密一段信息发给我,而私钥是保密的,所以只有你能看到别人用你的公钥加密的消息;而也因为可逆性,如果你用私钥解密一段明文(实际是加密),所有人都可以用你的公钥加密它来得到明文(实际是解密),因为私钥只有你一个人知道,这个消息只有可能是你发出的,就相当于你对这段明文做了一个签名。

DH 密钥交换算法

DH 密钥交换算法较 RSA 算法更为简单,它也是基于数论中的一个古典难题:离散对数问题。

离散对数问题:若 p 是素数,p 已知,考虑方程 y = gx mod p,给定 g,x 求 y 是简单的,但给定 y,g 求 x,即求 x = logg,py mod p,在计算上是不可行的。

DH 密钥交换算法的描述如下:
已知公开的素数 p 和 p 的本原根 α
1. 用户 A 选择秘密的 Xa<p,计算 Ya = αXa mod p,将其发送给 B。
2. 用户 B 选择秘密的 Xb<p,计算 Yb = αXb mod p,将其发送给 A。
3. A 和 B 分别计算 Ka = (Yb)Xa mod p 和 Kb = (Ya)Xb mod p,就同时得到了共享的密钥 K=Ka=Kb,然后就可以用 K 进行加密传输了。

DH 密钥交换算法的优点在于:双方在通信前不需要知道任何共享的密钥,而是通过公开的 p 和 α 协商出一个密钥来进行加密通信。

先看一下算法的正确性,Ka = Kb 是否成立:
Ka = (Yb)Xa = (αXb)Xa = αXa*Xb (mod p)
Kb = (Ya)Xb = (αXa)Xb = αXa*Xb (mod p)
Bingo! Ka 和 Kb 是相同的。

再来看一下算法的安全性,就是能否从公开的信息推导出 K 来:
由于密钥是 K = αXa*Xb,那么攻击者必须知道 Xa 和 Xb 才能得到共享的密钥 K,而公开的信息只有 Ya 和 Yb,由离散对数问题,从 Ya,Yb 求出 Xa,Xb 在计算上是不可行的,就保证了算法的安全性。

从上面两个算法我们可以看出,数论在公钥密码学中的重要地位,恐怕哈代当时怎么也想不到三十多年后人人都在使用他所认为在实际生活中毫无用处的数论吧!

金山公司花巨资为 WPS Office 从 Design Science 引进了公式编辑器

提起 Design Science 公司大家可能并不熟悉,但是说到 M$ Office 里的公式编辑器和 MathType,大概大家就不会觉得陌生了。对,公式编辑器和 MathType 都是 Design Science 公司的产品。

这不是一则新闻,不过也不旧,这件事发生在 2008 年 5 月 8 日,金山公司对外宣布金山公司巨资购买公式编辑器 回馈WPS 用户。Design Science 也在网页上显著位置(高于微软)将金山公司列为战略合作伙伴

自从半年前放弃盗版的 M$ Office 投入到 WPS Office 永久免费的个人版阵营之后,我不断地发现 WPS Office 的优点(当然了,其最大的优点是免费)。WPS Office 能对 Office 文档格式(.doc, .ppt, .xsl)相当完美的兼容,与 OpenOffice 那种兼容不是一个数量级的。我最喜欢的还有一个功能:直接导出 pdf 格式文档。但是其缺乏公式编辑器也让我很苦恼,就在前几天,在完成一门课程作业时(中国的老师怎么那么喜欢用 Word 文档留作业且作为提交格式啊?),我不得不到一个在线的 TeX 网站去生成要用到的公式图片,再下载了插入到 WPS 文档中。

今天我到金山的网站去下载更新的 WPS 的时候(我讨厌自动更新),忽然在一个角落里发现了 WPS 添加公式编辑器的新闻,这个消息让我很振奋。这个功能将大大地提高 WPS Office 的易用性,而且可以促使更多人有理由放弃盗版的 M$ Office。我将其记录在我的博客里,也希望看到的人能够(至少尝试一下)迁移到 WPS Office 平台上工作,为减少中国被国外诟病的软件侵权行为出一分力。(我女朋友现在就一直使用 WPS,因为当初我骗她说这是精简版的 Office ^_^,我室友也在我的强烈呼吁下部分转移到了 WPS Office 平台。)

其实我应该算是 WPS 的老用户了,在 1998 年,我刚开始接触电脑的时候,学会用电脑打字使用的就是 WPS,当时记忆深刻的就是它的崩溃频率,基本上一上午至少要崩溃两次,辛辛苦苦打的东西唰就全变成乱码了。不过 WPS 也在发展,它曾两度(2001年和2007年)荣获国家科技进步二等奖,大概是国产软件获得的国家级最高奖项了吧。金山公司2007年8月份做出了将个人版免费发布的决定,我认为这个决定将为中国办公软件的正版化做出不可磨灭的贡献。

Google Code

受到某同学的提醒,今天我把我的两个小项目中科院IP网关登录客户端《使用开源软件-自己动手写操作系统》源代码转移到了 Google Code 上。

CAS NET 本身就是遵从 GPL 协议的,所以我就将所有内容都转移到了 Google Code,原有的官方主页也设置了301永久重定向到 Google Code 页。

《使用开源软件-自己动手写操作系统》的电子书内容是遵从的 CC 协议,所以并没有将电子书的 TeX 源码放到 Google Code 上,只是将书中示例程序的源代码放了上去。原有的官方主页还保留,主要用做发布所有源码(TeX+Demo)用。虽然最近比较忙,第三章还是写了一部分,大概月底能发布第三章吧(不敢保证,因为期末考快到了!)。不像博客,写书总得需要大块的时间,而我能挤出来的时间确实不多。唉,我也想早点儿把它完成。

最近在申请两个公司的暑期实习生,微软和IBM。个人比较喜欢 IBM CRL 那个 Security 的职位,只是,现在由不得咱们挑啊!

从安全的角度理解——为什么要使用 Google 的服务?

我很喜欢 Google 的一些服务 Gmail, Reader, Documents等等,而且我也一直大力倡导周围的人使用 Google 的服务。在我看到一些人仍在使用 163, sina 的信箱,抓虾的在线订阅器的时候,我不禁为他们通信的安全性担心。为什么使用 Google 的服务?一个很重要的原因是:因为它更安全。

目录:

1. 得到抓虾用户名密码的例子
2. 嗅探和可嗅探网络
3. 为什么 Google 更安全?
4. 为什么 163, sina, 抓虾 不安全?
5. 如何使用 Google 提供的安全服务?
6. 使用 Google 提供的安全服务的额外好处

1. 得到抓虾用户名密码的例子

首先,来看一个截图,看看国内某著名在线订阅器网站抓虾网对用户密码的保护有多脆弱:

Wireshark_Zhuaxia

请大家注意截图的最下方,能否看到这一行字:
email=solrex%40gmail.com&password=testtest&persistentCookie=true
solrex@gmail.com 是我在抓虾的注册帐号,而后面的 password 大家应该知道是什么东西吧!(不用试我的帐户,我的密码已经改了。)

有人会好奇这张截图怎么得到的,其实这是我在自己的电脑上用 Wireshark(一款著名的网络数据包分析软件,其前身是 Ethereal) 对通过我网卡的到抓虾网数据包进行监控的截图。Wireshark 实际上就是一款嗅探器,它能记录经过指定网络接口的所有数据包并进行分析。

2. 嗅探和可嗅探网络

为了解释如何才能得到上面的数据包,首先要介绍一下网络嗅探的原理:

嗅探,是一种黑客的窃听手段,一般是指使用嗅探器对数据流的数据截获。由以太网的知识我们知道,在以太网的冲突域中,每台主机的网卡都能接触到所有的数据包,如果数据包的目的地址是自己,网卡就接收数据包,并将包的内容向上层传递;如果数据包的目的地址不是自己,就将该包丢弃。那么如果网卡接收所有的数据包并对其进行分析呢?这就是所谓的“混杂模式”,将网卡设置为混杂模式后,就可以接收所有包,进而对同一网络中的其它主机的通信内容进行监听,这就是 Wireshark 进行嗅探的原理。

需要说明的一点是,在当前的网络下,直接进行嗅探并没有那么容易。上面所说的情况,只在以太网的冲突域中才能实现,而当前交换机的广泛使用,将冲突域限制到交换机和主机两点之间,除了自己没有其它主机,当然也无法直接对其它主机的通信内容进行监听。如果在交换网络下达到嗅探的目的,必须通过其它办法,比如 ARP 欺骗,这超出了本文的讨论范围,就不予介绍了。

虽然在交换网络下无法对其它主机进行直接嗅探,但是我们无法保证在我们的数据包经过的防火墙或者网关时候不会被监听。就比如在实验室的网络环境下,实验室的管理员在网络出口的防火墙处对数据包进行分析是易如反掌的事情。

所以我们总结一下,用户通信的数据包被监听可能发生在几种情形下:一、共享网络,网络用户通过集线器连接到网络;二、交换网络的结点不可信任,比如公司网络的出口防火墙管理员不可信;三、缺乏安全机制的无线网络,比如学校为学生提供的无线网络连接(用 WEP 加密传输的网络可以认为是缺乏安全机制);四、有ARP欺骗的交换网络。

由于很多网站的登录 session 是使用的 http 协议,在此协议下,用户名和密码都是通过明文传输的(抓虾和 sina 就是一个例子),所以当用户处在上述的网络环境下时,很有可能数据包被别人监听到。而数据包一旦被监听和分析,得到用户的信息易如反掌,南京大学小百合 BBS 最近的一篇文章:你还敢在教室中享受无线吗? ,就是一个很生动的例子。

3. 为什么 Google 更安全?

首先,因为 Google 采用了 https 协议来处理用户登录请求。https(Hypertext Transfer Protocol over Secure Socket Layer) 协议是指加强安全的 http 协议,正如它名字所示,它采用 SSL 来保证数据的加密传输。举个很有证明力的事实,如果你有任何一个银行的网上银行帐号,请打开你的网银登录窗口,查看上面的地址栏内容开头是不是:https://xxx.xxx.com/xxxx 。没有任何一家银行采用 http 协议处理网银登录请求,这说明了什么?http 协议不安全。

其次,因为 Google 使用可选的 https 协议来提供内容传输服务。虽然 Google 在其任何服务的登录请求处理中都是使用 https 协议,但是在认证完用户之后,和 Google 服务器的连接就转回到了 http 协议。这样虽然 Google 的用户名和密码不能被窃听到了,可服务的内容,比如 Gmail 邮件的邮件内容就会被恶意用户窃听到。那么如何使整个通信的内容都受到保护呢,就需要使用 Google 提供的可选 https 服务,只需要在你的浏览器地址栏内容的最前面 http:// 换成 https:// 即可。

4. 为什么 163, sina, 抓虾 不安全?

sina 和 抓虾 没有提供任何的帐户信息和内容的安全传输功能,所以在课堂上演示嗅探器工作方式的时候,演示者一般都会首先拿 sina 开刀,原因很简单,它是个大网站。

163 呢,比前面两个好一点儿,它提供了可选的帐户信息的加密传输功能,就是在登录 163 信箱的时候,在登录框下面有一个“增强安全性”的选项,如果勾选了增强安全性选项,163 就会用 https 来处理用户的登录请求。但是 163 仍然没有提供对用户内容的加密传输功能,即 163 的所有邮件在网络上都是明文传输

5. 如何使用 Google 提供的安全服务?

如果用户希望自己的帐户信息和传输内容都受到保护的话,那么就应该使用 Google 提供的 https 连接登录 Google 服务。比如Gmail 的 https 入口是:https://mail.google.com/ ,Google Reader 的 https 入口是:https://www.google.com/reader/ 。在 Google 其它的服务中,用户也可以简单地通过将地址栏的 http:// 换成 https:// 来选择使用安全传输。

6. 使用 Google 提供的安全服务的额外好处

使用安全的加密传输能保证自己传输的信息不被别人获取,这是显而易见的好处,但是使用 Google 的安全服务还有一点额外好处:避免自己的网络访问被关键词过滤。

有过访问敏感站点经验的同志可能都知道,如果网页中包含某些关键词,连接往往会被重置。就比如用户使用 Google Reader 订阅了某个激进的博客的RSS FEED,如果使用传统的 http 连接,当文章中包含敏感关键词时,Google Reader 就会与服务器断开连接。如果使用加密传输的话,传输内容就避免了被关键词过滤,就不会发生类似连接被重置的情况。

用 Google Reader 生成 Blogroll(侧栏链接列表) 和博客推介广告

我一直认为 Google Reader 是最好的在线博客阅读器,但是它的功能不仅仅是博客阅读器,下面介绍 Google Reader 还能为 Bogger 做的两个小功能。

一、用 Google Reader 生成 Blogroll(侧栏链接列表)

相信很多 blogger 都比较头疼于如何设置 blogroll:用博客程序自带的吧,不一定好看(尤其是Wordpress 自带的);自己写 HTML 吧,太费劲,尤其在添加/删除链接时,很麻烦s。那看看我用 Google Reader 生成的 blogroll 吧(也可直接到我博客主页查看效果):

Blogroll Demo by Google Reader

还是挺漂亮的吧,怎么生成的呢?其实方法很简单,如果你使用 Google Reader 来管理自己的博客订阅,只需要把你要链接的朋友的博客订阅放在一个 folder 里,比如我的就是 BlogRoll, 然后到 Settings->Tags 设置里,将 BlogRoll 这个 tag 的权限设置为 public 即可,如下图所示:

Blogroll Setting in Google Reader

看到 BlogRoll 那一行最后一个链接没?“add a blogroll to your site”,下面的操作我就不说了吧。(注意,需要博客程序支持添加 JavaScript源码,MSN Space和新浪一流恐怕没办法。)

这样做好之后,当你想在 blogroll 里添加/删除一个朋友的链接时,就可以直接在 Google Reader 里对 BlogRoll 文件夹添加/移除订阅即可。别忘了 Google Reader 也支持修改链接的名字哦!

二、用 Google Reader 生成博客推介广告

有自己的个人网站也是一件很麻烦的事情,不知道个人主页里应该写什么内容,咱不是什么牛人,也没什么可写嘛。如果页面挺空,就可以把自己的最新博客文章链接放上去啊,至少要在自己的个人主页上推广一下自己的博客嘛。看看我在一些页面上放的“博客推介广告”:

Blog AD By Google Reader

其实这是一个小 trick,Google Reader 不是支持将订阅内容共享出来嘛(就是上面那张图里的“add a clip to your site”),那么我当然可以只共享自己的博客内容喽。将自己的博客订阅单独放在一个 folder 里,然后“add a clip to your site”,^_^。

这样每次你一更新自己的博客,个人主页的链接就跟着更新了,当然了,也可以在某些支持 js 脚本的网站上做签名档...

三、(你不是学数学的吧,不是只有两个功能吗?)顺便推广一下 Firefox

知道上面的几个截图怎么生成的吗?没有使用任何其它程序,只用了 Firefox 的一个插件:Screen Grab ,功能强大吧!

Ubuntu 8.04 长期支持桌面版本 Linux 发布

[本博讯,北京时间2008年4月24日19点] Canonical 公司发布了最新的开源 Linux 操作系统发行版:Ubuntu8.04 LTS(长期支持)桌面版,Canonical 也同时发布了 Ubuntu 8.04 长期支持服务器版。

Ubuntu(音:oo-BOON-too[u:'bu:ntu:]) 8.04 LTS(Hardy Heron) 是 Canonical 公司自 Ubuntu 6.06 LTS 以来发行的第二个长期支持版本,它将提供对桌面版 3 年,服务器版 5 年的长期升级和服务支持。Linux Foundation 2007 年的调查结果显示,Ubuntu Linux 已经成长为桌面市场的后起之秀,占据了 Linux 桌面版本的头把交椅。同样,这次 Ubuntu 8.04 将以更完善的硬件支持,更漂亮的用户界面,更新更多的软件包选择,更方便的用户交互掀起一场 Linux 桌面系统的大革命。

Ubuntu 8.04 的完整下载地址列表:http://www.ubuntu.com/getubuntu/downloadmirrors

Ubuntu 8.04 的系统安装指导,常用程序安装,桌面效果截图,可以在这里找到。

如果你是新手也没有关系,一个小软件 Wubi 允许你在 Windows 下像安装应用程序一样轻松安装 Ubuntu Linux

另外,中国北京的清北DIY俱乐部目前宣布向全国提供免费 Ubuntu 光盘派送,每人可免费申请一套Ubuntu 8.04系统光盘(1DVD+1CD),详情见http://quickbest.com.cn/discuz/thread-26153-1-1.html

PS: 秀一个别人做的 Ubuntu Sticker:

Image

为什么 Gtalk 不支持视频聊天?

这是一个网友问我的问题,当时我的回答是:大概 Jabber 协议不支持吧,这个问题你应该去问 Google。但是当我搜索了一下 Gtalk 的帮助和网络上的内容后,居然没有发现这个问题的解答(可能是我搜索技术不到家),这就变成了一个有趣的问题。

为什么 Gtalk 不支持视频聊天?在咨询了 Wikipedia 之后,我发现我的回答基本是对的,因为 Gtalk 使用的聊天协议不支持。

Gtalk 使用的通信协议叫做 Jabber,因特网工程工作小组(IETF)已经将 Jabber 的核心 XML 串流协定以 XMPP(Extensible Messaging and Presence Protocol) 之名,正式列为认可的即时通讯及 Presence 技术。而 XMPP 的技术规格已被出版为 RFC 3920RFC 3921。所以在一般的讨论中,我们不区分 Jabber 和 XMPP。

从上面的介绍中我们也可以看出,XMPP 的技术是基于可扩展标记语言(XML)的,所以呢它有它的很多优点,比如:分布式(想像一下用电子邮件聊天),可扩展(XML命名空间的特性),弹性佳(可用在不同领域,比如网络监控,游戏),多样性(Jabber协议的公开性使你不必被一款聊天软件绑架),安全(利用已有的SASL及TLS技术)。

但是也正因为 XML,XMPP 协议有一些缺点,正是这些缺点给 Gtalk 带来了限制。

缺点一:Scalability(规模可伸缩度?)--> Gtalk 不支持群组聊天(Group Chat)。

XMPP 的可伸缩度不好,当进行多用户聊天或者提供发布/订阅服务时,XMPP 会带来很多 overhead(网络开销),这样会大大降低整个系统的通信效率。一些组织正在通过添加协议扩展来解决这个问题,就比如 2007 年 6 月 Google 在 Gtalk Gadget(像我们通常在Gmail窗口中看到那个)中加入了 Group Chat 功能,但是直到现在桌面版 Gtalk 仍然不支持 Group Chat。

缺点二:No binary data(无法传输二进制数据)--> Gtalk 不支持视频聊天。

XMPP 协议的数据包通常是被编码成一个长 XML 文档,限制了它直接传输原始二进制数据流的能力,所以使用 XMMP 协议的聊天工具的文件传输一般使用其它协议,比如 HTTP 来实现,如果实在无法避免用 XMMP 协议传输文件等,它一般使用 Email 中常用的 base64编码。

但既然这样,为什么 Gtalk 支持语音聊天呢?这就要说到另一个协议,XMMP 的扩展协议 Jingle,这是一个还没有被 XMPP标准正式采纳的扩展,而 Gtalk 采用的 Jingle 协议和已提交的草案也有所不同。Jingle 协议使得 Gtalk 支持 p2p 的多媒体互动,比如语音聊天功能。

那既然有多媒体功能扩展,为什么 Gtalk 现在不支持视频聊天呢?我不相信 Google 的工程师没有尝试添加视频聊天功能,可能的原因我猜想是视频聊天的性能达不到。猜想的依据是什么呢?Gtalk API 文档,Google 说:In the future, we plan to support SIP signaling as well. 如果 Jingle 能完美支持视频聊天,大概没有需要去支持另外一个类似的多媒体协议吧。

所以呢,我们可以看到虽然 Gtalk 的当前版本有内存泄露 BUG,而一年多来(2007年1月5日发布Gtalk 1.0.0.104) Google 仍然没有发布新版本,这说明 Gtalk 项目组的精力被其它更重要的东西占用了,这个东西会不会是对 Gtalk 视频和群组聊天的支持呢?我们拭目以待。

喜欢玩新软件的朋友可以尝试一下这个:Google Talk Labs Edition,里面有一些好玩的新功能!

重要评论:作者可能对xmpp还不是很了解,文章有很多的臆想,有些不太对。xmpp协议是个总称,它包括核心协议,扩展协议等(xep)等,事实上核心协议只规定了很小很基本的一些功能,大量的功能都是在xep中规定的。而xep在逐步完善中,其中的很多功能处于实验阶段,google可能是嫌麻烦,每一次协议更新都要修改软件,索性等协议功能稳定了再去实现。xmpp协议里面是有群组聊天的,叫muc,但google只实现了它的一个子集,叫 groupchat,而没有完整实现muc。视频聊天和音频聊天本质上是一样的。google可能就是再等xep中关于jingle部分协议的稳定以后再实现。而你看到的这句话:“In the future, we plan to support SIP signaling as well.”在google talk刚推出的时候就已有了。而且那个时候它还说会推出各个操作系统平台的版本。而如今呢?所以事情的发展是会变化的。还有google那时候说要支持 sip,并不是xmpp功能有什么问题,而是想使im用户能够统一起来,互联互通。因为sip和xmpp都是被ietf接受的标准协议。

Feedburner and Feedsky 的点击统计

我发现我真傻。

由于文章的原始链接被 Feedburner 修改,而 Feedburner 的子域名被封,以前一直无法从 Google Reader 里点击文章标题进入我的博客网站,我也一直以为这是件没办法的事情。今天无意中看别人的文章才发现,这是因为在 Feedburner 中启用了 Item link clicks 功能的缘故,我郁闷啊!

所以今天我把 Feedburner 和 FeedSky 的文章点击统计功能都关闭了,啊哈,链接干净了!现在总算可以直接点击订阅的文章标题进入我的博客文章页面了!

收到 Google Adsense PIN Letter

今天总算收到了 Google Adsense 寄给我的 PIN 信封,距离它公元 2008 年 3 月 24 日给我的电子邮件通知正好两周。现在貌似 Google 改政策了,以前都是 Adsense 帐户赚到 $50 以上才会寄 PIN 的,现在仅仅 $10 以上就邮寄 PIN 了。我的 Google Adsense 帐户开了两个月零七天,才赚了 $14.09,唉,真慢啊,什么时候才能到 $100 呢?

solrex.cn 的新子域名

由于对某些服务感到新鲜,所以为我的域名添加了几个子域名:

1. http://m.solrex.cnhttp://wap.solrex.cn

我的手机版博客,使用 WireNode 提供的服务,上面两个域名均重定向到 http://solrex.wirenode.mobi,我用自己的手机访问测试正常。

2. http://feed.solrex.cnhttp://feeds.solrex.cn/solrex

将博客 FeedSkyFeedBurner 烧录绑定到了自己的域名,不影响原有的 feed 地址。

其中 http://feed.solrex.cnFeedSky 提供的域名绑定服务,http://feeds.solrex.cn/solrexFeedBurner 提供的 MyBrand 服务,这两个域名均为直接 CNAME 绑定。所以,FeedBurner 那个在国内仍然无法正常访问,不过可以通过阅读器订阅。

飞信充分表明了中国移动是一个闷骚的弱智

因为平时短信通信量很大,所以最近在尝试中国移动的飞信业务,然后发现了一些很有趣的事情。

1. 不允许下载飞信手机客户端到电脑。

在飞信的官方网站上,手机客户端只能用手机上网下载。(飞信给你发条包含 URL 的消息,你点击下载)

为什么用户不能在电脑上下载了然后自己安装到手机上呢?嘿嘿,就算只有几十K,GPRS 下载也是有钱赚的(0.01元/KB那也是将近一块钱那)!要是大家都在电脑上下了,中国移动不少赚了很多吗?

其实这是典型的中国移动拿用户当弱智耍的例子(当然,这也不是第一次了)。不过大家要明白一个道理,几乎所有 WAP 网站都是可以通过 WEB 访问的,那么移动给的链接自然可以用电脑下载的。拿我的 Samsung E908 来说,移动给的链接是:
http://nav.m161.com.cn/drops/clientdownload.aspx?category=j2me&vendor=sam&model=e908
在这里链接下载下来的是一个 Amigo_sam_e908.jad,和下载 JAVA 游戏时一样,.jad 文件其实只是一个文本文件,用文本编辑器打开后就能发现真正的 JAVA 程序 .jar 文件的下载地址是:
http://nav.m161.com.cn/drops/clientdownload.aspx?category=j2me&vendor=sam&model=e908_jar
在这个链接下载下来的是一个 Amigo_sam_e908.jar 文件,然后只需要把那个 .jad 文件中的 MIDlet-Jar-URL: 后面换成 .jar 文件的文件名 Amigo_sam_e908.jar,然后将两个文件传输到手机里,按照一般安装手机 JAVA 游戏的步骤安装即可。

2. 手机客户端的常用短语。

在用手机客户端发消息时,飞信内置了一些常用短语,下面大家来看看这些“常用”短语是什么:

1> 你好。
2> 有时间么?可以和你聊聊吗?
3> 你好,很高兴可以和你成为朋友。
4> 你多大了?是男生还是女生?
5> 你是用手机聊吗?
6> 为什么不说话?
7> 你的名字好特别,是什么意思呢?
8> 可以给我你的电话号码吗?
9> 回头再聊,我正开车呢?
10> 这么晚了,还不睡?

看完了这几条,我实在不明白它们有哪条能勉强算上“常用”!特别是第 5 条和第 8 条,用飞信自然能看到对方在线状态和对方手机号码,傻啊,还问?

嘿嘿,如果真的有某个人“常用”这几句话,我只能说你很“中国移动”了!

Google Talk 小徽章

无意间发现 Google 推出了一个新功能,Google Talk 小徽章,把一个 iframe 放到网站上,这样网站的访客就能直接通过点击这个小徽章里的链接匿名和发布者聊天,不需要 Google 帐户。

测试了一把,发现当状态标识为 "busy" 的时候,通过小徽章无法聊天;当状态标识为 "available" 时匿名访客才可以点击它来进行聊天。由于是匿名,聊天时发布者方显示的对方名字是 "Guest"。

想看看效果?看我的个人主页,或者博客右侧 widgets。

Google Reader 的一点问题

Google Reader 是我非常喜欢的在线博客订阅器,自从发现这个服务之后我就结束了尝试 N 个离线博客订阅软件的历史。用 Google Reader 看别人的博客好像看邮件一样,而且可以抓取一些国内无法访问的国外博客系统的 feed,很方便。

自从使用以来它就一直很稳定,不过这两天我发现 GR 貌似出现了一些小问题:一个是抓取我的博客 feed 有错,订阅的 http://feeds.feedburner.com/solrex 的条目中忽然多出了十条和我同一服务器的某个博客条目,而 feedburner 的原始连接中并没有这十条内容;二是抓取 feed 的时候没有通知订阅用户数,所以我的 feedburner 和 feedsky 显示的订阅用户一下子少了一大半,本来就只有一百多人订阅,现在显示的订阅数就更可怜了。

本来我以为这可能是个别问题,可是著名博客和菜头也在文章中说某些用户的订阅在 GR 中显示为乱码。这就叫人奇怪了,为什么 GR 在这几天发生那么多问题?难道是 GR 在测试新功能?

虽然 GR 这两天出了那么多问题,我仍然要推荐它,下面简单介绍一下我觉得比较好的特色:

1. 共享阅读。一种方法是把共享阅读块放在自己的主页上(看我的博客右侧栏),另一种是在 GR 的阅读视图里与 Google 好友共享阅读条目,还有一种方法就是把条目直接 email 给别人。

2. 快捷键操作。GR 有很多键盘快捷键,比如:j 阅读下一条,k 阅读上一条,n 移到下一条,p 移到上一条,o 打开列表项,这样操作起来非常方便。

3. 使用安全连接(https)的 GR,避免连接被重置。在中国国内某些网络条件下,明文传输的网页是会被过滤的,如果订阅的博客文章中有敏感词条,路由器就会重置网络连接,比如经常看到的浏览器提示“与服务器的连接被重置”就是由于这个原因。使用安全连接的 GR https://www.google.com/reader/view/ 能避免此类状况的发生。(此方法同样适用于 Gmail 的连接不稳定现象)

4. feed 阅读趋势。GR 可以统计你的阅读情况,并提供一些阅读趋势排行榜,以供你了解自己的阅读习惯。

Twiki 语法快速指南

最后更新时间:2008年01月14日01点00分

摘要:

这份文档主要给出了一些常用的 TWiki 文章编辑方法。TWiki 是一个广泛使用的开源 wiki 系统,通常被企业和组织用户用来共享知识等。更多介绍请看它的官方站点:http://twiki.org

这只是作者的一份编程笔记,其实与网上早期版本的 TWiki 文档中文翻译有些重复,需要更多内容请查看参考文章和链接。

目录

1. 基本语法
1.1 话题
1.2 标题和段落
1.3 字体
1.4 列表
1.4.1 无序号列表
1.4.2 带序号列表
1.5 表格
1.6 链接
1.6.1 词条链接
1.6.2 外部链接
1.6.3 页面内锚点
1.6.4 图片和附件链接
1.7
图标
2. 页面编辑技巧
3. 参考文章和链接

1. 基本语法

[1.1 话题]

Wiki 的精神就是用词条描述世界,所以 TWiki 也是这样,它内部对内容的管理是用一个一个 WikiWord 来分类的。WikiWord 就是像前面这种两个单词构成的连接在一起的词组,里面大小写交错。

TWiki 的话题(topic)推荐用 WikiWord 来建立,如果用户输入的新话题不是一个 WikiWord,那么建立新话题的按钮就不会被激活。但是 TWiki 允许用户使用非 WikiWord 建立词条,需要手动勾选上允许使用非 WikiWord 建立话题。

[1.2 标题和段落]

1.2.1 标题
TWiki 中可以使用分级标题,分级标题的语法如下:
---+
---++
即在行首三个"-"和一个"+"代表一级标题,三个"-"和两个"+"代表二级标题,以此类推。当用户使用规范的标题记号建立好话题之后,可以很方便地使用"%TOC%"标记建立一个标题目录。如果用户不想某个标题被包含,只需要在标记标记后加上两个感叹号"!!",比如:

---+!! 目录
%TOC%
这样目录这个标题就不会包含在自动建立的目录里。

1.2.2 段落
TWiki 的段落分隔和 LaTeX 有点儿类似,段落之间需要空一行。如果想输入不被 TWiki 格式化的原始文字(比如源程序等),需要用标签将这些段落包起来,主要有以下两种标签:
<verbatim></verbatim>
<pre></pre>

区别是 <verbatim></verbatim> 中间的代码以完全原始方式显示,<pre></pre> 中某些 HTML 标签依然起作用。

[1.3 字体和分隔线]

1.3.1 字体
TWiki 使用字体的方式比较像 HTML 的标签,就是在字符串两头加上某些标记。比如:
*Bold Font* 粗体
_Italic Font_ 斜体
__Bold Italic__ 粗斜体
=Fixed Font= 等宽字符
==Bold Fixed Font== 等宽粗体字符
最最需要注意的一点是:这些标记"*_="必须内侧与文字相连,外侧为空格,标记之间也不得有空格。

1.3.2 分割线
TWiki 的分割线是在行首输入连续的多于三个的减号"-",例如
----

[1.4 列表]

1.4.1 无序号列表
无序号列表的格式是:
*
*
即三个空格加"*"所进一层,六个空格加"*"缩进第二层,以此类推。

1.4.2 带序号列表
带序号列表的格式是:
1.
1.
即三个空格加"1"所进一层,六个空格加"1"缩进第二层,以此类推。注意,这里的"1"代表用阿拉伯数字编号列表,其它编号方式有"A"或"a"大小写字母标号,"I"或"i"大小写罗马字母编号。

注意:这里后面的小数点可要可不要,可以一直使用"1"编号,也可用"1,2,3"递增编号,效果无区别。

[1.5 表格]

表格的建立是用竖线"|"分隔,比如:
|T1|T2|T3|
|A1|A2|A3|
就建立了一个两行三列的列表。单元格内部的左右对齐是利用和竖线的距离实现的。

[1.6 链接]

1.6.1 词条链接
如果是规范的多词 WikiWord 话题,可以使用双方括号直接括起来,例如:[[my wiki topic]]就会直接引用 MyWikiTopic 词条;如果是非规范话题,或者引用说明和引用话题不一样,需要使用引用与说明分开的格式,例如:[[MyWikiTopic][my WIKI topic]]。

1.6.2 外部链接
外部链接可以直接使用类似与词条链接的方式来引用,例如:[[
http://blog.solrex.org][Solrex
的博客]] 。

1.6.3 页面内锚点
在页面内可以定义锚点,这样可以使用链接在页面内跳来跳去。定义锚点的方法是在行首使用 #WikiWord,例如:
#FootNote Footnote is....
就定义了一个到该段的锚点。引用锚点和词条链接的方式也类似,例如:[[#FootNote][to footnote]]。如果引用别的页面的锚点,只需要在锚点前面加上该页面的话题名,例如:[[MyWikiTopic#FootNote][to another footnote]]。

1.6.4 图片和附件链接
如果引用在同一页面的附件或者图片(其实一般图片也是附件),链接的格式为:%ATTACHURL%/filename.extesion,比如:%ATTACHURL%/about.pdf;引用在不同页面的链接,需要在文件名前面加上该页面主题的名字,比如:%PUBURL%/%WEB%/MyWikiTopic/about.pdf

[1.7 图标]

TWiki 预定义了很多图标,直接在文中就可以使用,比如帮助的小 i 图标是:%H%,update 的图标是:%U%,new 的图标是:%N%。合理使用这些图标能增强文章的可读性。

2. 页面编辑技巧

[1] 建立话题时合理分级,有规律地规划父话题和子话题关系。
[2] 处理重复话题时使用 %INCLUDE{"XXX"}% 来包含已有的话题,比如我已经有了 PersonalComputer 话题,在建立 PC 话题时候,就应该直接在页面中使用 %INCLUDE{"PersonalComputer"}% 来避免冗余。
[3] 使用%TOC%自动创建目录:当编辑一篇比较长的文章时,建议使用标题标记建立分级标题,最后使用 %TOC% 在上方建立一个可索引目录。

[4] 合理使用字体和图标增加可读性。
[5] 合理使用 HTML 代码来加强页面排版功能。TWiki 可以直接支持 HTML 代码,为了格式的统一,一般不建议直接使用 HTML。但有些页面排版过于复杂,使用 HTML 可以直接达到要求。
[6] 使用注释的技巧:TWiki 没有装 footnote 插件时候是不支持注释链接的,但是可以通过一些技巧来实现。我们可以先在注释或者引用列表前建立一个锚点:
#FootNote

---+ Footnotes
1 aaa
1 bbb
当文中内容需要注释时,使用 HTML 和 TWiki 链接一起加一个上脚标:aaa<sup>[[[#FootNote][1]]]</sup>,这样 aaa 的右上角就可以出现一个方括号,里面是带到脚注链接的脚注编号 "1"。

3. 参考文章和链接

[1] 早期版本 TWiki 语法格式的中文翻译:
http://www.stlchina.org/twiki/bin/view.pl/TWiki/TextFormattingRules
[2] TWiki 官方语法文档:
http://twiki.org/cgi-bin/view/TWiki/TextFormattingRules

:tag: Wiki,TWiki