shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Comunicação TCP/IP em bash


From: mcaruccio
Subject: Comunicação TCP/IP em bash
Date: Mon, 10 Nov 2003 20:32:38 -0000
User-agent: eGroups-EW/0.82

Primeiramente peço desculpas pela mensagem anterior, vazia. Problemas
com esse maldita interface WEB do Yahoo. Abiaxo segue a mensagem que
deveria ter ido antes.

 
Enfim !!! Após anos de muita pesquisa, milhares de neurônios
queimados, kilômetros de caracteres digitados, consegui encontrar a
solução para o "problema" do /dev/tcp/XXX/YYY aberto.

Para quem não sabe o bash (> 2.alguma_coisa) possui um diretorio
especial, onde o usuario fornece um endereco IP/hostname e uma porta e
o bash conectar no host. Basta escrever (echo) para este arquivo que
os dados sao enviados ao host remoto.

O negocio é que eu só conseguia enviar coisas pelo socket:

echo -ne "GET /junk HTTP/1.0\n\n" > /dev/tcp/1.2.3.4/80

mas nunca conseguia ler nada pois o socket estava fechado logo apos o
echo morrer. Baseado numa dica do Jeffman, cheguei a duas solucoes.

A primeira delas deve, obrigatoriamente, utilizar um sub-shell (um
shell script normal):

##############################################
#!/bin/bash
echo -ne "GET / HTTP/1.0\n\n" 1>&0   ## envia
cat <&0                              ## lê
##############################################

O script deve ser chamado desta forma:

./script.sh <> /dev/tcp/1.2.3.4/80

Dentro dele o bash fecha o stdin e abre o socket como RW, que toma
conta do fd 0. Ai fica barbada, basta ler/escrever em &0

A outra solucao pode ser utilizada em um shels interativo e so possui
um comando anterior aos comandos de IO:

##############################################
$ 3<>/dev/tcp/1.2.3.4/80
$ echo -ne "GET / HTTP/1.0\n\n" 1>&3
$ cat <&3
##############################################

A primeira linha cria um descritor cujo fd é 3. Dai em diante basta
escrever e ler no mardito !

Agora so resta saber como fechar esse descritor (com 3<&- nao funcionou)

[]s

  Mateus

PS: Aurélio, bom item para colocar no teu canivete ;)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]