Envie uma "mensagem TCP" quando acionada a partir de uma página da Web

0

Eu tenho um programa em execução na minha estação de trabalho que recebe uma entrada da seguinte forma

echo mycommand >/dev/tcp/127.0.0.1/1234

Eu gostaria de poder enviar o "mycommand" para a porta especificada na máquina localhost através de um clique em uma página da Web para que pessoas não experientes possam executar o comando facilmente.

Existe alguma maneira de fazer isso funcionar?

    
por Blaze9 23.08.2017 / 20:12

1 resposta

1

É bastante complicado fazer isso apropriadamente, gerando uma página html com um formulário e usando uma solicitação POST adequada, talvez até com autorização por senha. Desde que você esteja em uma rede local e não se importe com ninguém se conectando, você pode, de alguma forma, fazer uma demonstração do que poderia ser feito com um simples shell script usando socat para gerenciar a conexão.

Crie um script de shell, diga /tmp/myscript com conteúdo

#!/bin/bash
echo "HTTP/1.0 200 OK
Content-Type: text/plain

running command" |
sed 's/$/\r/'
if echo mycommand >/dev/tcp/127.0.0.1/1234
then echo OK
else echo fail
fi
date

Não se esqueça de torná-lo executável com chmod +x /tmp/myscript . Então corra

socat tcp-listen:8001,reuseaddr,fork exec:/tmp/myscript

e você poderá conectar seu navegador a http://yourhostname:8001/ para acionar o comando. Ou, para o seu teste, use curl -v http://localhost:8001/ e você deve ver algo como

* Connected to localhost (127.0.0.1) port 8001 (#0)
> GET / HTTP/1.1
> Host: localhost:8001
> User-Agent: curl/7.43.0
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/plain
< 
running command
OK
Wed Aug 23 21:04:47 CEST 2017

Isso é menos que perfeito, já que alguns navegadores podem armazenar em cache o resultado e não se conectar de fato, portanto, a saída da data é uma verificação. Usando a porta 8001, você não precisa executar o socat como root. Se você quiser usar a porta de servidor usual 80 (assim seu URL é apenas http://yourhostname ) você precisa fazer sudo socat ... .

Se você estiver familiarizado com python, ruby, perl ou muitos outros idiomas, todos eles fornecerão servidores Web simples que podem manipular solicitações POST corretamente.

    
por 23.08.2017 / 21:08

Tags