chat拨号.docx

上传人:b****1 文档编号:2412242 上传时间:2022-10-29 格式:DOCX 页数:15 大小:22.42KB
下载 相关 举报
chat拨号.docx_第1页
第1页 / 共15页
chat拨号.docx_第2页
第2页 / 共15页
chat拨号.docx_第3页
第3页 / 共15页
chat拨号.docx_第4页
第4页 / 共15页
chat拨号.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

chat拨号.docx

《chat拨号.docx》由会员分享,可在线阅读,更多相关《chat拨号.docx(15页珍藏版)》请在冰豆网上搜索。

chat拨号.docx

chat拨号

最近在做pppd程序测试,在修改chat脚本pppd-on-dialer文件时出现了一些小问题,虽然chat脚本似乎并不难懂,但是要精通掌握还是需要花费一点精力的。

虽然后来chat脚本问题基本已经解决了,但是为了彻底搞懂chat脚本,在baidu、google能用的关键字都用了结果只有找到一个官方的英文说明,就是没有中文。

为了以后参阅花了1个白天3个夜晚的时间将文件翻译成中文。

英文水平有限,难免有理解偏差之处,抛砖引玉啦:

CAT中文帮助

 

名称

chat–调制解调器的自动对话脚本

 

命令格式

chat[options]script

 

描述

Chat程序定义了一个计算机和调制解调器之间对话交流,其主要目的是用来在本地PPPD和远端PPPD程序之间建立连接。

 

选项

-f

从chatfile文件读取chat脚本。

这个选项的使用与chat的脚本参数互斥(mutuallyexclusive)。

使用者必须具有该文件的读取权限。

在文件中允许多线(multiplelines)设定。

应该以空格或tab键来分隔字符串。

 

-l

依所指示的锁定文件执行UUCP式的锁定。

如果无法建立该文件那么chat程序将会失败。

只有在chat程序因为任何原因而执行失败的情况下该锁定文件才会被删除。

如果该脚本执行成功则锁定文件将会留在磁盘上。

当pppd程序不再希望使用串行设备时该锁定文件将会被删除。

不应该同时使用chat以及pppd的锁定选项来使用锁定文件。

他们是互斥的选项而且如果你两个都使用将会引起其中一个或者

另一个程序无法获得所需的锁定而失败。

 

-t

对于要接收的预期字符串(expectedstring)设定的超时限制。

如果在该时间限制内没有接收到该字符串的话就不发送回复

字符串(replystring)。

可以发送一个变通(alternate)的回复或者如果没有变通的回复字符串则该脚本运行失败。

一个失败的脚本会导致chat程序以一个非零错误代码结束。

你也可以使用TIMEOUT字符串来指定超时限制。

 

-r

设置报告字符串输出文件。

如果你使用REPORT关键字,由此产生的字符串将写入该文件中。

如果没有使用该选项而且你仍使用了REPORT关键字,输出字符串将用标准错误文件记录。

 

-e

打开echo选项。

Echoing使用ECHO关键字在chat脚本的指定位置打开或者关闭。

当echoing被使能,所有调制解调器的输出内容将记录到标准错误文件中。

 

-E

使能环境变量替换chat脚本中的使用标准的$xxx语法的变量。

 

-v

要求chat脚本以冗长(verbose)模式执行。

chat程序将记录chat脚本的执行状态,包括所有从调制解调器中接收到的文字以及发送给调制解调器的字符串。

默认记录到SYSLOG去;记录方法可能会通过-S或者-s标志改变。

 

-V

要求chat脚本使用标准错误的详细模式下执行。

chat程序将记录所有从调制解调器中接收到的文本和发送给调制解调器的字符串到标准错误设备中。

该设备通常是运行chat或pppd程序的本地控制台。

 

-s

使用标准错误。

所有由“-v”产生的日志信息和所有的错误信息将发送到标准错误。

 

-S

不使用SYSLOG。

默认情况下,错误信息被发送到SYSLOG。

-S的使用将阻止由’-v’产生的日志信息和错误信息发送到SYSLOG。

 

-T

传递一个任意字符串,通常为一个电话号码,将用于替换发送字符串中的/T替换元字符。

 

-U

传递第二个字符串,通常是一个电话号码,将用于替换发送字符串中的/U替换元字符。

当对ISDN终端适配器进行拨号时是非常有用的,它需要两个号码。

 

script

如果脚本没有以-f选项指定在文件里那么该脚本会如参数般被包含在chat程序里。

 

CHAT脚本

chat脚本定义通信过程。

一个脚本包含一个或多个“期待对方送出(expect-send)”的配对字符串(pairsofstring),

以空格隔开,还有一个选择性的“期待对方送出的候补(subexpect-subsend)”配对字符串,以短线(dash)隔开。

像下面这个例子:

 

ogin:

-BREAK-ogin:

pppssword:

hello2u2

 

这一行指示chat程序应该期待“ogin:

”这个字符串。

如果在所分配的时间间隔内接收登录提示失败的话,

那它就送出一个中断程序(breaksequence)给远端然后期待“ogin:

”这个字符串。

如果第一个“ogin:

”被接收到那么中断程序就不会产生。

一旦它接收到该登录提示则chat程序将送出ppp这个字符串然后期待“ssword:

”这个提示。

当他接收到到密码提示后,他将会送出密码hello2u2。

一般在回复字符串后面会跟着送出一个回车(carriagereturn)。

在“期待”字符串里除非以/r字符指令(charactersequence)指定为必须否则不会期待它的出现。

期待系列(expectsequence)应该只包含辨识字符串所需要的信息。

因为它一般是存放在磁盘文件里,它不应该包含可变信息。

通常不会以时间字符串(timestrings),网络识别字符串(networkidentificationstrings),或者其他变化的数据做期待字符串。

为了修正在初始化过程中(initialsequence)可能会传送错误的字符,所以寻找字符串“ogin:

”而不是“login:

”。

开头的“l”字符可能接收错误而你永远找不到该字符串,即使它已经被系统发送。

同样的原因,脚本寻找“ogin:

”而不是“login:

”以及“ssword:

”而不是“password:

”。

一个非常简单的脚本看起来可能像这样:

 

ogin:

pppssword:

hello2u2

 

换句话说,期待…ogin:

,发送ppp,期待…ssword:

,再送出hello2u2。

在实际使用上,简单的脚本是罕见的,至少在原先的字符串没有被接收时应该把候补期待(subexpectsequences)包括进来。

例如,考虑下面这个例子:

 

ogin:

--ogin:

pppssword:

hello2u2

 

这会是个比前面所用的简单脚本跟好的脚本。

它会寻找相同的login:

提示,然而,

如果没有接收到的话,会发送出一个单独的返回序列(returnsequence)并且再次寻找login:

如果线路干扰掩盖掉第一个login提示那么接着送出空线路(emptyline)经常将会再次产生登录提示。

 

注释

注释可以嵌入在chat脚本中。

注释是一个第一列以“#”字符开头的行。

注释行仅仅被chat程序忽略。

如果一个“#”出现在期待指令的第一个字母中,你应该引用该字符串。

如果你想等待一个以“#”字符开头的提示符,你必须像这样写:

 

#现在等待注销的提示和发送字符串

'#'logout

 

从文件中发送数据(SENDINGDATAFROMAFILE)

如果发送字符串以“@”符号开头,那么该字符串的其余部分被视为一个文件名称用以获取发送字符串。

如果读取文件的最后一个字符是换行字符,它被删除。

该文件可以是一个命名管道(或者FIFO)而不是一个普通文件。

这就提供chat和其他程序通信的一个方法,例如,一个程序提供提示用户和接收用户的密码输入。

 

ABORT字符串

许多调制解调器以字符串来回报呼叫的状态。

这个字符串可能是CONNECTED或者是NOCARRIER或者是BUSY。

通常要是调制解调器连接远端失败的话应该会希望结束脚本。

困难的是脚本不会确切地知道它可能接收到那个调制解调器字符串。

在初次尝试时,它可能接收到BUSY然而下次它可能接收到NOCARRIER。

这个“失败”字符串可以用ABORT指令指定到脚本中。

像下面这个例子一样写到脚本里:

 

ABORTBUSYABORT'NOCARRIER'''ATZOKATDT5551212CONNECT

 

这个指令不会期待什么;而且接着发送ATZ这个字符串。

对此期待的回应是OK这个字符串。

当它接收到OK时,字符串ADTD5551212就进行拨号。

期待字符串是CONNECT。

如果接收到字串CONNECT那么就会执行脚本其余部分。

然而,要是调制解调器发现电话忙线,他将会发送出BUSY这个字符串。

这会使得该字符串符合失败字符命令(abortcharacter)。

这个脚本将会因为它发现一个失败字符串(abortstring)而失败(fail)。

如果他接收到的是NOCARRIER字符串,它也会因为同样的原因而失败。

不是可以接收到字符串就是字符串将终结chat脚本。

 

CLR_ABORT字符串

这个指令允许清除以前的ABORT字符串设置。

ABORT字符串被保存在一个预定大小的数组内(在编译时);

CLR_ABORT将清除条目的空间回收,以便新的字符串可以使用这些空间。

 

SAY字符串

SAY指令允许脚本在终端上通过标准错误发送字符串给用户。

如果chat正在被pppd运行,而pppd是作为一个守护进程(同它的控制终端分离)运行,标准错误通常被重定向到文件/etc/ppp/connect-errors中。

 

SAY字符串必须使用单引号或者双引号。

如果字符串中需要输出回车和换行,你必须明确地将它们添加到您的字符串。

 

SAY字符串可以用来提供那些你使用了“ECHOOFF”但是仍想让用户知道发生什么的脚本段落的进度信息。

一个例子是:

 

ABORTBUSY

ECHOOFF

SAY"DiallingyourISP.../n"

''ATDT5551212

TIMEOUT120

SAY"Waitingupto2minutesforconnection..."

CONNECT''

SAY"Connected,nowloggingin...0

ogin:

account

ssword:

pass

$SAY"LoggedinOK...0etc...

 

这段脚本将目前唯一的SAY字符串发送给用户,所有脚本的详细信息将保持隐藏。

例如,如果上面这段脚本运行,用户将看到:

 

DiallingyourISP...

Waitingupto2minutesforconnection...Connected, now loggingin...

LoggedinOK...

 

REPORT字符串

报告字符串类似于ABORT字符串。

所不同的是,字符串和所有字符到下一个控制字符如回车,都被写入报告文件。

 

报告字符串可以用来分离调制解调器的连接字符串中的发送速率和返回该值给chat用户。

报告字符串的分析产生逻辑结合其他字符串过程像寻找期待字符串。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1