Использование программы DIP.
Как уже было сказано ранее dip -- мощная программа, которая может упростить и автоматизировать процесс соединения со SLIP-сервером, регистрации на нем и настройки slip-интерфейса с помощью программ ifconfig и route.
Для использования dip пишется `dip-скрипт' -- набор команд, понимаемых dip. Эти команды указывают как выполнять все необходимые для установки соединения процедуры. Для того, чтобы понять основную идею, можете взглянуть на файл sample.dip, идущий в комплекте с программой dip. dip имеет множество опций, с которыми можно ознакомится на man-странице, файле README и файлах-примерах из пакета dip.
p>Вы могли заметить, что в скрипте sample.dip предполагается, что Вы соединяетесь со статическим SLIP-сервером, и выделенный Вам IP-адрес известен заранее. Для динамических SLIP-серверов в последних версиях программы dip
предусмотрена возможность автоматически считывать и использовать выделенный динамически IP-адрес. Приводящийся ниже пример -- модифицированный файл sample.dip из пакета dip337j-uri.tgz. Он может послужить хорошей отправной точкой. Можете скопировать его в /etc/dipscript
и отредактировать в соответствии с Вашей конфигурацией.
# # sample.dip Dialup IP connection support program. # # Этот файл иллюстрирует использование программы DIP. # Он был опробован на динамических серверах типа Annex, если Вы # используете статический сервер, используйте файл sample.dip из # пакета dip337-uri.tgz . # # # Version: @(#)sample.dip 1.40 07/20/93 # # Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
#
main: # Установка имени и адреса машины-сервера. # В данном примере это 'xs4all.hacktic.nl' (== 193.78.33.42) get $remote xs4all.hacktic.nl # Установка маски на интерфейсе sl0 в 255.255.255.0 netmask 255.255.255.0 # Выбор последовательного порта и скорости соединения. port cua02 speed 38400
# Сброс модема. # Иногда приводит к проблемам! reset
# "Стандартные" предопределенные значения переменной "errlevel": # 0 - OK # 1 - CONNECT # 2 - ERROR # # Можете изменить их в функции "addchat()"
# Подготовка к дозвонке. send ATQ0V1E1X4\r wait OK 2 if $errlvl != 0 goto modem_trouble dial 555-1234567 if $errlvl != 1 goto modem_trouble
# Соединение установлено. Регистрация. login: sleep 2 wait ogin: 20 if $errlvl != 0 goto login_trouble send MYLOGIN\n wait ord: 20 if $errlvl != 0 goto password_error send MYPASSWD\n loggedin:
# Регистрация завершена. wait SOMEPROMPT 30 if $errlvl != 0 goto prompt_error
# Перевести сервер в режим SLIP send SLIP\n wait SLIP 30 if $errlvl != 0 goto prompt_error
# Получение IP-адрес от сервера. # Здесь предполагается, что после перехода в режим SLIP сервер сообщает # выделенный IP-адрес get $locip remote 30 if $errlvl != 0 goto prompt_error
# Установка параметров протокола SLIP. get $mtu 296 # Выполнить "route add -net default xs4all.hacktic.nl" default
# Завершение done: print CONNECTED $locip ---> $rmtip mode CSLIP goto exit
prompt_error: print TIME-OUT waiting for sliplogin to fire up... goto error
login_trouble: print Trouble waiting for the Login: prompt... goto error
password:error: print Trouble waiting for the Password: prompt... goto error
modem_trouble: print Trouble occurred with the modem... error: print CONNECT FAILED to $remote quit
exit: exit
В приведенном примере предполагается, что вы соединяетесь с динамическим SLIP-сервером. Если Вы используете статический сервер, используйте файл sample.dip из пакета dip337-uri.tgz.
Когда dip обрабатывает команду get $local, он ищет в полученных данных строку, которая выглядит как IP-адрес, то есть числа, разделенные символами `.'. Эта возможность была внесена специально для работы с динамическими SLIP-серверами. Она дает возможность автоматизировать процесс настройки на неизвестный заранее адрес.
В приведенном примере маршрутизация по умолчанию производится через slip-соединение, если для Вашей конфигурации это не подходит, уберите команду default из скрипта. Если Вы запустите программу ifconfig после окончания работы скрипта, Вы обнаружите устройство sl0. Это Ваш slip-интерфейс. При необходимости Вы можете его перенастроить с помощью программ ifconfig и route после того как программа dip завершится.
Программа dip позволяет выбрать много разных протоколов работы с помощью команды mode, наиболее распространенный пример -- протокол сжатия данных cSLIP. Обе машины, участвующие в slip-соединении должны установить одинаковый протокол работы.
Приведенный пример достаточно надежен и корректно обработает большинство возможных ошибок при соединении. Более подробная информация содержится на man-странице программы dip. Кроме того, Вы можете написать скрипт который будет пытаться перезванивать несколько раз в течении заданного периода времени или даже перебирать по очереди доступные SLIP-сервера, если их несколько.