Набор номера с chat

Одна из вещей, которая может вас насторожить в приведенном выше примере, это то, что вы должны установить связь вручную, прежде чем сможете запустить pppd. В отличие от dip, pppd не имеет своего сценарного языка для набора телефонного номера и входа в систему, а полагается на внешнюю программу или shell script. Команда, которую следует выполнить, может быть передана pppd с опцией connect. Pppd перенаправляет ввод и вывод на последовательную линию. Одна из полезных программ для этой цели - expect, созданная Don Libes. Эта программа имеет мощный язык, основанный на Tcl, и была разработана специально для таких задач.

Пакет pppd включает программу под названием chat, которая позволяет вам использовать UUCP-стильный chat script. В основном, chat script содержит поочередные последовательности строк, которые мы ожидаем получить от удаленной системы, и ответы, которые мы отправляем в ответ. Эти строки будут называться строками "ожидания" и "отправки". Например, ожидая от удаленной системы приглашения для входа, и отправляя имя пользователя в ответ:

login: b1ff password: s3kr3t

Это основное предназначение chat scripts. Полный script, используемый для соединения с сервером PPP, должен также включать соответствующие модемные команды. Предположим, ваш модем поддерживает команды Hayes, и номер телефона сервера - 318714. Полный вызов chat для соединения с сервером выглядел бы так:

$ chat -v '' ATZ OK ATDT318714 CONNECT '' login: ppp password: GaGariN

Опция -v делает chat логировать все действия в журнал syslog daemon's local2 facility. Определение chat script непосредственно в командной строке может быть рискованным, так как другие пользователи могут видеть команды процессов с помощью команды ps. Эту проблему можно обойти, поместив chat script в файл, например, dial-c3po. Вы можете указать chat прочитать script из файла, передав опцию -f, сопровождаемую именем файла. Таким образом, команда для запуска pppd будет выглядеть следующим образом:

# pppd connect "chat -f dial-c3po" /dev/cua3 38400 -detach crtscts modem defaultroute

Если вы настроите syslog.conf так, чтобы перенаправить эти логи в файл, убедитесь, что этот файл недоступен для чтения всеми пользователями, так как chat также регистрирует введенный chat script, включая пароли.

Кроме опции соединения, которая определяет диалоговый script, мы добавили еще две опции в командную строку: -detach, которая указывает pppd не отделяться от консоли и стать фоновым процессом. Ключевое слово модема заставляет его выполнять определенные действия с модемом, такие как "повесить трубку" до и после звонка. Если вы не используете этот параметр, pppd не будет мониторить линию DCD и может не заметить неожиданных разрывов соединения.

Примеры, приведенные выше, были довольно простыми; chat позволяет создавать гораздо более сложные chat script. Одна из полезных особенностей - возможность точно указать строки, на которых chat должен прекратить работу из-за ошибки. Типичные ошибочные строки - это BUSY или NO CARRIER, которые ваш модем обычно генерирует, когда вызываемый номер занят или не отвечает. Чтобы сделать chat реагирующим на них немедленно, вы можете указать их в начале script, используя ключевое слово ABORT:

$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ...

В таком режиме вы можете изменить таймаут для определенных частей chat script, добавив опцию TIMEOUT. Для получения дополнительной информации, пожалуйста, обратитесь к руководству chat(8). Иногда вы можете захотеть добавить некоторый вид условного выполнения частей chat script. Например, если вы не получаете приглашение к входу от удаленной системы, вы можете захотеть отправить BREAK или возврат каретки. Это можно достичь, добавив под-скрипт к строке ожидания. Он состоит из последовательности строк "отправка" и "ожидание", таких же, как и в основном скрипте, и разделяется дефисами. Под-скрипт выполняется каждый раз, когда ожидаемая строка не получена. В приведенном выше примере chat script был бы модифицирован следующим образом:

login:-BREAK-login: ppp password: GaGariN

Теперь, когда chat не видит приглашения от удаленной системы, под-скрипт сначала отправляет BREAK, а затем снова ожидает приглашение. Если приглашение теперь появляется, скрипт продолжает работать как обычно; в противном случае он завершается с ошибкой.

Chat предоставляет гибкость для решения различных задач, связанных с набором номера и входом в систему. Однако следует помнить о безопасности и избегать размещения конфиденциальной информации, такой как пароли, прямо в скриптах или на командной строке, чтобы предотвратить несанкционированный доступ к ним.

В заключение, использование chat в сочетании с pppd позволяет вам настроить процесс набора номера и входа в систему таким образом, чтобы он соответствовал вашим требованиям, делая этот процесс максимально автоматизированным и удобным.