第30章 其他的TCP/IP应用程序
30.2 Finger协议
F i n g e r协议返回一个指定主机上一个或多个用户的信息。它常被用来检查某个人是否登录了,或者搞清一个人的登录名以便给他发送邮件。 RFC1288 [Zimmerman 1991] 指明了这个协议。
由于两个原因,很多站点不支持一个 F i n g e r服务器。第一,F i n g e r服务器的一个早期版本中的一个编程错误被 1 9 8 8年声名狼藉的 I n t e r n e t蠕虫病毒利用,作为进入点之一( R F C 11 3 5 [Reynolds 1989] 和 [Curry 1992] 更详细地描述了蠕虫)。第二,F i n g e r协议有可能会泄露一些很多管理员认为是有关用户的私有信息(登录名、电话号码,他们上次的登录时间,等等)。R F C 1 2 8 8的第3节给出了这个有关服务安全方面的细节。
从一个协议的角度来看, F i n g e r服务器有一个知名的端口 7 9。客户对这个端口做一个主动打开,然后发送一个在线的请求。服务器处理这个请求,把输出发送回去,然后关闭连接。查询和响应都是采用NVT ASCII,类似于我们在F T P和S M T P协议中所看到的。
尽管大多数的U n i x用户都是使用finger ( 1 )客户来访问F i n g e r服务器,我们将从使用 Te l n e t客户与F i n g e r服务器直接相连开始,看看客户发出的每一条在线命令。如果客户的查询是一个空行(在NVT ASCII中,空行以一个回车符 C R跟着一个换行符 L F来传输),它就是一个请求查询所有在线用户信息的命令。
o ff i c e和o ffice phone的空白输出字段是从用户的口令 ( p a s s w o r d )文件记录的选项字段中取出的(在这个例子中,这两个字段的值没有提供)。 服务器必须在最后做一个主动的关闭操作,因为服务器返回的是一个可变长度的信息。当客户收到文件结束字符时,就知道服务器的输出结束了。
当客户的请求由一个用户名组成时,服务器只以该用户的信息作为响应。下面是另一个例子,这个例子中删去了Te l n e t客户的输出:
当一个系统完全禁止了F i n g e r服务时,因为没有进程被动打开端口 7 9,所以客户的主动打开将从服务器接收到一个R S T。
一些站点在端口 7 9提供了一个服务器,但服务器只是向客户输出信息,而不理睬客户的任何请求:
对一个组织来说,另一种可能就是实现一个防火墙网关:在组织内部和 I n t e r n e t之间的一个路由器,负责过滤(也就是扔掉)特定的 I P数据报([Cheswick and Bellovin 1994] 详细讨论了防火墙网关)。防火墙网关可以被配置成扔掉从 I n t e r n e t进来的这样一些数据报,这些数据报是目的端口为7 9的T C P报文段。
对于F i n g e r的服务器和U n i x的F i n g e r客户还有其他的实现。欲知详情,请参考 R F C 1 2 8 8和有关f i n g e r ( 1 )的手册。
R F C 1 2 8 8指出提供了F i n g e r服务器的、具有T C P / I P连接的自动售货机应该对客户的空行请求响应以现有产品的列表。对于由一个名字组成的客户请求,它们应该响应以一个数目或者与这个产品有关的可用项的列表。