Использование dip

  Теперь  это все просто.  Однако,  Вы  могли   бы    захотеть   автоматизировать вышеупомянутые шаги так, чтобы Вы только  вызывли бы   простую команду, которая выполняет все те шаги, показанные выше. Это - то,   для чего нужен dip. (2) Текущее версия этого выпуска - версия 3.3.7.   

Онаисправлялась несколькими людьми, поэтому Вы уже больъе нз сможете   говорить о dip как о программе. Эти различные элементы развития будут   "обнадеживающе" слиты в будущей версии.

Dip обеспечивает интерпретатор простым языком, который  обрабатывает   модем для Вас, преобразуя линию в SLIP режим,  и  конфигурируя  interface.   Это довольно примитивно и ограниченно, но вполне подходяще  для   большинства  случаев. Новая версия dip(а) может описать большое количество   многосторонних  языков в один день.   Чтобы было возможным сконфигурировать  SLIP  interface,  dip  требует   root привелегию. Это теперь было бы  соблазнительно для того, чтобы  сделать   dip setuid к root, таким образом Все пользователи могли бы соединиться с   некоторым SLIP сервером без необходимости  прдеоставления  им  root доступа.  Это очень опасно, потому что при установке фиктивных   interface(ов)  и  заданных по умолчанию маршрутов dip может разрушить   направление  на  вашей  сети. Даже еще хуже, это даст вашим пользователям   приоритет  на  подсоединение  к любым SLIP серверам, и начать опасную атаку   на  Вашу  сеть.  Так,  если  Вы хотите позволить Вашим пользователям   запустить SLIP связь, напишите  маленькие программки для каждого   предполагаемого SLIP  сервера,  и  вызовите  dip  со специфическим script(ом), который установит связь. Эти программы могут быть затем   безопасно сделаны setuid root. (3) 
8.3.1 Типовой  Script(сценарий).

Он может использоваться для   связи с cowslip, вызывая dip со script именем как аргумент:   
2. Dip подразумевается Dialup IP. Он был написан Fred van Kempen.   3. Diplogin может (или должен)  быть запущен setuid(ом). 

# Sample dip script for dialing up cowslip
# Set local and remote name and address
get $local vlager
get $remote cowslip
"          port cua3                # choose a serial port
speed 38400              # set speed to max
modem HAYES              # set modem type
reset                    # reset modem and tty
flush                    # flush out modem response
# Prepare for dialing.
send ATQ0V1E1X1\r
wait OK 2
if $errlvl != 0 goto error
dial 41988
if $errlvl != 0 goto error
wait CONNECT 60
if $errlvl != 0 goto error
# Okay, we're connected now
sleep 3
send \r\n\r\n
wait ogin: 10
if $errlvl != 0 goto error
send Svlager\n
wait ssword: 5
if $errlvl != 0 goto error
send hey-jude\n
wait running 30
if $errlvl != 0 goto error
# We have logged in, and the remote side is firing up
SLIP.
print Connected to $remote with address $rmtip
default                  # Make this link our default
route
mode SLIP                # We go to SLIP mode, too
# fall through in case of error
error:
print SLIP to $remote failed.
Типовой dip script.
# dip cowslip.dip
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)
Written by Fred N. van Kempen, MicroWalt Corporation.
connected to cowslip.moo.com with addr 193.174.7.129
#

После соединения с cowslip и включением SLIP, dip отделится от   терминала  и отойдет к предоставлению возможности SLIP связи. Вы  сможзте "   затем  начать использовать обычные сетевые услуги на SLIP связи. Чтобы   завершить  связь, просто вызовите dip c опцией -k. Это пошлет  hangup   сигнал  dip  процессу, используя id dip запись в /etc/dip.pid: (4)   

# kill -k

На dip script языке, ключевые слова имеющие префикс с символом $   обозначают различные имена. Dip имеет предопределенное множество   переменных,  которые будут  будут  перечислены  ниже.  $remote  и  $local,    например,   содержат hostnames локального и незначительного хоста,   вовлеченных в SLIP связь.   

Первых два оператора в типовом script - получают команды, которые   являются dip  способом  установки  переменных.  Здесь,  локальный  и   незначительный hostname установленн к vlager и cowslip, соответственно.   

Следующие пять операторов устанавливают  линию  терминала  и  модема.   Reset посылает reset строку  к  модему;  для  Hayes-совместимых  модемов,   это команда ATZ. Следующий оператор игнорирует реакцию модема,  так  что   login chat в линиях работал правильно.  Сhat  -  довольно прост:  он   просто  набирает  номер  41988,  номер  телефона  cowslip,  и подсоединятся   в  account  Svlager  через  пароль  hey-jude.  Wait  команда заставит dip   ждать строку, данную как его первый  аргумент;  номер,  данный как второй   аргумент делает wait time, если никакая строка не была получена. If команды   разбросаны в процедуре входа в систему, и проверяют то, что никакая ошибка   не появилась при выполнении этой команды.

Итоговые(final) команды, выполненные после  logging,  заданы  по   умолчанию, которые заставят SLIP  связать  заданный  по  умолчанию  маршрут   со  всеми хостами, и режимом, который отключает SLIP на линии  и   конфигурирует interface и таблицу маршрутов(routing tables) для Вас.   


Dip ссылка.

"Хотя широко используемый, dip  не  был  еще  очень  хорошо  описан.   Поэтому, в этом разделе мы дадим ссылку  для  большинства  dip  команд.  Вы   можете получить краткий обзор всех команд, вызывая dip  в  test  режиме,  и   вводя help  команду.  Для  того,  чтобы  выяснять  относительно  синтаксиса   команды, Вы можете набрать его без каких-либо аргументов;  конечно  это  не   работает с командами, которым не нужны никакие аргументы.   

$ dip -t
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)   Written by Fred N. van Kempen, MicroWalt Corporation.   
DIP> help   DIP knows about the following commands:   
databits default  dial     echo     flush
get      goto     help     if       init
mode     modem    parity   print    port
reset    send     sleep    speed    stopbits
term     wait
DIP> echo
Usage: echo on|off
DIP>

На всем протяжении, примеры, которые выделяют DIP> prompt   показывают,  как ввести  команду  в  test  режиме,  и  что  output   производится.    Примеры, испытывающие недостаток в prompt должны   приниматься как script отрывок.


Команды Модема.   

Имеется ряд rоманд,  для которых dip обеспечивает  конфигурацию   вашей  последовательной линии и модема. Некоторые из  них  -  очевидны,   такие  как  порт,  который выбирает последовательный порт, и   быстродействие,  биты  данных,  стоповые биты, и четность, которые   устанавливают общие параметры линии.    
Команда  модема  выбирает  тип  модема.  В  настоящее  время,   единственый поддерживаемый тип - HAYES. Вы должны обеспечить dip типом   модема,  или  он откажется набирать номер и выполнять reset команды. Reset   команда  посылает reset строку на модем; используемая строка зависит от   избраннпго вами  типа модема. Для Hayes-совместимых модемов, это - ATZ.

  • Flush code может использоваться для того, чтобы убрать все  реакции,   которые модем посылает so far. Иначе chat script мог бы быть  спутанным,   потому  что  он читает OK реакции из более ранних команд.  
  • Команда init выбирает initialization строку, которую нужно набрать   перед набором номера. Значение по умолчанию для Hayes модемов - "ATE0 Q0 V1   X1'', которая включает отображение на экране команд и long result code,  и    выбирает набор вслепую (нет проверки тона шкалы).
  •   Команда dial в конце посылает initialization строку  на  модем  и   набирает номер системы. Заданная по умолчанию dial команда для Hayes   модемов - ATD.

echo и term.

  • Команда ECHO служит как помощь в отладке, в которой использование   ECHO  ON делает dip ECHO на консоли и все посылает  к  порядковому   устройству.  Он может быть выключен снова, набирая ECHO OFF.
  •   Dip также позволяет  Вам  оставить  script  режим  временно  и   вступить  в terminal режим. В этом режиме, Вы можете использовать dip точно   так же  как и обычную terminal программу, пишущей в последовательную  линию   и  читющей  из  нее. Чтобы оставить этот режим, введите " Ctrl-] ".   

Get Команда.

  • Get команда - dip  способ  установки  переменной.  Самая  простая   форма  - установить переменную как константу,  как  это  делалось  в   вышеупомянутом примере.  Вы  можете,   также  запросить  пользователя  для   входа определяя ключевое слов вместо значения:  

  DIP> get $local ask
Enter the value for $local:

Третий  метод  состоит  в  том,  чтобы  попробовать  получить   значение  от отдаленного хоста. Причудливо, на первый взгляд, но это очень   полезно в некоторых случаях: некоторые SLIP серверы не позволяют Вам   использовать Ваш собственный IP адрес на SLIP  связи,  но  будет   приписывать  Вам  один  из объединения  адресов  всякий  раз,  когда  Вы   набираете  номер,   печатая сообщение, которое информирует Вас относительно   адреса к которому  Вы  были назначены. Если просмотры сообщения -  что  -   нибудь  вроде  этого  ``Your address: 193.174.7.202'', то следующий   фрагмент dip кода допустил бы Вас до подбора адреса:
wait address: 10
get $locip remote


Print команда   

Это команда к ECHO тексту к dip консоли.  Любая  из  dip  переменных   может использоваться в print командах, такие как:   
DIP> print Using port $port at speed $speed
Using port cua3 at speed 38400


Переменные имена(Variable Names)

Dip только понимает предопределенное множество переменных.   Переменное  имя всегда начинается с символа доллар и должен быть написан в   нижнем  регистре.

$local и $locip переменные содержат название локального имени  хоста   и  IP адреса. Установка hostname заставляет dip сохранить канонический    hostname в $local, в то же самое время приписывая  $locip  соответствующий   IP  адрес. Аналогичная вещь случается при установке $locip.

$remote и $rmtip переменные делают тоже самое для отдаленных  хостов   и адресов. $mtu содержит MTU значение для соединения.   
Эти  пять  переменных - единственные,  которые    могут    быть   назначены непосредственно используя get команду. Хост других переменных   может быть только установлен через соответствующие команды, но  может   использовать и print операторы; это - $modem, $port, и $speed.  

$errlvl - переменная, через  которую  Вы  можете  обращаться  к   результату   последней выполненой команды. Уровень ошибки 0 указывает  на  успех,   в  то   время как ненулевое значение обозначает ошибку.   


If и Goto Команды

If команда - более условная штука, чем то что  обычно  подразумевает     под   if.
Синтаксис:
if var op number goto label   где выражение должно быть  простым сравнением  между  одной  из   переменных $errlvl, $locip, и $rmtip. Второй операнд должен быть целым   числом; оператор op может быть один из ==,!=, <,>, < =, и > =.
Команда goto делает выполнение из script  continue  строки,  несущей   эту метку. Метка должна появиться как первый токен в линии, и немедленно   должна оканчиваться двоеточием.


send, wait и sleep

Эти команды  выполняют  простые  chat  scripts  в  dip.  Send   выводит  его аргументы на последовательную линию.  Он  не  поддерживает   переменные,  но понимает все C-style backslash character  sequences  типа   \n  и  \b.  Знак тильды (~) используется как сокращение для каретки   return/newline.   wait  берет  слово  как  аргумент,  и   просматривает    весь    вход   на  последовательной линии, пока он не распознает это  слово.  Слово  само   по себе  непосредственно не может содержать пробелы. Выборочно Вы  можете   дать wait timeout value как второй  аргумент;  если  ожидаемое  слово  не   получено внутри в течении заданного времени, команда возвратится со   значением $errlvl равным 1.

Sleep оператор может быть  использован  для  того,  чтобы  ждать   некоторое количество  времени,   например, patiently    ждет    любую   login последовательность для завершения. И снова, интервал определен в   секундах.


mode и default

Эти команды используются для того, чтобы переключить последовательную   линию в SLIP режим и сконфигурировать interface.   
Mode команда - последняя команда, выполненная dip  перед  гонгом  в   daemon режиме. Пока ошибка не появляется, команда ничего не возвращает.    Mode берет название протокола как аргумент. Dip постоянно распознает   SLIP и CSLIP как подходящие имена. Текущая версия dip не понимает adcptive   SLIP.

После отключения SLIP  режима  на  последовательной  линии,  dip   выполняет ifconfig  для  того,  чтобы  сконфигурировать  interface  как   двухточечную связь(point-to-point  link),  и  вызвать  маршрут  к   множеству   маршрутов незначительного хоста.

Если, кроме того, script выполняет  заданную  по  умолчанию  команду   перед mode, то dip также задаcт по умолчанию точку маршрута на SLIP связь.