После поиска в Google я обнаружил, что мы можем telnet
подключиться к веб-серверу на его http-порт и использовать его GET
для извлечения html-страницы.
Например:
$ telnet web-server-name 80
Но я не могу понять, как это возможно?
Я думал, что если порт 80 для http-сервера, то порт 80 будет только слушать http
запросы. Но как я в состоянии telnet
к HTTP
порту?
Разве нет telnet
и HTTP
двух разных протоколов?
networking
http
telnet
СФС
источник
источник
nc(1)
) гораздо более гибкая. Он может подключаться к зашифрованным службам SSL / TLS, а также использоваться в качестве сервера и даже передавать данные.Ответы:
Поздравляем, вы только что углубились в концепцию сетевых уровней, осознав, что порты и протоколы не связаны напрямую друг с другом. Как говорят другие, telnet можно использовать для подключения к любому порту TCP. Однако, чтобы понять, почему это возможно, вам нужно немного разбираться в сетевых уровнях. Если вы когда-либо слышали о модели уровня OSI 7, это то, что позволяет вам использовать telnet для подключения к другому порту. Хотя в Интернете они касаются только 4-х уровней и их называют Internet Protocol Suite, Без сетевых уровней каждая программа должна была бы не только понимать свой собственный протокол, но и определять собственную схему IP-адресации и систему портов, что означает, что каждый маршрутизатор должен понимать, как маршрутизировать эти схемы, и различные протоколы будут очень полезны. сложнее учиться и диагностировать. Проще говоря, Интернет не будет работать почти так же хорошо без слоев.
Вас интересуют транспортный уровень и прикладной уровень. На транспортном уровне у нас есть интернет-протоколы, такие как TCP и UDP, с номерами портов от 1 до 65535 на каждом. На прикладном уровне у нас есть протоколы, такие как HTTP, SMTP и DNS. Обычно каждый документ стандартов Интернета, который определяет протокол, определяет порт TCP по умолчанию или порт UDP, который протокол должен использовать по умолчанию. Например, TCP-порт 80 для HTTP, TCP-порт 25 для SMTP, UDP-порт 53 для DNS и TCP-порт 23 для Telnet. Программа telnet фактически говорит по протоколу TELNET, который является стандартным протоколом., но в основном древний по нынешним меркам. Поскольку его последовательности протоколов состоят из 8-битных символов, вы редко видите сам протокол и в основном его прозрачный по сравнению с другими более современными протоколами, такими как HTTP и SMTP, которые используют видимые человеком слова в ASCII, такие как GET, POST, HELO, LOGIN, и т.п.
Поскольку его протокол обычно не виден, telnet стал хорошим инструментом для подключения к другим портам TCP и позволяет пользователю вводить протоколы вручную. Некоторые сетевые администраторы используют эту технику для диагностики проблем с серверами. Однако, поскольку программа telnet по-прежнему имеет собственный протокол и иногда может отправлять дополнительные биты данных, вы все равно можете испытывать проблемы с этим методом. Когда вы используете telnet, вы действительно «устанавливаете соединение» на уровне приложений, а также на транспортном уровне. Просто случается, что другие протоколы прикладного уровня могут работать нормально для большинства задач диагностики и не будут мешать протоколу telnet. Есть лучшая программа для этого через nc (Net Cat. Она получила свое название от сетевой версии команды cat).
Программа nc не говорит ни о каком протоколе прикладного уровня, и когда вы устанавливаете соединение с ним, вы «устанавливаете соединение» только на интернет-уровне (IP-адрес) и транспортном уровне (TCP или UDP). Это означает, что вы контролируете, какой протокол прикладного уровня используется. Честная игра, даже бинарные протоколы. Это также позволяет вам делать полезные вещи, такие как передача файлов без их повреждения и прослушивание портов для входящего трафика:
А затем movie.mp4 передается по сети, вообще не используя протокол прикладного уровня (например, FTP). Протокол приложения - это ваш друг, который говорит вам, что он готов выполнить вашу команду.
nc также может обрабатывать UDP-пакеты и сокеты UNIX-домена. Использование его для прослушивания также может быть интересным.
Теперь в вашем веб-браузере зайдите на http: // localhost: 12345 /, а в сеансе nc вы должны увидеть
GET / HTTP/1.1
запрос браузера . В этот момент вы можете что-то набрать и нажать,Ctrl-D
и это должно появиться в вашем браузере в виде обычного текста (если вы хотите, чтобы HTML отображался, вы должны отправить его обратно с правильным ответом протокола HTTP, а затем HTML-кодом).Иногда программы, которые изначально используют один протокол, такой как HTTP, могут подключаться к другим портам, предназначенным для другого протокола. Обычно вы больше не можете делать это в браузере с графическим интерфейсом, потому что они ограничивают их для подключения к некоторым портам, но если вы используете программу, такую как curl, для подключения к порту 25 (SMTP для отправки почты), вы, вероятно, увидите пару ошибки о нарушении протокола.
Это происходит потому, что curl обычно говорит по протоколу HTTP, поэтому после установления TCP-квитирования он начинает отправлять данные следующим образом:
Но SMTP-сервер ожидает SMTP, который выглядит примерно так:
В этот момент сервер отправляет обратно свою идентификационную строку:
Итак, вы видите, что нет ничего, что мешает curl установить соединение транспортного уровня с SMTP-сервером, оно просто не может говорить по протоколу. Но вы можете говорить по протоколу самостоятельно с помощью программы, такой как telnet или, более предпочтительно, nc.
источник
curl
нужен-v
аргумент, чтобы показать подробный вывод в OS X.telnet
это инструмент, который может подключаться к любому порту TCPПо умолчанию он подключается к порту telnet (23), но вы можете указать ему подключение к порту http (80) или порту smtp (25) или что-то еще.
Вы должны знать, как «говорить» протокол, который удаленный сервер ожидает на этом порту.
Например, если вы хотите получить заголовки веб-сайта (имена доменов и т. Д. Изменены для защиты виновных):
HEAD
Линия это то , что я напечатал в связи. Обратите внимание, что протокол http требует, чтобы вы отправили пустую строку, чтобы указать конец вашего HEAD или GET или любого другого запроса. Это пустая строка сразу после запроса HEAD.источник
Первоначальное согласование для обоих протоколов использует текстовые команды, поэтому вы можете подключиться и начать вводить команды. Это справедливо для других старых протоколов, таких как SMTP, и telnet уже давно используется для устранения неполадок подключений к соответствующим службам.
Например
Протоколы не зависят от порта, на котором они общаются. Почти все реализации могут быть настроены для прослушивания на любом порту.
Некоторые протоколы (такие как HTTPS) не используют текстовые команды для согласования. Однако вы можете (обычно) подключиться к порту, на котором сервер слушает, но ничего не делать полезного.
источник
Некоторые из вас понимают правильно, а некоторые нет. Порт 80 обычно зарезервирован для HTTP, но это просто соглашение; любая программа может прослушивать любой открытый порт в системе. Если веб-сервер прослушивает порт 80 в системе, к которой вы подключаетесь, вам нужно использовать HTTP для связи с ним.
telnet
это вовсе не протокол, это программа, которая позволяет отправлять необработанный текст на любой хост любого порта. Удаленный хост не знает, какая программа подключается к нему; все, что он может видеть, - это отправляемые ему пакеты. Любая программа, отправляющая пакеты, соответствующие протоколу, ожидаемому удаленным хостом, будет работать, поэтому вы можете использовать ееtelnet
для связи по любому текстовому протоколу.Вы отправили что-то вроде строки
GET /path/to/a/file HTTP/1.1
, которая является действительной командой HTTP 1.1 и выглядит так же, как запрос, который будет отправлен веб-браузером, поэтому она работает нормально.источник
telnet
является протокол RFC 854 . Просто обычныеtelnet
клиенты не пытаются использоватьtelnet
протокол, кроме как при подключении кtcp/21
. Со страницы man: «При подключении к портам, отличным от порта telnet, telnet не пытается согласовать протокол telnet. Это позволяет подключаться к службам, которые не поддерживают протокол telnet, без создания беспорядка. Согласование протокола может быть вызвано поставить тире перед номером порта. "