【问题标题】:TCP/Socket server in bashbash 中的 TCP/Socket 服务器
【发布时间】:2018-08-17 04:41:54
【问题描述】:

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

编辑 - 我已经尝试过:

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

【问题讨论】:

标签: bash sockets tcp server netcat


【解决方案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&lt;&gt;/dev/tcp/$MAILSERVER/$PORT 部分创建 &gt;&amp;3&lt;&amp;3 重定向器;您输出到&gt;&amp;3 的任何内容都会发送到远程端口,cat &lt;&amp;3 会将所有从远程服务器接收到的数据输入到控制台作为响应。

【讨论】:

  • 据我了解,我无法使用 /dev/tcp/ 监听端口(如我所见 here),因此向客户端发送响应和处理数据的问题不是解决了。但是,我认为这可以作为客户很好地工作。感谢您的宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多