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 中的简单套接字服务器?的主要内容,如果未能解决你的问题,请参考以下文章