Linux PPP 教程 | ||
---|---|---|
上一页 | 第 18 章。自动化您的连接 - 创建连接脚本 | 下一页 |
Chat 脚本是由期望字符串和发送字符串对组成的序列。特别注意,我们总是先期望接收到一些东西,然后才发送东西。
如果我们要在不先接收任何内容的情况下发送某些内容,我们必须使用一个空的期望字符串(用“ ”表示),对于在不发送任何内容的情况下期望某些内容也是如此!此外,如果一个字符串由多个单词组成(例如 NO CARRIER),您必须引用该字符串,以便 chat 将其视为一个实体。
我们模板中的 chat 行是:-
exec /usr/sbin/chat -v |
调用 chat,-v 告诉 chat 将其所有 I/O 复制到系统日志中(通常是 /var/log/messages)。一旦您确信 chat 脚本可以可靠地工作,请编辑此行以删除 -v,以节省系统日志中不必要的混乱。
TIMEOUT 3 |
ABORT '\nBUSY\r' |
如果收到字符串 BUSY,则中止操作。
ABORT '\nNO ANSWER\r' |
如果收到字符串 NO ANSWER,则中止操作。
ABORT '\nRINGING\r\n\r\nRINGING\r' |
如果收到(重复的)字符串 RINGING,则中止操作。这是因为有人正在给您的电话线打电话!
\rAT |
期望调制解调器不返回任何内容,并发送字符串 AT。
OK-+++\c-OK ATH0 |
这一个有点复杂,因为它使用了一些 chat 的错误恢复功能。
它的意思是...期望 OK,如果未收到(因为调制解调器未处于命令模式),则发送 +++(将调制解调器返回到命令模式的标准 Hayes 兼容调制解调器字符串)并期望 OK。然后发送 ATH0(调制解调器挂断字符串)。这允许您的脚本处理调制解调器卡在线上的情况!
TIMEOUT 30 |
将脚本剩余部分的超时时间设置为 30 秒。如果您在 chat 脚本因超时而中止时遇到问题,请将其增加到 45 秒或更长时间。
OK ATDT$TELEPHONE |
期望 OK(调制解调器对 ATH0 命令的响应)并拨打我们要呼叫的号码。
CONNECT '' |
期望 CONNECT(当远程调制解调器应答时,我们的调制解调器会发送此消息)并且不发送任何回复。
ogin:--ogin: $ACCOUNT |
同样,我们在这里内置了一些错误恢复功能。期望登录提示符 (...ogin:),但是如果我们超时后没有收到它,则发送一个回车符,然后再次查找登录提示符。当收到提示符时,发送用户名(存储在 shell 变量 $ACCOUNT 中)。
assword: $PASSWORD |
期望密码提示符并发送我们的密码(同样,存储在 shell 变量中)。
此 chat 脚本具有合理的错误恢复能力。Chat 具有比此处演示的功能更多的功能。有关更多信息,请查阅 chat 手册页(man 8 chat).
虽然 ppp-on-dialer 脚本非常适合在您登录后自动在服务器端启动 pppd 的服务器,但某些服务器要求您显式在服务器上启动 PPP。
如果您需要发出命令以在服务器上启动 PPP,则确实需要编辑 ppp-on-dialer 脚本。
在脚本的末尾(密码行之后)添加一个额外的期望 发送对 - 这将查找您的登录提示符(注意在 Bourne shell 中具有特殊含义的字符 - 例如 $ 和 [ 或 ](左右方括号)。
一旦 chat 找到 shell 提示符,chat 必须发出您的 ISP 的 PPP 服务器所需的 ppp 启动命令。
在我的情况下,我的 PPP 服务器使用标准的 Linux Bash 提示符
[hartr@kepler hartr]$ |
并要求我输入
ppp |
以在服务器上启动 PPP。
在这里允许进行一些错误恢复是一个好主意,所以在我的情况下,我使用
hartr--hartr ppp |
这意味着,如果我们未在超时时间内收到提示符,则发送一个回车符并再次查找提示符。
一旦收到提示符,则发送字符串ppp.
注意:不要忘记在前一行的末尾添加一个 \,以便 chat 仍然认为整个 chat 脚本都在一行上!
不幸的是,某些服务器会产生非常可变的提示符集!您可能需要使用 minicom 多次登录以了解发生了什么并选择稳定的“期望”字符串。