网络管理员指南 -8.点到点协议-4>使用CHAT拨号

/ns/wz/net/data/20020808032607.htm

网络管理员指南 -8.点到点协议-4>使用CHAT拨号


本文出自:http://www.linpus.com.tw 作者: Andrew Anderson


在上面例子中可能因为不方便而影响你的一件事情是你需要在启动PPPD之前手工建立连接。与dip不同的是,
PPPD没有它自己的用于拨叫远程系统和登录的手稿语言,而是依靠一些外部的程序或者shell手稿来做这项工
作被执行的命令可以作为连接命令行的选项提供给PPPD。PPPD会将命令行标准输入输出到连续线。为此的一
个有用的程序将期望由Don Libes撰写。这是基于Tcl之上的非常强大的语言,并且正是为这类的应用而设计的。

PPPD包还带有一个类似的程序称为chat,它使你可以指定一个UUCP类型的聊天手稿。基本上,一个聊天手稿包
含一个我们盼望从远程系统中得到的可以交换顺序的行和我们所发送的回复。我们将会分别的呼叫期盼和发送
的行。这是一个聊天手稿中的典型的摘录:

ogin: b1ff ssword: s3kr3t

它告诉聊天等待远程系统发送注册提示,并返回注册名的b1ff。我们只是等待注册:所以注册提示以大写或者
小写字母开头,或者混用都没关系。下面的行仍然是一个期待的行,它使聊天等待密码提示,并发送我们的密
码回应。

这基本上是与聊天手稿有关的所有内容。当然,一个完整的拨叫到一个PPP服务器的手稿也需要包含正确的modem
命令。假设你的modem可以辨认Hayes命令组,服务器电话号码是318714。与c3po建立连接的的完整的聊天是:

$ chat -v '' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN
通过定义,第一个串必须是一个期待的串,但是因为modem在我们踢它之前不会说话,我们通过指定一个空的串
来跳过第一个期待。我们继续并发送ATZ,这是一个Hayes-compatible modems的重新设置命令,并等待它的应答
(好)。下一个串同聊天的电话号码一起发送拨号命令,并期待CONNECT信息的回应。这仍然会跟随一个空的串,
因为我们现在不想发送任何东西,但是最好等待注册提示。聊天手稿剩余部分所做的工作与上面描述的相同。
-v选择使聊天记录所有的动作到系统日志daemon的local2设备。
在命令行中指定聊天手稿需要承担一定的风险,因为用户可以使用ps命令查看一个命令行的过程。你可以通过在
一个文件中输入聊天草稿来避免它,称为dial-c3po。你使聊天从文件阅读文稿而不是在命令行文件名之后给出一
个-f选项。完成的PPPD咒语现在会是这个样子:
# pppd connect "chat -f dial-c3po" /dev/cua3 38400 -detach \
crtscts modem defaultroute
除了 指定拨号文稿的连接选择之外,我们添加两个选项到命令行:-detach,它告诉pppd不要从控制板中分离并变
成为一个背景过程。Modem的关键字使它在串口设备上执行一些modem指定的动作,如在呼叫之前或者之后挂断电话。
如果你不使用这个关键字,PPPD将不会监测端口的DCD线,也就不能在远程端出乎意料的断开的时候发现。
上面显示的例子太简单,聊天允许更为复杂的聊天文稿。一个非常重要的特征是它指定使用一个错误就取消聊天的
串的能力。典型的取消串是信息如:BUSY(忙)或者是(NO CARRIER)没有信号,这些当拨叫的号码占线或者没人
应答时候modem经常出现的提示。为了让聊天立即辨认出这些,而不超时,你可以在文稿开始的时候使用ABORT关键
词指定它们:
$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ...

使用一个类似的风格,你可以通过插入TIEMOUT选项为聊天文稿的局部更改超时的值。详细的内容请查看聊天手册页。
有些时候,你还想得到部分聊天文稿中的一些类型的有条件执行。例如,当你没有收到远端注册提示的时候,你可能
想要发送一个BREAK。或者一个运载返回,你可以通过附加一个子文稿到一个期望的串来达到这一点。它包括一系列
的发送和期待串,就象所有的文稿自身一样,它们由连字号割开。只有在它们所附的期待串没有如期到达的时候子文
稿才会被执行