É possível estabelecer uma sessão Socket (entre o servidor e o cliente) usando comandos shell?

1

Pelo que eu li (apenas o próprio esboço, eu não sei a linguagem C) uma sessão Socket é estabelecida entre um servidor e um cliente chamando funções para ambos em uma certa ordem.

It starts with the Server:
socket()     #creates communication point
bind()       #gives this communication point an address
listen()     #tells it to be ready for some signal

then the Client:
socket()
connect()    #establishes a line between himself and the listening Server

now both can talk with each other by using read() and write().

Bem, isso foi implementado na Linguagem de Programação C, mas isso poderia ser feito também com o Shell e, em caso afirmativo, faria algum sentido fazê-lo dessa maneira?

    
por Abdul Al Hazred 01.04.2015 / 01:51

1 resposta

2

Existem vários programas para fazer conexões de soquete a partir da linha de comando (ou através de um script de shell). O mais comum é provavelmente o netcat, do qual há pelo menos três implementações:

  • Original one © 1995-1996 Avian Research (o gato de Hobbit). Não tenho conhecimento de nenhum link upstream, então aqui está no rastreador de pacotes Debian: link

  • Netcat6, uma reescrita. Agora declarado obsoleto; link

  • netcat-openbsd, uma reescrita pelo projeto OpenBSD. Provavelmente o que você quer. O código pode ser visto no link

  • socat, não é uma reescrita, mas a mesma ideia, com muitos recursos adicionais. Outra boa opção se você precisar de todos os recursos e não se importar com a complexidade adicional. link

A página de manual dá muitos exemplos, por exemplo, aqui está como (baseado em um exemplo muito mais assustador na página man) você pode executar bc em um socket:

mkfifo /tmp/f && cat /tmp/f | bc -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

Então você pode se conectar a essa rede bc usando:

nc localhost 1234

Ou com socat , é:

socat EXEC:'bc -i' TCP4-LISTEN:1234,bind=127.0.0.1   # server
socat - TCP4:127.0.0.1:1234                          # client
    
por 01.04.2015 / 03:39