bash中的TCP / Socket服务器

时间:2018-03-08 18:06:12

标签: bash sockets tcp server netcat

我试图在bash中设置一个简单的TCP服务器,它可以监听请求,处理收到的数据,然后向客户端发送响应。
有没有办法使用netcat正确地做到这一点?

编辑 - 我已尝试过的内容:

  • 将服务器的输出管道化为bash脚本:
    nc -kl 4444 | bash pipe.sh
    然后,在pipe.sh中,阅读答案。但是这有一些缺点:有时读取是奇怪的,并没有得到完整的输出,我也找不到向客户发送响应的方法。
  • 看起来像this更完整,但它会导致一些问题,因为它意味着互动并等待用户输入,所以有时服务器回答2次或者根本没有回答任何东西。

1 个答案:

答案 0 :(得分:-1)

查看this example script,它使用bash输入/输出重定向来建立套接字连接,以便发送SMTP邮件。我相信你可以重新定位你正在做的事情的概念,其优势在于它是所有bash内置函数(它不需要netcat)。

核心逻辑是:

exec 3<>/dev/tcp/$MAILSERVER/$PORT 
echo -en "HELO mail.email.com\r\n"  >&3 
echo -en "MAIL FROM:$MAILFROM\r\n" >&3
echo -en "RCPT TO:$MAILTO\r\n" >&3
echo -en "DATA\r\n" >&3
echo -en "Subject: $SUBJECT\r\n\r\n" >&3
echo -en "$DATA\r\n" >&3
echo -en ".\r\n" >&3
echo -en "QUIT\r\n" >&3
cat <&3

exec 3<>/dev/tcp/$MAILSERVER/$PORT部分会创建>&3<&3个重定向器;输出到>&3的任何内容都会被发送到远程端口,cat <&3会向控制台输入从远程服务器收到的所有数据作为响应。