Bagaimana saya bisa melakukan telnet ke port HTTP 80?


16

Setelah mencari di google saya menemukan bahwa kita dapat telnetke server web ke port http dan digunakan GETuntuk 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 httppermintaan. Tapi bagaimana aku bisa telnetke HTTPpelabuhan?

Bukankah telnetdan HTTPdua protokol berbeda?


2
Untuk bermain-main di 'net, perintah netcat ( nc(1)) jauh lebih fleksibel. Ini dapat terhubung ke layanan ciphered SSL / TLS, dan juga dapat digunakan sebagai server dan bahkan menyampaikan data.
vonbrand

Jawaban:


25

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).

$ nc www.stackexchange.com 80

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:

nc -l 9000 < movie.mp4  (Your friend runs this)

nc friends.computer.hostname 9000 > movie.mp4  (you run this)

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.

nc -l 12345

Sekarang di browser web Anda kunjungi http: // localhost: 12345 / dan di sesi nc Anda, Anda harus melihat GET / HTTP/1.1permintaan browser . Pada titik ini Anda dapat mengetik sesuatu dan menekan Ctrl-Ddan 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.

$ curl yourispsmtpserverhost.com:25
220 yourispsmtpserverhost.com ESMTP Postfix
221 2.7.0 Error: I can break rules, too. Goodbye.

Ini terjadi karena ikal biasanya berbicara protokol HTTP, jadi setelah itu membangun jabat tangan TCP, itu mulai mengirim data seperti ini:

GET / HTTP/1.1
Host: yourispsmtpserverhost.com:25
User-agent: curl

Tapi yang diharapkan oleh server SMTP adalah SMTP, yang lebih seperti ini:

HELO myhomecomputername.local

Pada titik mana server mengirimkan kembali garis identifikasi:

250 yourispsmtpserverhost.com

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.


curlmembutuhkan -vargumen untuk menunjukkan keluaran verbose di OS X.
Hamid Rohani

6

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):

$ telnet www.example.com 80
Trying xxx.xxx.xxx.xxx...
Connected to www.example.com.
Escape character is '^]'.
HEAD http://www.example.com/ HTTP/1.0

HTTP/1.1 200 OK
Date: Fri, 30 Oct 2015 09:28:58 GMT
Server: Apache/2.4.17 (Debian)
Last-Modified: Sun, 14 Nov 2010 06:30:26 GMT
ETag: "843-494fd75830480"
Accept-Ranges: bytes
Content-Length: 2115
Vary: Accept-Encoding
Connection: close
Content-Type: text/html

Connection closed by foreign host.

The HEADline 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.


3

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.


3

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.

telnetsama 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 menggunakannya telnetuntuk 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.


1
telnet adalah protokol RFC 854 . Hanya saja telnetklien biasa tidak berusaha menggunakan telnetprotokol kecuali saat terhubung tcp/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. "
user4556274
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.