有没有办法用bash编程服务器?
基本上我希望能够从PHP客户端连接到bash服务器并发送将在控制台中显示的消息。
答案 0 :(得分:2)
首先是坏消息
不幸的是,似乎没有希望在纯粹 Bash中这样做。
即使做了
exec 3<> /dev/tcp/<ip>/<port>
不起作用,因为这些特殊文件是在connect()
而不是bind()
的顶部实现的。如果我们查看来源,这很明显。
例如,在Bash 4.2中,函数_netopen4()
(或IPv6的_netopen6()
)内容如下(lib/sh/netopen.c
):
s = socket(AF_INET, (typ == 't') ? SOCK_STREAM : SOCK_DGRAM, 0);
if (s < 0)
{
sys_error ("socket");
return (-1);
}
if (connect (s, (struct sockaddr *)&sin, sizeof (sin)) < 0)
{
e = errno;
sys_error("connect");
close(s);
errno = e;
return (-1);
}
<强>但是强>
可以使用命令行工具,例如nc
。如,
nc -l <port>
将侦听localhost:<port>
上的传入连接。
答案 1 :(得分:2)
GIT上有一个项目,它实现了一个完全用bash编写的HTTP Web服务器;
答案 2 :(得分:1)
创建一个从套接字读取,通过shell执行数据并打印响应的进程。可以使用以下脚本侦听端口9213:
ncat -l -kp 9213 | while read line; do
out=$($line)
# or echo $line
echo $out
done
如果您只想显示数据,ncat -l -p 9213
就足够了。