文档介绍:下载
第6章网关工具
此前我们已经讨论过,几种其他软件工具对于建立应用级网关都是有用的。这些工具包
括:p r o x y l i b,U N I X系统连接服务器接口软件的可移植版本的第 1 0版[Presotto and Ritchie,
1 9 8 5 ],p r o x y以及其他工具软件。这些工具大部分都是公共且有效的,详细情况见附录 A。
在设计工具和库时,应尽可能多地遵循多引用、少留意的“ U N I X哲学”。即,工具要简
单且模块化,且旗标、饰边或选项都不多。
proxylib
设置防火墙,意味着编写大量开通网络连接所需要的小程序。即,意味着编写和重写相
同的例行程序集,调用 g e t h o s t b y n a m e和/或i n e t _ n t o a、s o c k e t、c o n n e c t等等。还有更糟糕的,
可能需要这许多程序的数个版本来处理内部调用者、外部调用者和通过式调用者等。这是不
得已而为之的方法。
幸运的是,我们开发了一个第 1 0版连接服务器的软件版本,正好可以运行在任何 U N I X系
统上。为一个网络连接生成一个文件描述符,目前只是对一两个子程序调用的事情,而不再
涉及神秘的数据结构或系统调用。主要变量是一个如下形式的字符串:
dest! service
其中,d e s t是一个主机名或数字 I P地址,s e r v i c e是一个端口号或服务名字。 p r o x y l i b则要复杂
的多,它有一个可选的前置字段,用来指定拨号装置的类型。例如:
tcp! host! service
将通过T C P进行连接。其他拨号装置可以是 dk(Datakit VCS)、d i a l (电话号码)或者a t m。我们的
库包括一个名为 p r o x y的拨号装置,以某种方式连接到防火墙代理服务:这个方式在编译时被
确定,或通过在环境变量$ P R O X Y中给定的地址确定。这样做所获得的利益相当大。例如,
我们开发的大多数代理 N F S,就是使用一个明确的 T C P请求进行调试的。用它通过防火墙,无
需改变代码。
两个主要进入点是:
int
ipcopen(char *path, char *flags);
以及
char *
ipcpath(char *dest, char *defdialer, char *defservice);
其中d e f d i a l e r和d e f s e r v i c e分别是缺省的拨号装置和服务。 i p c o p e n中p a t h参数具有如下形式:
d i a l e r ! d e s t i n a t i o n ! s e r v i c e
i p c p a t h程序的行为如下:
ipcpath("x!y!z", "defdial", "defservice")→" x ! y ! z "
ipcpath("x!y", "defdial", "defservice")→" x ! y ! d e f s e r v i c e "
98使用第二部分构建你自己的防火墙
下载
ipcpath(