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.1
isteğini görmelisiniz . Bu noktada bir şey yazıp tuşuna basabilirsiniz Ctrl-D
ve 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.
nc(1)
) komutu çok daha esnektir. SSL / TLS şifreli hizmetlere bağlanabilir ve ayrıca sunucu olarak kullanılabilir ve hatta verileri aktarabilir.