我的工作站上运行一个程序,它接受如下输入
echo mycommand >/dev/tcp/127.0.0.1/1234
我希望能够通过单击网页将“mycommand”发送到本地主机上的指定端口,以便非懂行的人可以轻松执行该命令。
有什么办法让它发挥作用吗?
答案1
正确地执行此操作非常复杂,需要生成带有表单的 html 页面并使用正确的POST
请求,甚至可能需要密码授权。如果您位于本地网络上并且不介意任何人连接,您可以通过某种方式演示如何使用一个简单的 shell 脚本socat
来管理连接。
创建一个 shell 脚本,其中/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,您不需要以 root 身份运行 socat。如果您想使用常用的服务器端口 80(因此您的 url 就是http://yourhostname
),您需要这样做sudo socat ...
。
如果您熟悉 python、ruby、perl 或许多其他语言,它们都提供了可以正确处理 POST 请求的简单 Web 服务器。