Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 8:

Протокол РРР

Программа chat

Программа chat является частью дистрибутива pppd и используется для упрощения строк при установлении соединения программой pppd. Для установления соединения с сервером РРР программой chat используется простой файл сценария. В сценарии chat используются текстовые строки, которые посылаются в ответ на текстовые строки, принятые от сервера. Далее chat приводит в соответствие текстовые строки в сеансе — один ответ на одну принятую строку. В листинге 8.2 показан пример сценария chat, который используется с pppd.

1 ""
2 ATDT5551234
3 CONNECT
4 ""
5 "ogin:"
6 rich
7 "word:"
8 guitar
9 "rich]$"
10 "exec /usr/sbin/pppd silent modem crtscts proxyarp
10.0.0.100:10.0.0.2"
Листинг 8.2. Пример chat сценария файл isp.chat

В строке 2 листинга 8.2 показана команда, которую посылает на модем pppd для звонка провайдеру Internet. В строке 3 указывается, какую строку текста должна ожидать pppd для инициализации установления соединения с РРР-сервером. Строка 4 сигнализирует о том, что программа chat принимает отклик модема об установлении соединения, на что она должна ответить обычной пустой строкой с символом возврата каретки. В строке 5 указывается, какую строку следует далее ожидать от сервера. Если на сервере разрешена регистрация модемного терминала, то он должен выдать соответствующую строку-приглашение login. В строке 6 программа pppd посылает идентификатор пользователя на сервер РРР, а в строке 8 — пароль. Получив доступ к командной строке сервера (см. строку 9), pppd запускает программу pppd для поддержки хоста РРР. Более детально параметры обсуждаются в разделе "Реализация сервера РРР в ОС Linux" далее в этой лекции.

Сценарий chat может использоваться клиентом pppd для дозвона на сервер РРР, где запускается программа pppd. Параметр pppd connect вызывает сценарий chat с использованием следующего формата:

pppd ttyS1 38400 connect '/usr/sbin/chat -v -f /home/rich/isp.chat'\modem crtscts defaultroute

Параметр connect вызывает сценарий chat для подключения к серверу РРР. Приведенная выше командная строка автоматически вызывает сервер РРР и запускает программу pppd на сервере. Параметр -v используется в программе для детализации вывода в файле отчета /var/log/messages. Его можно использовать при отладке и настройке соединения и не задавать, когда соединение работает нормально. В листинге 8.3 представлены строки, которые программы chat и pppd помещают в файл отчетов в течение сеанса РРР.

Sep 22 86 56 56 shadrach pppd[663] pppd 2.3.5 started by root, uid 0
Sep 22 06 56 56 shadrach kernel: registered device ppp0
Sep 22 06 56 57 shadrach chat[664]: send (ATZS7=100^M)
Sep 22 06 56 57 shadrach chat[664]: expect (OK)
Sep 22 06 56 57 shadrach chat[664]: ATZS7=100^M^M
Sep 22 06 56 57 shadrach chat[664]: OK
Sep 22 06 56 57 shadrach chat[664]: -- got it
Sep 22 06 56 57 shadrach chat[664]: sehd (ATDT5551234^M)
Sep 22 06 56 58 shadrach chat[664]: expect (CONNECT)
Sep 22 06 56 58 shadrach chat[664]: ^M
Sep 22 06 57 18 shadrach chat[664]: ATDT5551234^M^M
Sep 22 06 57 18 shadrach chat[664]: CONNECT
Sep 22 06 57 18 shadrach chat[664]: -- got it
Sep 22 06 57 18 shadrach chat[664]: send (^M)
Sep 22 06 57 18 shadrach chat[664]: expect (ogin:)
Sep 22 06 57 18 shadrach chat[664]: 28800/V42BIS^M
Sep 22 06 57 19 shadrach chat[664]: ^M
Sep 22 06 57 19 shadrach chat[664]: ^MRed Hat Linux release 5.2 (Apollo)
Sep 22 06 57 19 shadrach chat[664]: ^MKerhel 2.0.36 on an 1486
Sep 22 06 57 19 shadrach chat[664]: ^M
Sep 22 06 57 19 shadrach chat[664]: ^M^M
Sep 22 06 57 19 shadrach chat[664]: mail1.isp.net login:
Sep 22 06 57 19 shadrach chat[664]: --got it
Sep 22 06 57 19 shadrach chat[664]: send (rich^M)
Sep 22 06 57 19 shadrach chat[664]: expect (word:)
Sep 22 06 57 19 shadrach chat[664]: rich^M
Sep 22 06 57 19 shadrach chat[664]: Password:
Sep 22 06 57 19 shadrach chat[664]: -- got it
Sep 22 06 57 19 shadrach chat[664]: send (guitar^M)
Sep 22 06 57 20 shadrach chat[664]: expect (rich]$)
Sep 22 06 57 20 shadrach chat[664]: ^M
Sep 22 06 57 20 shadrach chat[664]: Last login: Tue Sep 21 20:45:47^M
Sep 22 06 57 21 shadrach chat[664]: [rich@mail1 rich]$
Sep 22 06 57 21 shadrach chat[664]: -- got it
Sep 22 06 57 21 shadrach chat[664]: send (exec /usr/sbih/pppd passive silent modem crtscts^M)
Sep 22 06 57 22 shadrach pppd[663]: Serial connection established.
Sep 22 06 57 23 shadrach pppd[663]: Using interface ppp0
Sep 22 06 57 23 shadrach pppd[663]: Connect: ppp0 <--> /dev/ttyS1
Sep 22 06 57 27 shadrach pppd[663]: local IP address 10.0.0.100
Sep 22 06 57 27 shadrach pppd[663]: remote IP address 10.0.0.2
Листинг 8.3. Строки из файла /var/log/messages для chat и pppd

Как видите, с помощью сценария chat и команд клиента pppd организуется сеанс РРР с сервером. Все эти процедуры можно поместить в файл сценария, с помощью которого по мере необходимости можно запускать сеанс РРР. Однако при использовании такого метода организации РРР-соединения требуется наличие какого-либо события, которое запускает сценарий. В качестве такого события может использоваться процесс cron, с помощью которого запускается сценарий РРР, когда требуется забрать или отправить почту. Ниже приведена программа, с помощью которой можно запускать клиента РРР по мере надобности.

Программа diald

Теперь, имея отлаженный сценарий chat и получив возможность звонить на сервер РРР и устанавливать соединение с ним, вы, возможно, захотите автоматизировать этот процесс. Если локальный сервер электронной почты на базе ОС Linux непосредственно подключается к провайдеру Internet, то необходимо разработать график частоты его подключений для обмена электронной почтой с сервером провайдера Internet (см. "Подключение почтового сервера к провайдеру Internet" , "Подключение почтового сервера к провайдеру Internet"). Один из методов — использование IP-маршрутизации по запросу. Под этим подразумевается, что соединение РРР устанавливается автоматически, как только обнаруживаются данные, которые направлены вне локальной сети (в сеть провайдера Internet).

Прекрасным средством для осуществления маршрутизации по запросу является программа diald, написанная Эриком Сченком (Eric Schenk). Как правило, в большинство версий ОС Linux входит бинарный пакет diald, уже готовый к установке. Если в имеющейся версии Linux эта программа отсутствует, ее можно получить в сети Internet на Web-сайте: http://diald.unix.ch.

Формат запуска программы diald следующий:

/usr/sbin/diald [device1....] [options...] [-- [pppd options]]

Здесь device — строка в ОС Linux для устройства tty, к которому подключается модем, options — параметры программы diald, а pppd options — параметры, которые diald передает программе pppd, когда вызывает ее. Параметры diald можно также задавать с помощью файла конфигурации.

Файл конфигурации для программы diald применяется для установки параметров, используемых ею при вызове программ pppd и chat, а также для задания списка сценариев, которые будут выполняться для старта и останова pppd. Файл конфигурации находится в каталоге /etc и называется diald.conf. В листинге 8.4 приведен пример файла diald.conf, который заменяет параметры pppd, приведенные ранее в примере.

1 ###
2 # /etc/diald.conf - diald configuration
3 #
4 # see /usr/lib/diald for sample config files
5 #
6 mode ppp
7 connect '/usr/sbin/chat -f /home/rich/isp.chat -t 35000'
8 connect-timeout 180
9 device /dev/ttyS1
10 speed 115200
11 modem
12 lock
13 crtscts
14 local 10.0.0.100
15 remote 10.0.0.2
16 defaultroute
17 include /usr/lib/diald/standard.filter
18 fifo /etc/diald/diald.ctl
Листинг 8.4. Пример файла конфигурации /etc/ diald.conf

В строке 7 листинга 8.4 задан параметр connect, который вызывает программу chat с помощью сценария chat, использованного в примере с pppd. Строка 8 предусматривает, что модем хоста РРР находится в режиме ответа на четвертый звонок (так что это не будет мешать вашим родным и друзьям, если они звонят по той же телефонной линии). Таким образом, задается интервал времени для выполнения сценария chat. В нашем случае это три минуты (180 секунд). В строке 17 программа diald обращается к файлу standard.filter, который используется diald для описания условий запуска и останова сеанса РРР. В строке 18 указывается на специальный файл, который используется сопутствующей программой dctrl для мониторинга сеанса РРР. Программа dctrl — это графический пакет для мониторинга РРР-соединения. Он позволяет оценить пропускную способность соединения, а также немедленно сигнализирует о любых ошибках в течение сеанса РРР.

После конфигурирования параметров diald можно произвести их тестирование. Программа diald запускается в фоновом режиме и запускать ее нужно с правами пользователя root. Когда diald обнаруживает в сети условия, которые требуют соединения с сервером РРР, она запускает программу chat. Та, в свою очередь, организует сеанс с сервером РРР и запускает программу pppd на локальном компьютере. Когда работа diald отлажена, можно написать для нее сценарий запуска, согласно которому она будет стартовать во время загрузки системы. Всякий же раз, когда какая-либо программа должна получить доступ к удаленному хосту по IP (например, fetchmail ), будет запускаться diald и открывать сеанс РРР. Великолепно!

Valentin Diduk
Valentin Diduk
Украина, одесса, кпи, 2010
Евгений Олабин
Евгений Олабин
Беларусь, Гродно