Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unix (28.03.12) IP-Сокеты.doc
Скачиваний:
7
Добавлен:
26.08.2019
Размер:
82.94 Кб
Скачать

Протоколы прикладного уровня.

Универсальный протолок — Telnet. Большинство протоколов интернета прикладного уровня можно реализовать, используя telnet. Это фактически передача неструктурированных данных. У этого протокола есть telnet-клиент.

У команды telnet два параметра: IP-адрес, к которому мы хотим обратиться, и порт, к которому мы хотим обратиться.

telnet (<адрес обращения>,<порт обращения>).

Пример работы:

$telnet 127.0.0.1 25

/*Запускается почтовый клиент(потому что указан порт 25) если команда выполнена успешно – код возврата начинается с 2, если неуспешно – с 5.*/

Trying 127.0.0.1...

Connected to localhost.

Escape characte is '^]'.

220 users.inse.eu ESMTP Sendmail 8.14.3/8.14.2; Wed, 28 Mar 2012 14:06:05

Надо для начала представиться:

HELO inse.ru

Теперь можно отправить письмо:

MAIL FROM: maximh

Но требуется ещё и домен указать, так что попробуем так:

MAIL FROM: maxim@inse.ru

Кому же мы посылаем письмо?

RCPT TO: maxim@kiae.ru

Теперь напишем само письмо с помощью

DATA

Теперь надо ввести текст письма, закончив точкой, к примеру:

test

.

Мы получим в ответ код и идентификатор а так же сообщение о том,что сообщение принято для отправки.

После этого мы закончим соединение с помощью

QUIT.

Все данные тут представляются печатными символами, двоичные данные не прокатят. Запрос выглядят следующим образом: команда + параметры. После запроса ответ выглядит следующим образом: статус выполненной команды + результат выполнения. И в запросе,и в ответе кроме имени команды могут передаваться данные, которые относятся либо к запросу, либо к ответу. Эти данные обычно состоят из двух частей: заголовок + тело. Заголовок от тела отделяется пустой строкой.

То есть выглядеть это должно примерно вот так:

\r\n\r\n

\r – возврат каретки, \n – перевод на новую строку

Заголовок выглядит следующим образом: ключ:значение, например, если бы мы правильно писали письмо, оно должно было выглядеть следующим образом:

From: maximh

To: tany

Data:

fgfkzd

.

В принципе, команду telnet можно вызвать без номера порта, тогда будет использоваться 23 порт. Обычно 23-й порт слушает программа под названием telnet-сервер. Она слушает логин/пароль, а затем начинает выполнять команды от имени указанного пользователя.

Протокол http.

Hyper Text Transport Protocol появился в 1990 году. Это позволило очень широко распространяться интернету. Первой версией http появился в 1992 году стала версия 0.9. В нем был один запрос GET и стандарт не подразумевал заголовков, в это же время был реализован обозреватель NCSA Mosaic(22 апреля 1993 года). Следующая версия hhtp 1.0 появилась в 1996 году, появилось несколько новых запросов (HEAD,POST) и сам протокол был приведен в соответствие с другими протоколами,существовавшими тогда. В 1999 году вышла версия 1.1. Отличия были в поддержке виртуального хостинга, то есть стала существовать возможность запуска нескольких серверов на одном IP-адресе. Http по умолчанию использует порт 80.

$telnet 172.21.240.250 80

Trying 172.21.240.250...

Connected to 172.21.240.250.

Escape character is '^]

Мы видим, что хотя соединение произошло, он не выдает приглашения. Это сделано, чтобы не сообщать пользователю версию сервера, чтобы его было тяжелее сломать. Дальше мы должны составить запрос, к примеру, используя следующие запросы:

GET – получить файл

POST – отправить файл

$GET /index.html

<html>

<head>

<title>Yo!</title>

<!--<meta http-equiv="refresh" content="3;URL=http://inse.ru/" /> -->

</head>

<body>

<h1>It works!</h1>

<p>

You will be transferred to the head site in three seconds.

Please, be patient ;))

</body>

</html>

Connection closed by foreign host.

Мы указали,какой файл хотим получить. На самом деле, этот файл лежит не в корне диска,а в папке DocumentRoot. Таким образом с помощью http сервера нельзя получить произвольный файл на диске (речь о том, что такой возможности быть не должно, и если она есть, это огромная дыра в безопасности). Если в GET будет указано два параметра, второй параметр — это версия протокола, поддерживаемая программой клиентом.

Если потом просто послать пустую строку, клиент ответит, какая версия протокола используется и код возврата.

GET /index.html HTTP/1.0 ← вот так мы вызывали это всё

HTTP/1.1 200 OK // 200 – код возврата, OK - расшифровка

Date: Wed, 28 Mar 2012 11:02:56 GMT

Server: Apache

X-Powered-By: PHP/5.2.11

Content-Length: 240

Connection: close

Content-Type: text/html

<html>

<head>

<title>Yo!</title>

<!--<meta http-equiv="refresh" content="3;URL=http://inse.ru/" /> -->

</head>

<body>

<h1>It works!</h1>

<p>

You will be transferred to the head site in three seconds.

Please, be patient ;))

</body>

</html>

Попробуем указать неверное имя файла:

GET /index.htmt HTTP/1.0

результат будет

HTTP/1.1 404 Not Found

Если указываем HTTP/1.1 в следующей строке нужно обязательно указать заголовок:

GET /index.htmt HTTP/1.1

Теперь вместо заголовка пишем

Host: users.inse.ru ← так указали, какой сервер мы хотим использовать

Вместо этого можно было бы указать кодировку, спросить, обновился ли файл с какого-то времени. В данном случае мы использовали только одну строчку.

Если используется 1.1, то соединение используется не сразу, существует некоторый таймаут.

В ответе тоже идет заголовок, потом пустая строка, потом файл. В заголовке указано время, имя сервера, тип сервера. Все протоколы устроены примерно таким же образом. Если надо передать двоичные данные или картинку, используется кодирование, два их вида: base64, MIME.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]