从网页触发时发送“TCP 消息”

从网页触发时发送“TCP 消息”

我的工作站上运行一个程序,它接受如下输入

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 服务器。

相关内容