Bash 中的简单套接字服务器?

Posted

技术标签:

【中文标题】Bash 中的简单套接字服务器?【英文标题】:Simple Socket Server in Bash? 【发布时间】:2011-06-11 23:18:27 【问题描述】:

有没有办法快速绑定到 TCP 端口/IP 地址并简单地将所有信息打印到 STDOUT?我有一个简单的调试解决方案,它将东西写入 127.0.0.1:4444,我希望能够简单地从 bash 绑定一个端口并打印遇到的所有内容。有没有简单的方法可以做到这一点?

【问题讨论】:

相关unix.stackexchange.com/questions/49936/… 【参考方案1】:

使用@Freedom_Ben 提到的ncat 添加答案:

ncat -k -l 127.0.0.1 4444

以及来自 man ncat 的选项说明:

-k, --keep-open            Accept multiple connections in listen mode
-l, --listen               Bind and listen for incoming connections

【讨论】:

ncat 带有nmap 并支持并发连接,而​​旧的nc 命令不支持。【参考方案2】:

这正如你所料:

 nc -k -l 4444 |bash

然后你

echo "ls" >/dev/tcp/127.0.0.1/4444

然后你会看到 bash 执行的列表。

[简短的安全警告] 当然,如果你让这样的东西在你的计算机上运行,​​你就有了一个广泛开放的网关来应对各种攻击,因为可以从网络中任何主机上的任何用户帐户发送命令。这没有实现任何安全性(身份验证、识别),并且通过网络发送所有未加密的传输命令,因此很容易被滥用。

【讨论】:

如果没有/dev/tcp,可以运行:echo "ls" | nc 127.0.0.1 4444 @fzbd:没有 /dev/tcp。这是一个特殊的 bash 文件,所以ls 不会显示这个 @MarcinFabrykowski 正确,但是如果您在其他 shell 上运行这些命令,则没有可用的处理程序。如果您的 bash 未使用 --enable-net-redirections 编译,它也可能会失败。【参考方案3】:

只是因为您在bash 中询问了如何操作,尽管netcat 的答案非常有效:

  $ exec 3<>/dev/tcp/127.0.0.1/4444
  $ cat <&3

【讨论】:

但这不适用于聆听。我认为使用严格的 bash 听是不可能的 这个解决方案确实需要一个监听服务器。 Bash 无法通过 /dev/tcp 执行此操作,如 unix.stackexchange.com/a/49947/13746 中所述 在听吗?这就是 xinetd 的用途! :D【参考方案4】:
$ nc -k -l 4444 > filename.out

nc(1)

【讨论】:

有什么方法不需要它在循环中运行,即绑定直到被杀死?我反复连接和断开套接字,如果我不这样运行,nc 就会死掉:while true; do nc -l 4444; done 在某些发行版上,您需要将其更改为 'nc -k -l -p 4444'。 如果你使用 ncat 而不是 nc,你可以有多个并发连接,同时使用完全相同的语法。 是的,使用ncat 而不是nc(它与nmap 捆绑在一起,它是nc 的现代化身)

以上是关于Bash 中的简单套接字服务器?的主要内容,如果未能解决你的问题,请参考以下文章

Linux Bash:如何作为客户端打开 websocket 连接

使用 QT 从套接字读取

Unity 中的简单套接字服务器

Bash读取套接字/ dev / rfcomm0

IPC Unix 域套接字 bash

C语言中的套接字通信。发送文件内容