Depois de pesquisar no google, descobri que podemos telnet
acessar o servidor da web na porta http e usá-lo GET
para recuperar uma página html.
Por exemplo:
$ telnet web-server-name 80
Mas não consigo entender como isso é possível?
Eu pensei que, se a porta 80 for para o servidor http, a porta 80 ouvirá apenas http
solicitações. Mas como posso acessar telnet
uma HTTP
porta?
Não são telnet
e HTTP
dois protocolos diferentes?
networking
http
telnet
sps
fonte
fonte
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.Respostas:
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).
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:
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.
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 pressionarCtrl-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.
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:
Mas o que o servidor SMTP está esperando é SMTP, que é mais ou menos assim:
Nesse momento, o servidor envia de volta sua linha de identificação:
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.
fonte
curl
precisa de um-v
argumento para mostrar detalhado saída no OS X.telnet
é uma ferramenta que pode se conectar a qualquer porta TCP.Por padrão, ele se conecta à porta telnet (23), mas você pode solicitar que ele se conecte à porta http (80) ou smtp (25) ou qualquer outra coisa.
Você precisa saber como "falar" o protocolo que o servidor remoto está ouvindo nessa porta.
Por exemplo, se você deseja obter os cabeçalhos de um site (nomes de domínio etc. alterados para proteger os culpados):
A
HEAD
linha é o que eu digitei na conexão. Observe que o protocolo http exige que você envie uma linha em branco para indicar o final do seu HEAD ou GET ou qualquer outra solicitação. Essa é a linha em branco imediatamente após a solicitação HEAD.fonte
A negociação inicial para ambos os protocolos usa comandos de texto, para que você possa se conectar e começar a inserir comandos. Isso vale para outros protocolos antigos , como o SMTP, e o telnet há muito tempo é usado para solucionar problemas de conexões com os respectivos serviços.
Por exemplo
Os protocolos são independentes da porta na qual eles se comunicam. Quase todas as implementações podem ser configuradas para escutar em qualquer porta.
Alguns protocolos (como HTTPS) não usam comandos de texto para negociação. No entanto, você pode (normalmente) conectar-se à porta na qual o servidor escuta, mas não faz nada útil.
fonte
Parte do seu entendimento está correta e outras não. A porta 80 geralmente é reservada para HTTP, mas isso é apenas uma convenção; qualquer programa pode escutar em qualquer porta aberta no sistema. Se houver um servidor da Web atendendo na porta 80 no sistema ao qual você está se conectando, será necessário usar o HTTP para se comunicar com ele.
telnet
não é um protocolo, é um programa que permite enviar texto bruto para qualquer host em qualquer porta. O host remoto não tem idéia de qual programa está se conectando a ele; tudo o que pode ver são os pacotes enviados para ele. Qualquer programa que envie pacotes que estejam em conformidade com o protocolo esperado pelo host remoto funcionará, portanto você podetelnet
se comunicar com qualquer protocolo baseado em texto.Você enviou algo do tipo
GET /path/to/a/file HTTP/1.1
, que é um comando HTTP 1.1 válido e tem a mesma aparência de uma solicitação que seria enviada por um navegador da Web, para que funcione bem.fonte
telnet
é um protocolo RFC 854 . É que ostelnet
clientes comuns não tentam usar otelnet
protocolo, exceto quando se conectamtcp/21
. Na página do manual: "Ao conectar-se a outras portas que não a porta telnet, o telnet não tenta negociações de protocolo telnet. Isso possibilita a conexão a serviços que não suportam o protocolo telnet sem fazer uma bagunça. A negociação do protocolo pode ser forçada por colocando um traço antes do número da porta ".