Como ler dados de um soquete no Bash no Linux


0

Código binário fluindo através de cabos ópticos.
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 dos outros softwares. 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, à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.

RELACIONADO: O que é uma API e como os desenvolvedores as usam?

Relacionamentos nunca são fáceis

Os programas que vamos usar são nc e ncat. Esses dois utilitários têm uma relação estranha. o nc programa é uma reescrita de ncatque é muito mais antiga do que nc . Mas ncat também foi reescrito, e agora nos permite fazer algumas coisas nc não pode. E existem muitas implementações de ncatque em si é um derivado de uma ferramenta chamada netcat. Além disso, na maioria das distribuições, nc é um link simbólico para ncat e 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 netcat pacote para obter ncmas você não consegue ncatvocê consegue netcat. E no Manjaro, nc é um link simbólico para netcat.

sudo pacman -S netcat

Instalando o pacote netcat no Manjaro

A linha inferior é, no uso do Manjaro netcat quando você vê ncat nos exemplos deste artigo.

Ouvindo em um soquete

Se o software escuta conexões de soquete de entrada, ele está agindo como um servidor. Qualquer dado que vem pela conexão do soquete é dito ser recebido pelo servidor. Podemos replicar esse comportamento muito facilmente usando nc. Quaisquer dados recebidos são exibidos na janela do terminal.

Precisamos contar nc para ouvir conexões, usando o -l (ouvir) e precisamos especificar a porta em que vamos escutar as conexões. Quaisquer programas ou processos clientes que tentem se conectar a esta instância do nc deve usar a mesma porta. Nós dizemos nc em qual porta escutar usando o -p (porta) opção.

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

nc -l -p 6566

iniciando nc como servidor de soquete aa

Enquanto espera por uma conexão de entrada, nc nã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”.

nc recebendo dados de um cliente

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

Quando o cliente quebra sua conexão, nc termina e você retorna ao prompt do terminal.

nc encerrado após uma desconexão do lado do cliente

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

Redirecionando a saída de nc para um arquivo de texto

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

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

less logile.txt

Usando less para examinar um arquivo de texto

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

Revendo a saída capturada do nc em menos

RELACIONADO: Como usar o comando less no Linux

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 de nc para dentro tee .

nc -l -p 6566 | tee logfile.txt

Enviando saída de nc para um arquivo e para a janela do terminal ao mesmo tempo

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. vamos precisar contar ncat para ouvir e usar uma porta específica, assim como fizemos com nc. Mas também usaremos o -k (manter vivo) opção. Isso diz ncat para continuar executando e aceitando conexões de clientes mesmo quando a última conexão ativa cair.

Isso significa ncat será executado até que escolhamos terminá-lo com “Ctrl-C”. Novas conexões serão aceitas se ncat está atualmente conectado a qualquer cliente ou não.

ncat -k -l -p 6566

ouvindo várias conexões com ncat

Podemos ver os dados dos diferentes clientes aparecendo na saída de ncat à medida que se conectam.

Segundo e terceiro clientes se conectando ao ncat

Conectando a um servidor

Também podemos usar nc como um cliente de soquete e se conectar a outro programa que está aceitando conexões e atuando como um servidor. Neste cenário, nc é o cliente de soquete. Para fazer isso, precisamos dizer nc onde 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 que estamos rodando nc ligado, podemos usar o endereço IP de loopback de 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

Usando nc como um cliente de soquete

Dados que nc recupera do servidor rola na janela do terminal.

Recuperando dados de um servidor de soquete com nc

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

Usando nc para conectar a um servidor de soquete usando o nome do PC no qual o servidor está sendo executado

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

Rápido e fácil

nc e ncat cabe a conta 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 analise o arquivo usando utilitários como grep.

RELACIONADO: Como usar o comando grep no Linux


Like it? Share with your friends!

0

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win

0 Comments

Your email address will not be published. Required fields are marked *