Setelah mencari di google saya menemukan bahwa kita dapat telnet
ke server web ke port http dan digunakan GET
untuk mengambil halaman html.
Misalnya:
$ telnet web-server-name 80
Tetapi saya tidak dapat memahami bagaimana ini mungkin?
Saya berpikir bahwa jika port 80 adalah untuk server http, maka port 80 hanya akan mendengarkan http
permintaan. Tapi bagaimana aku bisa telnet
ke HTTP
pelabuhan?
Bukankah telnet
dan HTTP
dua protokol berbeda?
networking
http
telnet
sps
sumber
sumber
nc(1)
) jauh lebih fleksibel. Ini dapat terhubung ke layanan ciphered SSL / TLS, dan juga dapat digunakan sebagai server dan bahkan menyampaikan data.Jawaban:
Selamat, Anda baru saja mempelajari konsep lapisan jaringan dengan menyadari bahwa port dan protokol tidak terhubung secara langsung satu sama lain. Seperti yang dikatakan orang lain, telnet dapat digunakan untuk terhubung ke port TCP. Namun untuk memahami mengapa ini mungkin, Anda perlu memahami sedikit tentang lapisan jaringan. Jika Anda pernah mendengar tentang model OSI 7 layer, inilah yang memungkinkan Anda menggunakan telnet untuk terhubung ke port lain. Meskipun di Internet, mereka hanya memperhatikan 4 lapisan dan disebut Internet Protocol Suite. Tanpa lapisan-lapisan jaringan, setiap program tidak hanya perlu memahami protokolnya sendiri, tetapi juga harus menentukan skema pengalamatan IP dan sistem portnya sendiri, yang berarti setiap router perlu memahami bagaimana untuk merutekan skema-skema ini dan protokol-protokol yang berbeda akan jauh lebih baik. lebih sulit untuk dipelajari dan didiagnosis. Sederhananya, Internet tidak akan berfungsi hampir tanpa lapisan.
Yang Anda khawatirkan adalah layer transport dan layer aplikasi. Pada layer transport, kami memiliki protokol Internet seperti TCP dan UDP dengan nomor port yang masing-masing berkisar dari 1 hingga 65535. Pada lapisan aplikasi kami memiliki protokol seperti HTTP, SMTP dan DNS. Biasanya setiap dokumen standar Internet yang mendefinisikan protokol menentukan port TCP atau UDP default yang harus digunakan oleh protokol. Seperti port TCP 80 untuk HTTP, port TCP 25 untuk SMTP, port UDP 53 untuk DNS dan port TCP 23 untuk Telnet. Program telnet sebenarnya berbicara protokol TELNET, yang merupakan protokol standar, tetapi sebagian besar yang kuno menurut standar saat ini. Karena urutan protokolnya terbuat dari karakter 8-bit, Anda jarang melihat protokol itu sendiri dan sebagian besar transparan jika dibandingkan dengan protokol lain yang lebih modern seperti HTTP dan SMTP yang menggunakan kata-kata yang terlihat manusiawi di ASCII seperti GET, POST, HELO, LOGIN, dll.
Karena protokolnya secara umum tidak terlihat, telnet dibuat untuk alat yang layak untuk menghubungkan ke port TCP lain dan memungkinkan pengguna untuk mengetik protokol secara manual. Beberapa administrator jaringan menggunakan teknik ini untuk mendiagnosis masalah dengan server. Namun karena program telnet masih memiliki protokol sendiri dan kadang-kadang dapat mengirim bit data tambahan, Anda masih dapat mengalami masalah dengan teknik ini. Ketika Anda menggunakan telnet, Anda benar-benar "membuat koneksi" pada layer aplikasi dan juga layer transport. Kebetulan protokol lapisan aplikasi lain mungkin berfungsi dengan baik untuk sebagian besar diagnostik dan tidak akan mengganggu protokol telnet. Ada program yang lebih baik untuk melakukan ini melalui yang disebut nc (Net Cat. Ini mendapatkan namanya dari menjadi versi berbasis jaringan dari perintah cat).
Program nc tidak berbicara protokol lapisan aplikasi apa pun dan ketika Anda membuat koneksi dengannya Anda "membuat koneksi" hanya pada lapisan Internet (alamat IP) dan lapisan Transport (TCP atau UDP). Apa itu artinya adalah Anda mengontrol protokol lapisan aplikasi apa yang digunakan. Hampir semua hal adalah permainan yang adil, bahkan protokol biner. Ini juga memungkinkan Anda melakukan hal-hal berguna seperti mentransfer file tanpa rusak dan mendengarkan port untuk lalu lintas masuk:
Dan kemudian movie.mp4 ditransfer melalui jaringan tanpa menggunakan protokol lapisan aplikasi (seperti FTP) sama sekali. Protokol aplikasi sebenarnya adalah teman Anda yang memberi tahu Anda bahwa mereka siap untuk menjalankan perintah Anda.
nc juga dapat menangani paket UDP dan soket UNIX-domain. Menggunakannya untuk mendengarkan juga bisa menarik.
Sekarang di browser web Anda kunjungi http: // localhost: 12345 / dan di sesi nc Anda, Anda harus melihat
GET / HTTP/1.1
permintaan browser . Pada titik ini Anda dapat mengetik sesuatu dan menekanCtrl-D
dan itu akan muncul di browser Anda dalam teks biasa (Jika Anda ingin HTML muncul, Anda harus mengirimnya kembali tanggapan protokol HTTP yang tepat diikuti oleh kode HTML).Terkadang, program yang secara asli berbicara satu protokol seperti HTTP dapat terhubung ke port lain yang dimaksudkan untuk protokol yang berbeda. Anda biasanya tidak dapat melakukan ini di browser GUI lagi karena mereka telah membatasi mereka untuk menghubungkan ke beberapa port, tetapi jika Anda menggunakan program seperti curl untuk terhubung ke port 25 (SMTP untuk mengirim email) Anda mungkin akan melihat beberapa kesalahan tentang melanggar protokol.
Ini terjadi karena ikal biasanya berbicara protokol HTTP, jadi setelah itu membangun jabat tangan TCP, itu mulai mengirim data seperti ini:
Tapi yang diharapkan oleh server SMTP adalah SMTP, yang lebih seperti ini:
Pada titik mana server mengirimkan kembali garis identifikasi:
Jadi Anda melihat bahwa tidak ada yang mencegah curl dari membuat koneksi layer transport dengan server SMTP, itu tidak bisa berbicara protokol. Tetapi Anda dapat berbicara protokol sendiri dengan program seperti telnet atau lebih disukai nc.
sumber
curl
membutuhkan-v
argumen untuk menunjukkan keluaran verbose di OS X.telnet
adalah alat yang dapat terhubung ke port tcp.Secara default, ini terhubung ke port telnet (23), tetapi Anda dapat memberitahu itu untuk terhubung ke port http (80) atau port smtp (25) atau apa pun sebagai gantinya.
Anda perlu tahu bagaimana "berbicara" protokol yang didengarkan server jauh pada port itu.
Misalnya, jika Anda ingin mendapatkan tajuk situs web (nama domain, dll diubah untuk melindungi yang bersalah):
The
HEAD
line adalah apa yang saya diketik ke sambungan. Perhatikan bahwa protokol http mengharuskan Anda untuk mengirim baris kosong untuk menunjukkan akhir KEPALA atau GET Anda atau permintaan apa pun. Itu baris kosong segera setelah permintaan KEPALA.sumber
Negosiasi awal untuk kedua protokol menggunakan perintah teks, sehingga Anda dapat terhubung dan mulai memasukkan perintah. Ini berlaku untuk protokol lama lainnya seperti SMTP, dan telnet telah lama digunakan untuk memecahkan masalah koneksi ke layanan masing-masing.
Sebagai contoh
Protokol tidak tergantung pada port tempat mereka berkomunikasi. Hampir semua implementasi dapat dikonfigurasi untuk mendengarkan pada port apa pun.
Beberapa protokol (seperti HTTPS) tidak menggunakan perintah teks untuk negosiasi. Namun Anda dapat (biasanya) terhubung ke port di mana server mendengarkan, tetapi tidak melakukan apa pun yang berguna.
sumber
Sebagian pemahaman Anda benar dan ada yang tidak. Port 80 umumnya dicadangkan untuk HTTP, tapi itu hanya konvensi; program apa pun dapat mendengarkan pada port terbuka apa pun pada sistem. Jika ada server web yang mendengarkan pada port 80 pada sistem yang Anda hubungkan, Anda perlu menggunakan HTTP untuk berkomunikasi dengannya.
telnet
sama sekali bukan protokol, ini adalah program yang memungkinkan Anda mengirim teks mentah ke host mana pun di port apa pun. Host jarak jauh tidak tahu program apa yang menghubungkannya; yang bisa dilihat hanyalah paket yang dikirim. Program apa pun yang mengirimkan paket yang sesuai dengan protokol yang diharapkan oleh host jarak jauh akan berfungsi, sehingga Anda dapat menggunakannyatelnet
untuk berkomunikasi melalui protokol berbasis teks apa pun.Anda mengirim sesuatu di sepanjang baris
GET /path/to/a/file HTTP/1.1
, yang merupakan perintah HTTP 1.1 yang valid dan terlihat sama dengan permintaan yang akan dikirim oleh browser web, sehingga berfungsi dengan baik.sumber
telnet
adalah protokol RFC 854 . Hanya sajatelnet
klien biasa tidak berusaha menggunakantelnet
protokol kecuali saat terhubungtcp/21
. Dari halaman manual: "Ketika menghubungkan ke port selain port telnet, telnet tidak mencoba negosiasi protokol telnet. Hal ini memungkinkan untuk terhubung ke layanan yang tidak mendukung protokol telnet tanpa membuat kekacauan. Negosiasi protokol dapat dipaksakan oleh menempatkan tanda hubung di depan nomor port. "