Вітаємо, Ви щойно заглибилися в концепцію мережевих шарів, зрозумівши, що порти та протоколи не пов'язані безпосередньо між собою. Як кажуть інші, telnet можна використовувати для підключення до будь-якого порту TCP. Однак, щоб зрозуміти, чому це можливо, потрібно трохи розібратися в мережевих шарах. Якщо ви коли-небудь чули про модель шару OSI 7, саме це дозволяє використовувати telnet для підключення до іншого порту. Хоча в Інтернеті вони стосуються лише 4-х шарів і його називають Internet Protocol Suite. Без шарів мережевої роботи кожній програмі не тільки потрібно було б зрозуміти власний протокол, але й слід було б визначити власну схему IP-адреси та систему портів, а це означає, що кожному маршрутизатору потрібно зрозуміти, як маршрутизувати ці схеми, а різних протоколів було б багато важче вивчити і поставити діагноз. Простіше кажучи, Інтернет не працював би так само без шарів.
Що вас турбує, це транспортний шар та шар програми. На транспортному шарі у нас є Інтернет-протоколи, такі як TCP та UDP, з номерами портів від 1 до 65535 на кожному. На рівні додатків у нас є протоколи, такі як HTTP, SMTP та DNS. Зазвичай кожен документ із стандартів Інтернету, який визначає протокол, вказує порт TCP або UDP за замовчуванням, який протокол повинен використовувати за замовчуванням. Такі як TCP-порт 80 для HTTP, порт 25 TCP для SMTP, порт UDP 53 для DNS і порт 23 TCP для Telnet. Програма telnet насправді розмовляє з протоколом TELNET, який є стандартним протоколом, але в основному стародавній за сучасними мірками. Оскільки послідовності його протоколів складаються з 8-бітових символів, ви рідко бачите сам протокол і його здебільшого прозорий у порівнянні з іншими більш сучасними протоколами, такими як HTTP та SMTP, які використовують видимі люди слова в ASCII, такі як GET, POST, HELO, LOGIN, тощо.
Оскільки його протокол загалом не видно, telnet створив гідний інструмент для підключення до інших портів TCP і дозволив користувачеві вводити протоколи вручну. Деякі адміністратори мережі використовують цю методику для діагностики проблем із серверами. Однак оскільки програма telnet все ще має власний протокол і може іноді надсилати зайві біти даних, ви все ще можете відчути проблеми з цією технікою. Під час використання telnet ви дійсно "налагоджуєте зв'язок" на рівні додатків, а також транспортному шарі. Просто трапляється, що інші протоколи рівня додатків можуть працювати нормально через нього для більшості діагностики і не заважатимуть протоколу telnet. Існує краща програма для цього через nc (Net Cat. Свою назву він отримав від того, що це мережева версія команди cat).
$ nc www.stackexchange.com 80
Програма nc не розмовляє жодним протоколом рівня додатків, і коли ви здійснюєте з'єднання з нею, ви здійснюєте "з'єднання" лише на рівні Інтернет (IP-адреса) та транспортному рівні (TCP або UDP). Це означає, що ви керуєте тим, який протокол рівня додатків використовується. Практично все - це чесна гра, навіть бінарні протоколи. Це також дозволяє робити такі корисні речі, як файли передачі, без їх пошкодження та прослуховування портів для вхідного трафіку:
nc -l 9000 < movie.mp4 (Your friend runs this)
nc friends.computer.hostname 9000 > movie.mp4 (you run this)
А потім movie.mp4 передається по мережі, використовуючи протокол рівня додатків (наприклад, FTP). Протокол програми - це насправді ваш друг, який говорить вам, що вони готові до виконання вашої команди.
nc також може обробляти UDP-пакети та сокети UNIX-домену. Використання його для прослуховування також може бути цікавим.
nc -l 12345
Тепер у своєму веб-браузері відвідайте http: // localhost: 12345 / і в сеансі nc ви повинні побачити GET / HTTP/1.1
запит браузера . У цей момент ви можете ввести щось і натиснути, Ctrl-D
і це повинно відображатися у вашому веб-переглядачі простим текстом (Якщо ви хочете, щоб HTML відображався, вам потрібно надіслати його відповідне відповідь протоколу HTTP з подальшим HTML-кодом).
Іноді програми, які в основному говорять про один протокол, як HTTP, можуть підключатися до інших портів, призначених для іншого протоколу. Зазвичай ви не можете цього робити в браузері GUI, оскільки вони обмежили їх підключення до деяких портів, але якщо ви використовуєте програму типу curl для підключення до порту 25 (SMTP для надсилання пошти), ви, ймовірно, побачите пару помилки з порушення протоколу.
$ curl yourispsmtpserverhost.com:25
220 yourispsmtpserverhost.com ESMTP Postfix
221 2.7.0 Error: I can break rules, too. Goodbye.
Це відбувається тому, що curl зазвичай розмовляє з протоколом HTTP, тому після встановлення рукостискання TCP він починає надсилати такі дані:
GET / HTTP/1.1
Host: yourispsmtpserverhost.com:25
User-agent: curl
Але те, що очікує SMTP-сервер - це SMTP, який більше схожий на це:
HELO myhomecomputername.local
Після цього сервер повертає свою ідентифікаційну лінію:
250 yourispsmtpserverhost.com
Отже, ви бачите, що немає нічого, що не заважає curl встановити з'єднання транспортного рівня із сервером SMTP, він просто не може говорити з протоколом. Але ви можете говорити з протоколом самостійно з такою програмою, як telnet або, більш переважно, nc.
nc(1)
) набагато гнучкіша. Він може підключатися до шифрованих служб SSL / TLS, а також використовуватись як сервер і навіть ретранслювати дані навколо.