Em geral, o conselho com netcat
é o melhor caminho.
Mas em bash
e ksh
você também pode fazer isso:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
Para fins de teste, preciso criar um script de shell que se conecte a um IP > remoto e envie uma mensagem de soquete TCPIP de texto simples.
Em geral, o conselho com netcat
é o melhor caminho.
Mas em bash
e ksh
você também pode fazer isso:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
Usando nc
( netcat
).
Servidor:
$ nc -l localhost 3000
Cliente:
$ nc localhost 3000
O servidor e o cliente lerão e gravarão na saída / entrada padrão.
Isso funcionará quando o servidor e o cliente estiverem na mesma máquina. Caso contrário, altere localhost
para o nome externo do servidor.
Um pouco mais interessante:
Servidor (no Bash):
#!/bin/bash
coproc netcat -l localhost 3000
while read -r cmd; do
case "$cmd" in
d) date ;;
q) kill "$COPROC_PID"
exit ;;
*) echo "What?" ;;
esac
done <&${COPROC[0]} >&${COPROC[1]}
Sessão do cliente:
$ nc localhost 3000 d Thu Jan 12 18:04:21 CET 2017 Hello? What? q ^C
(o servidor sai após q
, mas o cliente fica por perto, então pressionei Ctrl + c ).
tente netcat (por exemplo, nc)
echo GET / HTTP/1.0 | nc 0 80
HTTP/1.1 400 Bad Request
Date: Thu, 12 Jan 2017 13:44:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 311
Connection: close
Content-Type: text/html; charset=iso-8859-1
echo GET / HTTP/1.0
) para o meu servidor http local Tags tcp-ip socket shell-script