Congratulazioni, hai appena approfondito il concetto di livelli di rete rendendoti conto che porte e protocolli non sono direttamente collegati tra loro. Come altri stanno dicendo, telnet può essere utilizzato per connettersi a qualsiasi porta TCP. Tuttavia, per capire perché questo è possibile, è necessario comprendere un po 'i livelli di rete. Se hai mai sentito parlare del modello OSI 7 layer, questo è ciò che ti consente di utilizzare telnet per collegarti a un'altra porta. Sebbene su Internet, si occupano solo di 4 livelli e si chiama Internet Protocol Suite. Senza livelli di rete, ogni programma non dovrebbe solo comprendere il proprio protocollo, ma dovrebbe definire il proprio schema di indirizzamento IP e il sistema di porte, il che significa che ogni router dovrebbe capire come instradare questi schemi e diversi protocolli sarebbero molto più difficile da imparare e diagnosticare. Per dirla semplicemente, Internet non funzionerebbe altrettanto bene senza livelli.
Quello che ti interessa sono il livello di trasporto e il livello dell'applicazione. A livello di trasporto abbiamo protocolli Internet come TCP e UDP con numeri di porta che vanno da 1 a 65535 su ciascuno. A livello di applicazione abbiamo protocolli come HTTP, SMTP e DNS. Di solito ogni documento di standard Internet che definisce un protocollo specifica una porta TCP o UDP predefinita che il protocollo dovrebbe usare per impostazione predefinita. Come la porta TCP 80 per HTTP, la porta TCP 25 per SMTP, la porta UDP 53 per DNS e la porta TCP 23 per Telnet. Il programma telnet in realtà parla del protocollo TELNET, che è un protocollo standard, ma per lo più antico per gli standard attuali. Poiché le sue sequenze di protocollo sono costituite da caratteri a 8 bit, raramente si vede il protocollo stesso ed è per lo più trasparente se confrontato con altri protocolli più moderni come HTTP e SMTP che usano parole umane visibili in ASCII come GET, POST, HELO, LOGIN, eccetera.
Poiché il suo protocollo non è generalmente visibile, telnet ha creato uno strumento decente per la connessione ad altre porte TCP e per consentire all'utente di digitare i protocolli manualmente. Alcuni amministratori di rete utilizzano questa tecnica per diagnosticare problemi con i server. Tuttavia, poiché il programma Telnet ha ancora il proprio protocollo e talvolta può inviare bit di dati aggiuntivi, è comunque possibile riscontrare problemi con questa tecnica. Quando usi telnet, stai davvero "stabilendo una connessione" sia a livello di applicazione che a livello di trasporto. Accade semplicemente che altri protocolli a livello di applicazione possano funzionare correttamente per la maggior parte della diagnostica e non interferiranno con il protocollo Telnet. Esiste un programma migliore per farlo tramite nc (Net Cat. Prende il nome da una versione basata su rete del comando cat).
$ nc www.stackexchange.com 80
Il programma nc non parla alcun protocollo del livello applicazione e quando si effettua una connessione con esso si "effettua una connessione" solo a livello Internet (indirizzo IP) e livello di trasporto (TCP o UDP). Ciò significa che controlli quale protocollo di livello applicazione viene utilizzato. Quasi tutto è un gioco equo, anche i protocolli binari. Questo ti consente anche di fare cose utili come trasferire file senza che siano danneggiati e ascoltare sulle porte il traffico in entrata:
nc -l 9000 < movie.mp4 (Your friend runs this)
nc friends.computer.hostname 9000 > movie.mp4 (you run this)
E poi movie.mp4 viene trasferito sulla rete senza alcun protocollo a livello di applicazione (come FTP). Il protocollo dell'applicazione è in realtà un tuo amico che ti dice che sono pronti per eseguire il tuo comando.
nc può anche gestire pacchetti UDP e socket di dominio UNIX. Anche usarlo per ascoltare può essere interessante.
nc -l 12345
Ora nel tuo browser web visita http: // localhost: 12345 / e nella tua sessione nc dovresti vedere la GET / HTTP/1.1
richiesta del browser . A questo punto puoi digitare qualcosa e premere Ctrl-D
e dovrebbe apparire nel tuo browser in testo normale (Se vuoi che HTML venga mostrato, devi rispedirlo con la risposta corretta del protocollo HTTP seguita da codice HTML).
A volte, i programmi che parlano nativamente un protocollo come HTTP possono connettersi ad altre porte che sono pensate per un protocollo diverso. In genere non è più possibile farlo in un browser GUI perché hanno impedito loro di connettersi ad alcune porte, ma se si utilizza un programma come curl per connettersi alla porta 25 (SMTP per l'invio di posta) probabilmente vedrai un paio di errori relativi alla violazione del protocollo.
$ curl yourispsmtpserverhost.com:25
220 yourispsmtpserverhost.com ESMTP Postfix
221 2.7.0 Error: I can break rules, too. Goodbye.
Ciò accade perché normalmente curl parla del protocollo HTTP, quindi dopo aver stabilito un handshake TCP, inizia a inviare dati in questo modo:
GET / HTTP/1.1
Host: yourispsmtpserverhost.com:25
User-agent: curl
Ma ciò che il server SMTP si aspetta è SMTP, che è più simile a questo:
HELO myhomecomputername.local
A quel punto il server rinvia la sua linea di identificazione:
250 yourispsmtpserverhost.com
Quindi vedi che non c'è nulla che impedisce all'arricciatura di stabilire una connessione del livello di trasporto con il server SMTP, semplicemente non riesce a parlare il protocollo. Ma puoi pronunciare tu stesso il protocollo con un programma come telnet o più preferibilmente nc.
nc(1)
) è molto più flessibile. Può connettersi ai servizi crittografati SSL / TLS e può anche essere utilizzato come server e persino inoltrare dati.