HTTP portu 80'e nasıl telnet yapabilirim?


16

Google'da arama yaptıktan sonra telnetweb sunucusuna http bağlantı noktasına GETulaşabileceğimizi ve bir html sayfası almak için kullanabileceğimizi öğrendim .

Örneğin:

$ telnet web-server-name 80

Ama bunun nasıl mümkün olduğunu anlayamıyorum?

80 numaralı bağlantı noktası http sunucusu içinse 80 numaralı bağlantı noktasının yalnızca httpistekleri dinleyeceğini düşündüm . Ama telnetbir HTTPlimana nasıl gidebilirim ?

Are değil telnetve HTTPiki farklı protokol?


2
' Net'te dalga geçmeyi sağlamak için netcat ( nc(1)) komutu çok daha esnektir. SSL / TLS şifreli hizmetlere bağlanabilir ve ayrıca sunucu olarak kullanılabilir ve hatta verileri aktarabilir.
vonbrand

Yanıtlar:


25

Tebrikler, bağlantı noktaları ve protokollerin doğrudan birbiriyle bağlantılı olmadığını fark ederek ağ katmanları kavramını araştırdınız. Diğerlerinin söylediği gibi, telnet herhangi bir TCP bağlantı noktasına bağlanmak için kullanılabilir. Ancak bunun neden mümkün olduğunu anlamak için ağ katmanları hakkında biraz bilgi sahibi olmanız gerekir. OSI 7 katmanlı modelini daha önce duyduysanız, başka bir bağlantı noktasına bağlanmak için telnet kullanmanıza izin veren şey budur. İnternette olmasına rağmen, kendilerini sadece 4 katman ve Internet Protokol Paketi olarak adlandırıyorlar.. Ağ katmanları olmadan, her programın yalnızca kendi protokolünü anlaması gerekmez, aynı zamanda kendi IP adresleme şemasını ve bağlantı noktası sistemini tanımlaması gerekir, bu da her yönlendiricinin bu şemaları ve farklı protokolleri nasıl yönlendireceğini anlaması gerektiği anlamına gelir. öğrenmek ve teşhis etmek daha zordur. Basitçe söylemek gerekirse, İnternet katmanlar olmadan neredeyse iyi çalışmaz.

İlgilendiğiniz şey, taşıma katmanı ve uygulama katmanıdır. Aktarım katmanında, her biri 1 ila 65535 arasında değişen port numaralarına sahip TCP ve UDP gibi İnternet protokollerimiz var. Uygulama katmanında HTTP, SMTP ve DNS gibi protokoller var. Genellikle bir protokolü tanımlayan her İnternet standardı belgesi, protokolün varsayılan olarak kullanması gereken varsayılan bir TCP veya UDP bağlantı noktasını belirtir. HTTP için TCP bağlantı noktası 80, SMTP için TCP bağlantı noktası 25, DNS için UDP bağlantı noktası 53 ve Telnet için TCP bağlantı noktası 23 gibi. Telnet programı aslında standart bir protokol olan TELNET protokolünü konuşuyor, ancak mevcut standartlara göre çoğunlukla eski bir tanesidir. Protokol sekansları 8 bitlik karakterlerden oluştuğu için, ASCII'de GET, POST, HELO, LOGIN, vb.

Protokolü genellikle görünmediğinden, telnet diğer TCP bağlantı noktalarına bağlanmak ve kullanıcının protokolleri manuel olarak yazmasına izin vermek için iyi bir araç için yapılmıştır. Bazı ağ yöneticileri bu tekniği sunuculardaki sorunları teşhis etmek için kullanırlar. Ancak, telnet programının hala kendi protokolü olduğu ve bazen fazladan veri bitleri gönderebileceği için, bu teknikle ilgili sorunlar yaşayabilirsiniz. Telnet kullandığınızda, uygulama katmanının yanı sıra aktarım katmanında da "bağlantı kuruyorsunuz". Diğer uygulama katmanı protokollerinin çoğu tanılama için iyi çalışabileceği ve telnet protokolüne müdahale etmeyeceği sadece olur. Bunu yapmak için nc denilen daha iyi bir program var (Net Cat. Adını cat komutunun Ağ tabanlı bir sürümü olarak alır).

$ nc www.stackexchange.com 80

Nc programı herhangi bir uygulama katmanı protokolü konuşmaz ve onunla bağlantı kurduğunuzda sadece internet katmanında (IP adresi) ve Aktarım katmanında (TCP veya UDP) “bağlantı kurarsınız”. Bunun anlamı, hangi uygulama katmanı protokolünün kullanılacağını kontrol etmenizdir. Hemen hemen her şey adil bir oyun, hatta ikili protokoller. Bu aynı zamanda dosyaları bozulmadan aktarma ve gelen trafik için bağlantı noktalarını dinleme gibi yararlı şeyler yapmanızı sağlar:

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

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

Ve sonra movie.mp4 hiç uygulama katmanı protokolü (FTP gibi) kullanılmadan ağ üzerinden aktarılır. Uygulama protokolü aslında arkadaşınız komutunuzu çalıştırmanız için hazır olduklarını söyler.

nc ayrıca UDP paketlerini ve UNIX etki alanı yuvalarını da işleyebilir. Dinlemek için kullanmak da ilginç olabilir.

nc -l 12345

Şimdi web tarayıcınızda http: // localhost: 12345 / adresini ziyaret edin ve nc oturumunuzda tarayıcının GET / HTTP/1.1isteğini görmelisiniz . Bu noktada bir şey yazıp tuşuna basabilirsiniz Ctrl-Dve tarayıcınızda düz metin olarak görünmelidir (HTML'nin görünmesini istiyorsanız, doğru HTTP protokol yanıtını ve ardından HTML kodunu geri göndermeniz gerekir).

Bazen, HTTP gibi bir protokolü yerel olarak konuşan programlar, farklı bir protokol için tasarlanan diğer bağlantı noktalarına bağlanabilir. Bunu genellikle bir GUI tarayıcısında yapamazsınız, çünkü bazı bağlantı noktalarına bağlanmasını kısıtlamışlardır, ancak 25 numaralı bağlantı noktasına (posta göndermek için SMTP) bağlanmak için curl gibi bir program kullanırsanız, muhtemelen birkaç protokolü bozma hataları.

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

Bunun nedeni curl normal olarak HTTP protokolünü konuşur, bu nedenle bir TCP el sıkışması oluşturduktan sonra şu şekilde veri göndermeye başlar:

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

Ancak SMTP sunucusunun beklediği SMTP'dir, bu daha çok şöyledir:

HELO myhomecomputername.local

Sunucu hangi noktada kimlik hattını geri gönderir:

250 yourispsmtpserverhost.com

Gördüğünüz gibi curl'un SMTP sunucusuyla bir aktarım katmanı bağlantısı kurmasını engelleyen bir şey yok, sadece protokolü konuşamıyor. Ancak protokolü telnet veya daha tercihen nc gibi bir programla kendiniz konuşabilirsiniz.


curl-vOS X'te ayrıntılı çıktı göstermek için bir tartışmaya ihtiyaç duyuyor .
Hamid Rohani

6

telnet herhangi bir tcp portuna bağlanabilen bir araçtır.

Varsayılan olarak, telnet bağlantı noktasına (23) bağlanır, ancak http bağlantı noktasına (80) veya smtp bağlantı noktasına (25) veya bunun yerine herhangi bir şekilde bağlanmasını söyleyebilirsiniz.

Yine de, uzak sunucunun o bağlantı noktasında dinlediği protokolü nasıl "konuşacağınızı" bilmeniz gerekir.

Örneğin, bir web sitesinin başlıklarını almak istiyorsanız (suçluyu korumak için alan adları vb. Değiştirildi):

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

HEADHat i bağlantısı yazdığınız budur. Http protokolünün HEAD veya GET'inizin sonunu veya herhangi bir talebi belirtmek için boş bir satır göndermenizi gerektirdiğini unutmayın. HEAD talebinden hemen sonra boş satır.


3

Her iki protokol için de ilk anlaşma metin komutlarını kullanır, böylece komutları bağlayabilir ve girmeye başlayabilirsiniz. Bu, SMTP gibi diğer eski protokoller için geçerlidir ve telnet uzun zamandır ilgili hizmetlerle bağlantı sorunlarını gidermek için kullanılmıştır .

Örneğin

Protokoller iletişim kurdukları porttan bağımsızdır. Hemen hemen tüm uygulamalar herhangi bir bağlantı noktasını dinleyecek şekilde yapılandırılabilir.

Bazı protokoller (HTTPS gibi) görüşme için metin komutları kullanmaz. Ancak , sunucunun dinlediği bağlantı noktasına (genellikle) bağlanabilirsiniz , ancak yararlı bir şey yapamazsınız.


3

Bazı anlayışlarınız doğru, bazıları değil. 80 numaralı bağlantı noktası genellikle HTTP için ayrılmıştır, ancak bu yalnızca bir kuraldır; herhangi bir program sistemdeki herhangi bir açık portu dinleyebilir. Bağlandığınız sistemdeki 80 numaralı bağlantı noktasını dinleyen bir web sunucusu varsa, onunla iletişim kurmak için HTTP kullanmanız gerekir.

telnetbir protokol değil, herhangi bir bağlantı noktasındaki herhangi bir ana bilgisayara ham metin göndermenizi sağlayan bir programdır. Uzak ana bilgisayarın hangi programa bağlandığı hakkında hiçbir fikri yoktur; tüm görebildiği paketler ona gönderiliyor. Uzak ana bilgisayarın beklediği protokole uygun paketler gönderen herhangi bir program çalışır, böylece telnetherhangi bir metin tabanlı protokol üzerinden iletişim kurmak için kullanabilirsiniz .

Satırları boyunca GET /path/to/a/file HTTP/1.1geçerli bir HTTP 1.1 komutu olan ve bir web tarayıcısı tarafından gönderilecek bir istekle aynı görünen bir şey gönderdiniz, bu yüzden iyi çalışıyor.


1
telnet olan bir protokol RFC 854 . Sadece ortak telnetistemciler telnet, bağlanma haricinde protokolü kullanmaya çalışmazlar tcp/21. Man sayfasından: "Telnet bağlantı noktası dışındaki bağlantı noktalarına bağlanırken, telnet telnet protokolü görüşmelerini denemez. Bu, telnet protokolünü desteklemeyen hizmetlere karışıklık vermeden bağlanmayı mümkün kılar. bağlantı noktası numarasından önce kısa çizgi yerleştirerek. "
user4556274
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.