Создание сценариев модемного доступа

Вопрос автоматизации подключения к Сети заинтересовал меня практически с первых дней работы с ней по коммутируемой линии.
Действительно, когда я сам сижу перед компьютером, набрать имя пользователя и пароль в терминальном окошке и выбрать тип соединения не так сложно, хотя и требует внимательности и аккуратности. Но когда я предлагаю кому-то из моих домашних поработать в Сети в мое отсутствие, приходится, во-первых, разъяснять, что и где нажимать, во-вторых, сообщать имя пользователя и пароль, что отнюдь не способствует безопасности моего счета у провайдера. Ну а если речь идет о работе самостоятельных приложений, таких как оффлайн-броузеры (принцип работы которых состоит в том, чтобы загрузить указанные страницы из Сети в заданное время без вашего участия), то тут вопросов вообще не возникает: нужен автомат, который сам соединит машину с Интернет.
Где достать такой автомат и как его запрограммировать? В дистрибутив Windows'95 программа обработки сценариев (scripting tool) почему-то не входит. Если вы еще не потеряли фирменный CD-ROM Windows'95, то сможете найти на нем информационный файл (.inf) для установки программы в каталоге \Admin\Apptools\Dscript (путь указан от корневого каталога CD-ROM). Если это так, можете поставить ее, воспользовавшись закладкой Windows Setup из пункта Add/Remove Programs панели управления. Однако учтите, что этот "сценарист" (scripter) имеет ограниченный набор команд и годится только для написания простых макросов. Впрочем, для реализации приводимого ниже примера этого вполне достаточно.
Если ваш CD-ROM Windows'95 утерян, испорчен или украден конкурентами, или вы вдруг устанавливали систему с гибких дисков, спасительным средством может стать установка пакета MicrosoftPlus!, который, однако, стоит дополнительных денег. Если у вас нет желания (или возможности) тратиться на кучу красивых безделушек (каковой и является вышеозначенный MSPlus!), то лучше всего заглянуть на сервер ftp://ftp.microsoft.com/ и скачать оттуда файл script.exe (размер 153 Кб). Полный путь к нему: ftp.microsoft.com/softlib/mslfiles/script.exe. Запуск этого исполняемого файла приведет к автоматической установке той самой программки, которая введет за вас имя и пароль в момент соединения с сервером. Она сделает это, руководствуясь командами, записанными в текстовом файле сценария, причем сценарии могут быть свои для разных типов стандартных соединений (Connection).
После того, как все установлено, можно приступать к написанию первого сценария. Он составляется в любом текстовом редакторе, создающем чистый текст без спецсимволов (например, Notepad), и имеет определенную структуру (язык все-таки). Начинается сценарий словами proc main, заканчивается словами end proc. Эти команды сообщают системе соответственно о начале и завершении сценария. По ходу своей работы сценарий пытается имитировать работу человека, действуя по принципу: увидел приглашение - ответил на него. В этом ему помогают команды waitfor и transmit. Первая ожидает сообщения от сервера (например waitfor "Login:" - ожидает сообщения "Login:"). Вторая - передает строку, указанную в кавычках (например transmit "Hello Friend!" - отправит фразу "Hello Friend!"). Нажатие на клавишу Enter, точнее символ Carriage return (Возврат каретки), изображается сочетанием символов ^M.
Для реализации сложных сценариев, а также исходя из соображений безопасности, вместо непосредственно имени пользователя и пароля в сценарий лучше включать их подстановки, имеющие вид: $USERID - для имени пользователя и $PASSWORD - для пароля.
Реальные имя и пароль вводятся в окошке Connect to... перед сеансом связи. Если надо запомнить пароль, отметьте пункт Save password (Сохранить пароль), в противном случае введенный пароль будет использован только один раз.
Некоторые серверы посылают пользователю сразу после установления соединения целую кучу приветствий и предупреждений, да и связь может устанавливаться не сразу, поэтому иногда с поиском ключевой фразы или передачей своей информации необходимо немного подождать. Для этого служит команда delay N, где N - число секунд ожидания. Вот, пожалуй, и все основные команды, которые могут пригодиться для написания простого сценария.
Давайте рассмотрим сценарий, который прекрасно работает у меня для подключения к московскому провайдеру DataForce.

; Начало сценария
proc main
; Ожидаем 2 секунды, пока пройдут приветствия,
; время можно сделать и меньше
delay 2
; Ждем фразу "Login:". Обратите внимание
; на регистр и отсутствие
; пробелов - команда ждет точно то, что написано
; в кавычках.
waitfor "Login:"
; Дождались? - передаем имя пользователя,
; записанное в окошке Connect to...
; а следом за ним - символ Carriage return
; знак "+" (плюс) здесь используется
; для слияния строк
transmit $USERID + "^M"
; Ждем фразу "Password:"
waitfor "Password:"
; Передаем пароль, записанный в окошке
; Connect to...,
; а следом за ним - символ Carriage return
transmit $PASSWORD + "^M"
; Ожидаем 2 секунды, пока сервер проверит
; правильность нашего имени и пароля
delay 2
; Ждем фразу, предлагающую нам выбрать
; тип соединения
waitfor "Please enter your choice:"
; Провайдер предлагает соединение нескольких типов,
; нам требуется соединение PPP, поэтому передаем
; цифру 1 и Enter
transmit "1" + "^M"
; Ура, сценарий завершен, можно работать
end proc
 

Сочиненный сценарий лучше всего сохранить в каталоге \Program Files\Accessories\ в виде файла с расширением .scp - тогда вам не придется долго его искать, программа исполнения настроена на этот каталог.
Готовый сценарий теперь надо связать с имеющимся соединением (Connection) и протестировать. Нажмите кнопку Start, выберите пункт Accessories, затем Dial-Up Scripting Tool. В окошке слева будет список имеющихся соединений: выберите то, для которого написан сценарий, и нажмите кнопку Browse. Если файл сценария сохранен в указанном выше каталоге, вы сразу увидите его имя, если нет - отыщите его там, где вы его сохранили. Выберите файл и нажмите Open.
Исходя из аксиомы, что в любой программе есть ошибки, написанный сценарий надо протестировать. Выберите пункт Step through script (пошаговая отладка), поставив около него галочку. Нажмите кнопку Apply для сохранения изменений. И если раньше вы пользовались маленьким терминальным окошком для ручного ввода имени и пароля, то теперь его появление надо отменить, иначе сценарий работать не будет. Нажмите кнопку Properties в том же окне и уберите галочку напротив пункта Bring up terminal window after dialing в пункте Configure. Затем окно можно закрыть кнопкой Close, так как для отладки сценария оно не понадобится. Теперь звоним, дважды щелкнув по названию соединения (не забудьте ввести имя пользователя и пароль в окне Connect to...). После установления соединения появится собственное терминальное окошко "сценариста" и окно с текстом сценария, в котором нажатием кнопки Step вы сможете выполнять по одной команде и смотреть на результат.
Для отмены в любой момент нажмите кнопку Cancel в терминальном окошке. Если все работает хорошо, отмените пошаговую отладку и отметьте пункт Start terminal screen minimized.
Теперь можете насладиться тем, как быстро происходит подключение, а главное тем, что ваше участие более не требуется. Если вас заинтересовало, что еще можно делать в сценариях подключения, прочтите документ script.doc, находящийся в каталоге Program Files/Accessories/. Он содержит полный список команд описания сценариев и примеры работы с ними.
Вы сможете составить, например, универсальный сценарий для различных вариантов подключения к провайдерам, а также повысить надежность его работы, введя условие завершения сценария при слишком долгом ожидании ответа от сервера.
Используются технологии uCoz