Linuxの基礎の紹介-ネットワークツール-チャット

1。概要

自動対話スクリプトとモデム、チャットプログラムは、コンピュータとモデム間の対話交換を定義します。その主な目的は、ポイントツーポイントプロトコルデーモン(pppd)とリモートのpppdプロセス間の接続を確立することです。

2.文法

chat [ options ] script

3.オプション

オプション 説明
-f <チャットファイル> チャットファイルからチャットスクリプトを読み取ります。このオプションとチャットスクリプトパラメータの使用は相互に排他的です。ユーザーには、ファイルへの読み取りアクセス権が必要です。ファイルでは複数行を使用できます。文字列を区切るには、スペースまたは水平タブを使用する必要があります。
-t <タイムアウト> 受信する予定の文字列のタイムアウトを設定します。文字列が制限時間内に受信されない場合、応答文字列は送信されません。代替応答が送信されるか、代替応答文字列がない場合、スクリプトは失敗します。スクリプトが失敗すると、チャットプログラムはゼロ以外のエラーコードで終了します。タイムアウト文字列を使用してタイムアウトを指定することもできます。
-r <レポートファイル> レポート文字列の出力ファイルを設定します。キーワードREPORTを使用すると、生成された文字列がファイルに書き込まれます。このオプションを使用せずにレポートキーワードを引き続き使用する場合、stderrファイルがレポート文字列に使用されます。
-e まず、エコーオプションをオンにします。ECHOキーワードを使用すると、チャットスクリプトの特定の場所でエコーをオンまたはオフにすることもできます。エコーを有効にすると、すべてのモデム出力がstderrにエコーされます。
-E チャットスクリプトで標準の$ xxx構文を使用して、環境変数の置換を有効にします。
-v チャットスクリプトを詳細モードで実行するように要求します。チャットプログラムは、チャットスクリプトの実行ステータス、およびモデムから受信したすべてのテキストとモデムに送信された出力文字列を記録します。デフォルトでは、SYSLOGを介してログインします。-Sおよび-Sフラグを使用して、ロギング方法を変更できます。
-V stderr詳細モードでチャットチャットスクリプトをリクエストします。次に、チャットプログラムは、モデムから受信したすべてのテキストと、モデムに送信された出力文字列をstderrデバイスに記録します。このデバイスは通常、チャットまたはpppdプログラムを実行しているローカルコンソールです。
-s stderrを使用します。「-v」からのすべてのログメッセージとすべてのエラーメッセージがstderrに送信されます。
-S システムログは使用しないでください。デフォルトでは、エラーメッセージはシステムログに送信されます。-Sを使用すると、ログメッセージとエラーメッセージが「-v」からシステムログに送信されなくなります。
-T <電話番号> 任意の文字列(通常は電話番号)を渡すと、送信文字列で\ T置換メタ文字に置き換えられます。
-U <電話番号2> 2番目の文字列(通常は電話番号)を渡します。これは、送信された文字列で\ U置換メタ文字に置き換えられます。これは、ダイヤルに2桁のISDNターミナルアダプタが必要な場合に役立ちます。

4.チャットスクリプト

チャットスクリプトは通信を定義します。スクリプトには、スペースで区切られた1つ以上の「expect-send」文字列ペアと、ダッシュで区切られたオプションの「subexpect-subsend」文字列ペアが含まれています。

ogin:-BREAK-ogin: ppp ssword: hello2u2

この行は、チャットプログラムが文字列 "ogin:"を期待する必要があることを示しています。割り当てられた時間間隔内にログインプロンプトを受信しない場合、リモートに割り込みシーケンスを送信するように割り当てられ、文字列 "ogin:"が期待されます。最初の「ogin:」を受信した場合、割り込みシーケンスは生成されません。ログインプロンプトを受信すると、チャットプログラムは文字列pppを送信し、プロンプト「ssword:」を待ちます。パスワードプロンプトを受信すると、パスワードhello2u2を送信します。復帰は通常、応答文字列の後に送信されます。特に\ rで要求されない限り、「expect」文字列の文字シーケンスには表示されません。予期シーケンスには、文字列を識別するために必要なもののみを含める必要があります。通常はディスクファイルに格納されるため、変数情報を含めることはできません。予想される文字列として、時間文字列、ネットワーク識別文字列、またはその他の可変データセグメントを使用することは、一般的に受け入れられません。

5.コメント

コメントはチャットスクリプトに埋め込むことができます。コメントは、最初の列の#(ハッシュ)文字で始まる行です。このようなコメント行は、チャットプログラムによって無視されます。期待シーケンスの最初の文字として「#」文字が必要な場合は、期待文字列を引用符で囲む必要があります。#(ハッシュ)文字で始まるプロンプトを待つ場合は、次のように記述する必要があります。
#今すぐプロンプトを待ち、ログアウト文字列
"#"をログアウトに送信します。

6.ファイルからデータを送信する

送信される文字列が@記号で始まる場合、残りの文字列は、送信される文字列を取得するために読み取られるファイルの名前と見なされます。読み込んだデータの最後の文字が改行文字の場合は、削除してください。ファイルは、通常のファイルの代わりに名前付きパイプ(またはfifo)にすることができます。これにより、チャットで別のプログラム(例えば、ユーザーにプロンプ​​トを出し、入力したパスワードを受け取るプログラム)と通信する方法が提供されます。

7.ABORT文字列

多くのモデムは、コールのステータスを文字列として報告します。これらのストリングは接続することも、キャリアフリーにすることも、ビジー状態にすることもできます。モデムがリモートサーバーに接続できない場合、スクリプトは通常終了する必要があります。問題は、スクリプトが受信したモデム文字列がわからないことです。1回の試行でビジーを受信する場合があり、次にオペレーターを受信しない場合があります。これらの「中止」文字列は、中止シーケンスを使用してスクリプトで指定できます。次の例に示すように、スクリプトに記述されています。

ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT

このシーケンスに対する期待はなく、ATZという文字列が送信されます。期待される応答は文字列OKです。OKを受信すると、文字列ATDT5551212が電話にダイヤルします。予期される文字列はCONNECTです。文字列CONNECTを受信すると、スクリプトの残りの部分が実行されます。ただし、モデムがビジーコールを検出した場合、ビジー文字列を送信します。これにより、文字列はアボート文字シーケンスと一致します。中止された文字列と一致する文字列が見つかったため、スクリプトは失敗します。文字列NO CARRIERを受信すると、同じ理由で中止されます。任意の文字列を受け取ることができます。任意の文字列は、チャットスクリプトを終了します。

8. CLR_ABORT文字列

このシーケンスにより、以前に設定されたアボート文字列をクリアできます。アボート文字列は、あらかじめ決められたサイズの配列で(コンパイル時に)保存されます; CLR_ABORTは、クリアされたエントリのスペースを再利用して、新しい文字列がスペースを使用できるようにします。

9.SAYストリング

SAY命令により、スクリプトは標準エラーを介して端末ユーザーに文字列を送信できます。チャットがpppdによって実行され、pppdがデーモンとして(その制御端末とは別に)実行される場合、標準エラーは通常/ etc / ppp / connect-errorsファイルにリダイレクトされます。SAY文字列は一重引用符または二重引用符で囲む必要があります。出力文字列でキャリッジリターンとラインフィードが必要な場合は、それらを文字列に明示的に追加する必要があります。SAY文字列を使用して、スクリプトの "ECHO OFF"が必要な部分に進捗メッセージを提供することができますが、それでもユーザーに何が起こったかを知らせます。例は次のとおりです。

ABORT BUSY
     ECHO OFF
     SAY "Dialling your ISP...\n"
     '' ATDT5551212
     TIMEOUT 120
     SAY "Waiting up to 2 minutes for connection ... "
     CONNECT ''
     SAY "Connected, now logging in ...\n"
     ogin: account
     ssword: pass
     $ \c
     SAY "Logged in OK ...\n" etc ...

このシーケンスでは、SAY文字列のみがユーザーに表示され、スクリプトの詳細はすべて非表示のままになります。たとえば、上記のスクリプトが機能する場合、ユーザーには次のように表示されます。

Dialling your ISP...
Waiting up to 2 minutes for connection ... Connected, now logging in ...
Logged in OK ...

10.REPORT文字列

REPORT文字列は打ち切り文字列に似ています。違いは、文字列のすべての文字と次の制御文字(キャリッジリターンなど)がREPORTファイルに書き込まれることです。REPORT文字列を使用して、モデム接続文字列の伝送速度を分離し、値をチャットユーザーに返すことができます。REPORT文字列ロジックの分析は、期待される文字列の検索など、他の文字列処理とともに実行されます。レポートと中止シーケンスに同じ文字列を使用することはあまり役に立ちませんが、可能です。レポート文字列はプログラムの完了コードを変更しません。これらの「レポート」文字列は、レポートシーケンスを使用してスクリプトで指定できます。次の例に示すように、スクリプトに記述されています。

REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account

このシーケンスに対する期待はなく、呼び出しを行うためにストリングATDT5551212が送信されます。予期される文字列はCONNECTです。文字列CONNECTを受信すると、スクリプトの残りの部分が実行されます。さらに、プログラムは文字列「CONNECT」とその後の接続率などの文字を目的のファイルに書き込みます。

11.CLR_REPORT文字列

このシーケンスにより、以前に設定されたREPORT文字列をクリアできます。REPORT文字列は、(コンパイル時に)事前に決定されたサイズの配列に格納されます。CLR_REPORTは、クリアされたエントリのスペースを再利用して、新しい文字列がスペースを使用できるようにします。

12.エコー

echoオプションは、モデムの出力をstderrにエコーするかどうかを制御します。このオプションは-eオプションで設定できますが、ECHOキーワードで制御することもできます。「予想送信」はECHO ONのECHOを有効にし、ECHO OFFはECHOを無効にします。このキーワードを使用すると、会話のどの部分を表示するかを選択できます。たとえば、次のスクリプト:

ABORT   'BUSY'
ABORT   'NO CARRIER'
''      ATZ
OK\r\n  ATD1234567
\r\n    \c
ECHO    ON
CONNECT \c
ogin:   account

モデムの設定とダイヤリングによって生成されたすべての出力は表示されませんが、CONNECT(またはBUSY)メッセージから開始すると、すべてがエコーされます。

13.ハングアップ

ハングオプションは、モデムのハングをエラーとして処理するかどうかを制御します。このオプションは、ダイヤリングシステムのスクリプトで非常に役立ちます。システムを一時停止してコールバックします。一時停止オプションはオンまたはオフにできます。一時停止が設定されており、モデムが一時停止されている場合(たとえば、最初の段階でコールバックシステムにログインした後)、チャットは引き続きスクリプトを実行します(たとえば、着信呼び出しと第2段階のログインプロンプトを待機しています)。着信コールが接続されたら、suspendコマンドを使用して、通常の中断信号の動作を再インストールする必要があります。以下は(簡単な)スクリプト例です。

ABORT   'BUSY'
              ''      ATZ
              OK\r\n  ATD1234567
              \r\n    \c
              CONNECT \c
              'Callback login:' call_back_ID
              HANGUP OFF
              ABORT "Bad Login"
              'Callback Password:' Call_back_password
              TIMEOUT 120
              CONNECT \c
              HANGUP ON
              ABORT "NO CARRIER"
              ogin:--BREAK--ogin: real_account
              etc ...

14.タイムアウト

初期タイムアウト値は45秒です。これは、-tパラメータを使用して変更できます。「TIMEOUT 0」を指定することもできます。次の期待文字列のタイムアウト値を変更するには、次の例を使用できます。

ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2

これにより、login:プロンプトを待機している間、タイムアウト期間が10秒に変更されます。次に、パスワードのヒントを探すときに、タイムアウト期間が5秒に変更されました。タイムアウトが変更されると、再度変更されるまで有効です。

15. EOTを送信する

特別なEOT応答文字列は、チャットプログラムがEOT文字をリモートに送信する必要があることを示します。これは通常、ファイルの終わりの文字シーケンスです。EOTの後に戻り文字は送信されません。EOTシーケンスは、シーケンス^ Dを使用して送信文字列に埋め込むことができます。

16.割り込みを生成する

中断された特殊応答ストリングにより、中断条件が送信されます。割り込みは、トランスミッタの特別な信号です。受信機での通常の処理は、伝送速度を変更することです。有効なログインプロンプトを受信できるまで、リモートサーバーで使用可能な転送速度を循環させるために使用できます。\ Kシーケンスを使用して、割り込みシーケンスを送信文字列に埋め込むことができます。

17.エスケープシーケンス

期待文字列と応答文字列には、エスケープシーケンスを含めることができます。応答文字列のすべてのシーケンスは有効です。

18.環境変数

コマンドラインで-Eオプションが指定されている場合、チャットスクリプトで環境変数を使用できます。メタ文字$は、置き換えられる環境変数の名前を紹介するために使用されます。要求された環境変数が設定されていないために置換が失敗した場合、変数は何も置換されません。

19.終了コード

チャットプログラムは、次の完了コードで終了します。

コード値 説明
0 プログラムの正常終了。これは、スクリプトの実行時に通常のエラーが発生しなかったことを示しています。
1 1つ以上のパラメーターが無効であるか、予期されるストリングが内部バッファーに対して大きすぎます。これは、プログラムが正しく実行されなかったことを示しています。
2 プログラムの実行中にエラーが発生しました。これは、何らかの理由で読み取りまたは書き込み操作が失敗したか、チャットがシグナル(SIGINTなど)を受信したことが原因である可能性があります。
期待文字列はあるが「-subsend」文字列がない場合、タイムアウトイベントが発生します。これは、条件に対してスクリプトを正しく記述しなかったか、予期しないイベントが発生して予期した文字列が見つからなかったことを意味する場合があります。
4 中止条件としてマークされた最初の文字列が表示されます。
5 中止条件としてマークされた2番目の文字列が表示されます。
6 終了条件としてマークされた3番目の文字列が表示されます。
7 中止条件としてマークされた4番目の文字列が表示されます。
他の終了コードも終了条件としてマークされた文字列です。

注意:
上記の記事に不明確な説明がある場合は、コメント欄にコメントしてください。時間があれば、できるだけ早く返信します。ありがとうございます!

おすすめ

転載: blog.csdn.net/qq_20677327/article/details/107950966