Categories: Tecnologia

Como ler dados de um soquete no Bash no Linux

XYZ/Shutterstock.com

A linha de comando do Linux permite que você recupere dados escutando em um soquete ou conectando-se a um soquete. Os dados podem ser capturados em um arquivo de texto. Nós mostramos-lhe como.

Clientes e Servidores de Soquete

Os soquetes permitem que o software em rede se comunique. Eles foram implementados pela primeira vez no sistema operacional 4.2BSD Unix , que foi criado na Universidade da Califórnia, Berkeley, em 1983. Eles foram rapidamente adotados pelo System V Unix e Microsoft Windows.

Um soquete é um ponto final de uma conexão de rede de software, abstraído para que possa ser tratado como um identificador de arquivo. Isso significa que ele se encaixa no princípio geral de design Unix e Linux de “ tudo é um arquivo ”. Não nos referimos à tomada física na parede à qual você conecta o cabo de rede.

Se um programa se conecta a um soquete em outro software, ele é considerado o  cliente  do outro software. O software que permite que outro software solicite conexões é chamado de  servidor . Esses termos são usados ​​independentemente de outros usos de cliente e servidor no mundo de TI. Para evitar confusão, eles às vezes são chamados  de cliente  de soquete e  servidor de soquete  para remover a ambiguidade. Vamos chamá-los de clientes e servidores.

Os soquetes são implementados como uma interface de programação de aplicativos (API) , permitindo que os desenvolvedores de software chamem a funcionalidade de soquete de dentro de seu código. Tudo bem se você for um programador, mas e se não for? Ou talvez você seja, mas seu caso de uso não justifica escrever um aplicativo? O Linux fornece ferramentas de linha de comando que permitem usar servidores de soquete básicos e clientes de soquete, de acordo com suas necessidades, para recuperar ou receber dados de outros processos habilitados para soquete.

Relacionamentos nunca são fáceis

Os programas que vamos usar são nce ncat. Esses dois utilitários têm uma relação estranha. O ncprograma é uma reescrita do ncat, que é muito mais antigo que o nc. Mas ncattambém foi reescrito, e agora nos permite fazer algumas coisas ncque não podemos. E existem muitas implementações de ncat, que em si é um derivado de uma ferramenta chamada netcat. Além disso, na maioria das distribuições , nchá um link simbólico ncate não um programa separado.

Verificamos as distribuições recentes do Arch, Manjaro , Fedora e Ubuntu . O único que exigiu a instalação das ferramentas foi o Manjaro. No Manjaro, você precisa instalar o netcatpacote para obter nc, mas não obtém ncat, obtém netcat. E no Manjaro, nchá um link simbólico para netcat.

sudo pacman -S netcat

A linha inferior é, no uso do Manjaro netcatquando você vê ncatnos exemplos deste artigo.

Ouvindo em um soquete

Se o software escuta conexões de soquete de entrada, ele está agindo como um servidor. Todos os dados que chegam pela conexão do soquete são considerados  recebidos  pelo servidor. Podemos replicar esse comportamento com muita facilidade usando nc. Quaisquer dados recebidos são exibidos na janela do terminal.

Precisamos dizer ncpara escutar conexões, usando a -lopção (ouvir), e precisamos especificar a porta na qual vamos escutar conexões. Quaisquer programas ou processos clientes que tentem se conectar a essa instância ncdevem usar a mesma porta. Nós informamos ncem qual porta escutar usando a -popção (port).

Este comando inicia nccomo um servidor de soquete, aguardando uma conexão na porta 6566:

nc -l -p 6566

Enquanto espera por uma conexão de entrada, ncnão produz saída. Uma vez que uma conexão é feita, qualquer informação recuperada é exibida na janela do terminal. Aqui, uma conexão foi feita por um programa cliente que está se identificando como “cliente 1”.

Tudo exibido por ncé recebido do cliente. Esse cliente passa a enviar seu nome e uma mensagem numerada contendo a hora e a data .

Quando o cliente interrompe sua conexão, nctermina e você retorna ao prompt do terminal.

Enviando dados para um arquivo

Para capturar os dados do cliente em um arquivo, podemos enviar a saída de nc para um arquivo usando o redirecionamento. Este comando salva os dados recebidos em um arquivo chamado “logfile.txt”.

nc -l -p 6566 > logfile.txt

Você não verá nenhuma saída – ela está entrando no arquivo – e, paradoxalmente, não saberá se ocorreu uma conexão até que seja ncencerrada. Ser retornado ao prompt de comando indica que ocorreu uma conexão e foi encerrada pelo cliente.

Podemos usarless para revisar o conteúdo do arquivo “logfile.txt”.

menos logile.txt

Você pode rolar pelos dados e pesquisar usando as funções internas do less.

Enviando dados para um arquivo e a janela do terminal

Se você quiser ver os dados rolando na janela do terminal e enviá-los para um arquivo ao mesmo tempo, canalize a saída ncde tee.

nc -l -p 6566 | tee logfile.txt

Aceitando várias conexões

Tudo isso é bom, mas tem limitações. Só podemos aceitar uma conexão. Estamos limitados a receber dados de um único cliente. Além disso, quando esse cliente desconecta a conexão, nosso servidor de soquete nc termina.

Se você precisar aceitar várias conexões, precisamos usar ncat. precisaremos dizer ncatpara ouvir e usar uma porta específica, assim como fizemos com nc. Mas também usaremos a -kopção (manter vivo). Isso diz ncatpara continuar executando e aceitando conexões de clientes mesmo quando a última conexão ativa cair.

Isso significa ncatque será executado até que optemos por finalizá-lo com “Ctrl-C”. Novas conexões serão aceitas independentemente de estarem ncatconectadas a algum cliente ou não.

ncat -k -l -p 6566

Podemos ver os dados dos diferentes clientes aparecendo na saída à ncatmedida que eles se conectam.

Conectando a um servidor

Também podemos usar nccomo um cliente de soquete e conectar a outro programa que esteja aceitando conexões e atuando como servidor. Nesse cenário, ncé o cliente de soquete. Para fazer isso, precisamos informar nconde o software do servidor está localizado na rede.

Uma maneira de fazer isso é fornecer um endereço IP e um número de porta. Se o servidor estiver no mesmo PC em que estamos rodando nc, podemos usar o endereço IP de loopback 127.0.0.1. Não que não haja sinalizadores usados ​​para indicar o endereço do servidor e o número da porta. Apenas fornecemos os valores apropriados.

Para conectar a um servidor no mesmo PC e usando a porta 6566, podemos usar o endereço IP de loopback. O comando a ser usado é:

nc 127.0.0.1 6566

Os dados ncrecuperados do servidor rolam na janela do terminal.

Se você souber o nome de rede do computador que está executando o software do servidor, poderá usá-lo em vez do endereço IP.

nc sulaco 6566

Use “Ctrl+C” para quebrar uma conexão.

Rápido e fácil

nce ncatse encaixa quando você não deseja escrever um manipulador de soquete personalizado, mas precisa coletar dados de alguma fonte habilitada para soquete. Redirecionar a saída para um arquivo permite revisar a saída usando lesse analisar o arquivo usando utilitários como grep.

maisroot

Recent Posts

O novo aplicativo “PC Manager” da Microsoft se parece muito com o CCleaner

Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…

1 ano ago

Como reiniciar um PS4

Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…

1 ano ago

Veja por que as reticências são tão assustadoras ao enviar mensagens de texto…

A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…

1 ano ago

O telescópio James Webb acaba de capturar os “Pilares da Criação”

A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…

1 ano ago

Você poderá baixar o Proton Drive mais cedo do que pensa

O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…

1 ano ago

Como aumentar o zoom no Photoshop

Para ver suas fotos mais de perto ou para uma edição precisa , você pode…

1 ano ago