- •Введение
- •Тема 1. Двухпросмотровый ассемблер
- •Тема 2. Com-сервер для обработки и хранения результатов тестирования.
- •Тема 3. Дисковая утилита для просмотра fat.
- •Тема 4. Сервер автоматизации ole.
- •Тема 5. Дефрагментатор файловой системы.
- •Элемент каталога для короткого имени
- •Тема 6. Монитор системных ресурсов для Windows 98/2000.
- •Тема 7. Менеджер процессов и потоков для Windows 98/2000.
- •Тема 8. Файловый менеджер для Windows 98/2000/nt.
- •Тема 9. Формат исполняемого pe-файле в Windows 98/nt.
- •Тема 10. Запуск в определенное время различных программ.
- •Тема 11. Утилита, сохраняющая в файле информацию из системного реестра о программах, установленных на компьтере.
- •Тема 12. Утилита для очистки системного реестра Windows.
- •Тема 13. Утилита, отслеживающая изменения в файловой системе Windows в заданных каталогах.
- •Тема 14. Просмотрщик таблицы разделов и fat.
- •Тема 15. Утилита MaxSplitter
- •Тема 16. Утилита удаленного администрирования.
- •Тема 17. Простая почтовая программа на основе протокола smtp.
- •Тема 18. Ftp - клиент.
- •Тема 19. Ftp - сервер.
- •Тема 20. Системные сервисы Windows nt/2000.
- •Литература
- •Приложение 1. Tcp/ip Программирование с использованием WinSock
- •Создание и использование сокетов
- •Закрытие сокета
- •Функция shutdown()
- •Методы прекращения работы гнезда
- •Функция bind()
- •Приложение может послать запрос на соединение с помощью функции
- •Отправка и прием данных через сокеты потоков
- •Ожидание и обработка событий
- •Использование функции wsaAsyncSelect()
- •Приложение 2. Команды ftp
- •Приложение 3. Команды smtp
- •Приложение 4. Заголовки почты smtp
Приложение 3. Команды smtp
"Беседа" SMTP состоит из последовательности команд, которые клиент SMTP выдает серверу. Сервер отвечает цифровым кодом ответа с последующим текстовым сообщением. Цифровые коды ответа состоят из цифр, первая из которых указывает на успешное и неудачное завершение команды. В табл. А4 перечислены значения первой цифры кода.
Таблица А4. Значения первой цифры кодов ответа SMTP
Первая цифра |
Значение |
1 |
Положительный предварительный ответ. Команда была принята, но ожидает команды подтверждения от клиента |
2 |
Положительный ответ о завершении команды. Команда выполнена успешно |
3 |
Положительный промежуточный ответ. Команда была принята, но ожидает дополнительную информацию от клиента |
4 |
Переходный отрицательный ответ о завершении команды. Команда была отброшена, однако клиент должен предпринять новую попытку |
5 |
Постоянный отрицательный ответ о завершении команды. Команда отброшена |
Вторая цифра кодов ответа указывает категорию ответа (табл. А5).
Таблица А.5. Значения второй цифры кодов ответа SMPT
Цифра |
Значение |
0 |
Синтаксис |
1 |
Информация |
2 |
Соединение |
5 |
Система почты |
Третья цифра предоставляет более точную градацию значений для каждой из категорий ответа.
Подсоединение к серверу SMTP. Для инициализации сеанса SMTP клиент устанавливает соединение с сервером SMTP с помощью порта 25 ТСР. После установки соединения клиент принимает код ответа, который показывает, может ли сервер SMTP выполнять соединение и открыть новый сеанс, а также является ли служба временно неготовой (табл. А6).
Коды ответа для подсоединения к серверу SMTP: 220, 421 (табл. А6).
Таблица А6. Коды отклика на команду SMTP
Код |
Значение |
211 |
Состояние системы или ответ подсказки |
214 |
Сообщение подсказки |
220 |
Служба готова |
221 |
Служба закрывает соединение |
250 |
Запрашиваемое действие завершено |
251 |
Пользователь не является локальным, поэтому сообщение направляется к server-name |
354 |
Начать ввод почты, завершающийся нажатием <CRLF>. |
421 |
Служба отсутствует, соединение управления закрывается |
450 |
Почтовый ящик не готов, поэтому запрашиваемое действие не выполнялось |
451 |
Ошибка локальной обработки. Запрашиваемое действие прервано |
452 |
Недостаточный объем памяти. Запрашиваемое действие не выполнялось |
500 |
Синтаксическая ошибка. Команда не была признана |
501 |
Синтаксическая ошибка в аргументах или параметрах команды |
503 |
Неправильная последовательность команд |
504 |
Параметр команды не реализован |
550 |
Действие не было выполнено, поскольку почтовый ящик не готов (не обнаружен) |
551 |
Пользователь не является локальным, клиент должен попытаться подсоединиться к серверу |
552 |
Действие прервано, поскольку оно превысило объем распределенной памяти |
553 |
Запрашиваемое действие не выполнено, поскольку имя файла не допускается |
554 |
Транзакция потерпела неудачу |
DATA. Сообщает серверу о том, что последующий за этой командой текст является текстом почтового сообщения для доставки указанному получателю. Текст почтового сообщения должен быть отформатирован в соответствии с форматом сообщения Internet (RFC 822), перед ним и после него должна стоять отдельная точка с последующим маркером конца строки в виде символов возврата каретки/новой строки, который распространен в большинстве приложений Internet. Эта команда должна первоначально принять код отклика 354. Затем клиент должен отправить сообщение, на которое сервер, вероятно, ответит кодом 250. Синтаксис команды DATA следующий:
DATA#13#10
Коды откликов: 250, 354, 421, 451, 452, 500, 501, 503, 552, 554 (табл. А6).
EXPN - Расширить. Выполняет такую же функцию, как и команда VRFY, однако используется для проверки почтовых списков. Если EXPN получает достоверное имя почтового списка, сервер возвращает пользователю имена и адреса получателей, которые перечислены в почтовом списке. Синтаксис команды EXPN следующий:
EXPN почтовый_список#13#10
Коды откликов: 250, 421, 500, 501, 502, 504, 550 (табл. А6).
HELO. Инициализирует "беседу" SMTP. Имя системы клиента сопровождает команду для того, чтобы идентифицировать клиента. Сервер обычно отвечает кодом 250 с последующим именем сервера. HELO должна быть первой командой, которую клиент SMTP выдает после установления соединения с сервером SMTP. Синтаксис команды HELO следующий:
HELO имя_клиента#13#10
Коды откликов: 250, 421, 500, 501, 504 (табл. А6).
HELP. Пользователь вводит команду HELP во время интерактивного сеанса SMTP, запускаемого командной строкой. Команда возвращает информацию подсказки по всем имеющимся командам или по конкретной команде. Синтаксис команды HELP следующий:
HELP [ командная отрока ]#13#10
Коды откликов: 211, 214, 421, 500, 501, 502, 504 (табл. А6).
MAIL. Инициализирует почтовое сообщение и сообщает серверу о том, кто отправляет сообщение. Адрес, отправляемый с этой командой, всегда является адресом источника сообщения, хотя адрес может также перечислять несколько промежуточных host-компьютеров. Синтаксис команды MAIL следующий:
MAIL FROM: имя@имя_host#13#10
Коды откликов: 250, 421, 451, 452, 500, 501, 503, 552 (табл. А6).
NOOP - Нет операции. Извлекает ответ ОК из сервера. Эта команда не влияет на любые действия или команды, введенные ранее или позднее. Можно использовать NOOP как команду для поддержки активного состояния соединения команд. Синтаксис этой команды следующий:
NООР#13#10
Коды откликов: 250, 421, 500 (табл. А6).
QUIT- Выход. Сообщает серверу, что у клиента больше нет транзакций для выдачи и что соединение должно быть закрыто. Сервер отвечает ОК и затем закрывает соединение. Синтаксис команды следующий:
QUIT#13#10
Коды откликов: 221, 500 (табл. А6).
RCPT - Получить. Информирует сервер о том, кто является предполагаемым получателем сообщения. Если сообщение должно отправляться нескольким получателям, может быть несколько почтовых ящиков назначения, разделенных запятыми. Синтаксис команды RCPT следующий:
RCPT ТО: имя_пoлyчaтeля@имя_пoлyчaтeля_host[ , имя_получателя@имя_получателя_host . . . ]#13#10
Коды откликов: 250, 251, 421, 451, 452, 500, 501, 503, 552, 551, 552, 553 (табл. А6).
RSET - Сбросить. Прерывает текущую почтовую транзакцию, отбрасывая любые данные об отправителе, получателе или сообщении. RSET удаляет и сбрасывает все буферы и таблицы состояния. Синтаксис этой команды следующий:
RSET#13#10
Коды откликов: 250, 421, 500, 501, 504 (табл. А6).
SAML - Отправить по почте. Напоминает команду SOML, за исключением того, что SAML всегда доставляет сообщение в почтовый ящик получателя, даже если команде удастся отправить сообщение на терминал получателя. Синтаксис команды SAML (подобно SEND или SOML) следующий:
SAML FROM: имя@имя_host:#13#10
Коды откликов: 250, 354, 421, 451, 452, 500, 501, 502, 552 (табл. А6).
SEND - Отправить. Используется вместо команды MAIL. Отправляет почтовое сообщение не в почтовый ящик пользователя, а на экран терминала текущего сеанса пользователя. Вы используете команду SEND, если необходимо отправить важное сообщение системному администратору, Если бы администратор был зарегистрирован в сервере почты, вы могли бы отправить сообщение непосредственно на экран его компьютера. Если пользователь не зарегистрирован на сервере почты или не принимает терминальные сообщения, сервер возвращает код ответа 450 на команду RCPT, которая должна следовать за командой SEND. Команда SEND использует тот же синтаксис, что и команда MAIL:
SEND FROM: : имя@имя_host:#13#10
Коды откликов: 250, 421, 451, 452, 500, 501, 502, 552 (табл. А6).
SOML - Отправить по почте. Подобна команде SEND, за одним исключением: если экран терминала получателя не может отобразить почтовое сообщение, почтовый ящик получатели автоматически принимает это сообщение. Как и команда SEND, команда SOML использует тот же синтаксис, что и команда MAIL:
SOLM FROM: имя@имя_host:#13#10
Коды откликов: 250, 421, 451, 452, 500, 501, 502, 552 (табл. А6).
TURN. Предписывает серверу взять на себя роль отправителя, а клиент принимает на себя роль получателя. Можно использовать эту команду для получения любых почтовых сообщений, которые вы намерены отправить из сервера клиенту, не ожидая, пока сервер инициализирует сеанс SMTP с клиентом. Синтаксис команды TURN следующий:
TURN#13#10
Коды откликов: 250, 500, 502, 503 (табл. А6).
VRFY - Проверять. Предписывает серверу проверить указанного получателя в системе сервера. Вы используете эту команду перед инициализацией нового почтового сообщения с помощью команд MAIL, SEND, SOML или SAML. Синтаксис команды VRFY следующий:
VRFY имя_лользователя_или_адрес#13#10
Коды откликов: 250, 251, 421, 500, 501, 502, 504, 550, 551, 553 (табл. А6)
Примечание: Ни набор команд SMTP, ни модель связи SMTP не содержат команды LOGIN. Поэтому любой клиент SMTP может подсоединяться к серверу SMTP и отправлять почтовые сообщения. Это является причиной уязвимости системы почты Internet, поскольку любой пользователь имеет возможность отправить почту с фиктивным адресом возврата (или чьим-либо другим адресом). В свое время такая уязвимость вызвала слухи о том, что якобы Netscape Navigator имеет неисправности в защите. Фактически это недостаток защиты в конструкции и реализации модели SMTP.
Расширения SMTP
Почта Internet использовала на протяжении многих лет SMTP в качестве первичного протокола передачи. Как и можно было предположить, при столь продолжительном использовании возможности базового протокола увеличились за счет различных расширений. Хоти ни одно из этих расширений не было распространено по всем реализациям SMTP, одно расширение было стандартизировано (RFC 1651), что позволяет пользователю SMTP узнать о расширениях любого сервера SMTP.
Новая команда EHLO используется вместо команды HELO. Если сервер не поддерживает любых расширений SMTP, он отвечает кодом отклика 500, который обозначает, что сервер не узнает команду. В противном случае сервер отвечает кодом отклика 250 и, если какие-либо расширения поддерживаются, - несколькими строками, в которых перечисляются поддерживаемые расширения, и при этом каждая строка начинается с кода отклика 250.
Для имеющихся расширений SMTP изучите документы RFC.