可以使用bash来创建服务器吗?

时间:2014-04-25 07:58:06

标签: bash

有没有办法用bash编程服务器?

基本上我希望能够从PHP客户端连接到bash服务器并发送将在控制台中显示的消息。

3 个答案:

答案 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服务器;

https://github.com/avleen/bashttpd

答案 2 :(得分:1)

创建一个从套接字读取,通过shell执行数据并打印响应的进程。可以使用以下脚本侦听端口9213:

ncat -l -kp 9213 | while read line; do
    out=$($line)
    # or echo $line
    echo $out
done 

如果您只想显示数据,ncat -l -p 9213就足够了。