Parabéns, você acabou de se aprofundar no conceito de camadas de rede ao perceber que portas e protocolos não estão diretamente conectados entre si. Como outros dizem, o telnet pode ser usado para conectar-se a qualquer porta TCP. No entanto, para entender por que isso é possível, você precisa entender um pouco sobre as camadas de rede. Se você já ouviu falar do modelo OSI de 7 camadas, é isso que permite usar o telnet para conectar-se a outra porta. Embora na Internet, eles só se preocupam com 4 das camadas e é chamado de Internet Protocol Suite. Sem camadas de rede, cada programa não apenas precisaria entender seu próprio protocolo, mas também teria que definir seu próprio esquema de endereçamento IP e sistema de portas, o que significa que cada roteador precisaria entender como rotear esses esquemas e protocolos diferentes. mais difícil de aprender e diagnosticar. Simplificando, a Internet não funcionaria tão bem sem camadas.
Você se preocupa com a camada de transporte e a camada de aplicação. Na camada de transporte, temos protocolos da Internet como TCP e UDP com números de porta que variam de 1 a 65535 em cada um. Na camada de aplicação, temos protocolos como HTTP, SMTP e DNS. Geralmente, cada documento de padrões da Internet que define um protocolo especifica uma porta TCP ou UDP padrão que o protocolo deve usar por padrão. Como a porta TCP 80 para HTTP, porta TCP 25 para SMTP, porta UDP 53 para DNS e porta TCP 23 para Telnet. O programa telnet realmente fala o protocolo TELNET, que é um protocolo padrão, mas principalmente um antigo para os padrões atuais. Como suas seqüências de protocolo são feitas de caracteres de 8 bits, você raramente vê o protocolo em si e é quase sempre transparente quando comparado a outros protocolos mais modernos, como HTTP e SMTP, que usam palavras visíveis humanas em ASCII, como GET, POST, HELO, LOGIN, etc.
Como seu protocolo geralmente não é visível, o telnet foi uma ferramenta decente para conectar-se a outras portas TCP e permitir que o usuário digite protocolos manualmente. Alguns administradores de rede usam essa técnica para diagnosticar problemas com os servidores. No entanto, como o programa telnet ainda possui seu próprio protocolo e pode enviar bits extras de dados às vezes, você ainda pode ter problemas com essa técnica. Quando você usa o telnet, está realmente "fazendo uma conexão" na camada de aplicação e na camada de transporte. Acontece que outros protocolos da camada de aplicação podem funcionar bem na maioria dos diagnósticos e não interferem no protocolo telnet. Existe um programa melhor para fazer isso através do chamado nc (Net Cat. Ele recebe esse nome por ser uma versão baseada em rede do comando cat).
$ nc www.stackexchange.com 80
O programa nc não fala nenhum protocolo da camada de aplicativo e, quando você faz uma conexão com ele, está "fazendo uma conexão" apenas na camada da Internet (endereço IP) e na camada de Transporte (TCP ou UDP). O que isso significa é que você controla qual protocolo da camada de aplicativo é usado. Quase tudo é bom jogo, mesmo protocolos binários. Isso também permite que você faça coisas úteis como transferir arquivos sem que eles sejam corrompidos e escute nas portas o tráfego recebido:
nc -l 9000 < movie.mp4 (Your friend runs this)
nc friends.computer.hostname 9000 > movie.mp4 (you run this)
E, em seguida, movie.mp4 é transferido pela rede sem usar nenhum protocolo da camada de aplicativo (como FTP). O protocolo do aplicativo é realmente seu amigo, dizendo que eles estão prontos para você executar seu comando.
O nc também pode manipular pacotes UDP e soquetes de domínio UNIX. Usá-lo para ouvir também pode ser interessante.
nc -l 12345
Agora, no seu navegador, visite http: // localhost: 12345 / e na sua sessão nc, você deverá ver a GET / HTTP/1.1
solicitação do navegador . Nesse ponto, você pode digitar algo e pressionar Ctrl-D
e ele deve aparecer no seu navegador em texto sem formatação (se você deseja que o HTML apareça, você deve enviá-lo de volta a resposta apropriada do protocolo HTTP seguida pelo código HTML).
Às vezes, programas que falam nativamente um protocolo como HTTP podem se conectar a outras portas destinadas a um protocolo diferente. Normalmente, você não pode mais fazer isso em um navegador da GUI porque eles os impediram de se conectar a algumas portas, mas se você usar um programa como curl para se conectar à porta 25 (SMTP para enviar e-mail), provavelmente verá algumas erros sobre a quebra de protocolo.
$ curl yourispsmtpserverhost.com:25
220 yourispsmtpserverhost.com ESMTP Postfix
221 2.7.0 Error: I can break rules, too. Goodbye.
Isso acontece porque o curl normalmente fala o protocolo HTTP; portanto, depois de estabelecer um handshake TCP, ele começa a enviar dados como este:
GET / HTTP/1.1
Host: yourispsmtpserverhost.com:25
User-agent: curl
Mas o que o servidor SMTP está esperando é SMTP, que é mais ou menos assim:
HELO myhomecomputername.local
Nesse momento, o servidor envia de volta sua linha de identificação:
250 yourispsmtpserverhost.com
Portanto, você vê que não há nada que impeça o curl de estabelecer uma conexão da camada de transporte com o servidor SMTP, apenas não pode falar o protocolo. Mas você pode falar o protocolo com um programa como telnet ou, mais preferencialmente, nc.
nc(1)
) é muito mais flexível. Ele pode se conectar a serviços cifrados SSL / TLS e também ser usado como servidor e até mesmo retransmitir dados.