Отправлять «TCP-сообщение» при запуске с веб-страницы

У меня есть программа, запущенная на моей рабочей станции, которая принимает ввод следующим образом

echo mycommand >/dev/tcp/127.0.0.1/1234

я хотел бы иметь возможность отправлять «mycommand» на указанный порт на машине localhost через щелчок на веб-странице, чтобы люди, не обладающие знаниями, могли легко выполнить команду.

Есть ли способ заставить это работать?

0
24.08.2017, 00:12
1 ответ

Довольно сложно сделать это правильно, сгенерировав html-страницу с формой и используя правильный POSTзапрос, возможно, даже с авторизацией по паролю. При условии, что вы находитесь в локальной сети и не возражаете против того, чтобы кто-то подключался, вы можете каким-то образом продемонстрировать, что можно сделать с помощью простого сценария оболочки, используя socatдля управления соединением.

Создайте сценарий оболочки, скажем, /tmp/myscriptс содержимым

#!/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

Не забудьте сделать его исполняемым с помощью chmod +x /tmp/myscript. Затем запустите

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

и вы сможете подключить свой браузер к http://yourhostname:8001/для запуска команды. Или для вашего тестирования используйте curl -v http://localhost:8001/и вы должны увидеть что-то вроде

* 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

Это далеко не идеально, так как некоторые браузеры могут кэшировать результат и фактически не подключаться, поэтому дата выводится как проверка. Используя порт 8001, вам не нужно запускать socat от имени пользователя root. Если вы хотите использовать обычный серверный порт 80 (, чтобы ваш URL-адрес был просто http://yourhostname), вам нужно сделать sudo socat....

Если вы знакомы с python, ruby, perl или многими другими языками, все они предоставляют простые веб-серверы, которые могут правильно обрабатывать запросы POST.

1
28.01.2020, 02:45

Теги

Похожие вопросы