【发布时间】:2011-06-11 23:18:27
【问题描述】:
有没有办法快速绑定到 TCP 端口/IP 地址并简单地将所有信息打印到 STDOUT?我有一个简单的调试解决方案,它将东西写入 127.0.0.1:4444,我希望能够简单地从 bash 绑定一个端口并打印遇到的所有内容。有没有简单的方法可以做到这一点?
【问题讨论】:
有没有办法快速绑定到 TCP 端口/IP 地址并简单地将所有信息打印到 STDOUT?我有一个简单的调试解决方案,它将东西写入 127.0.0.1:4444,我希望能够简单地从 bash 绑定一个端口并打印遇到的所有内容。有没有简单的方法可以做到这一点?
【问题讨论】:
使用@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 命令不支持。
这正如你所料:
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
ls 不会显示这个
--enable-net-redirections 编译,它也可能会失败。
只是因为您在bash 中询问了如何操作,尽管netcat 的答案非常有效:
$ exec 3<>/dev/tcp/127.0.0.1/4444
$ cat <&3
【讨论】:
/dev/tcp 执行此操作,如 unix.stackexchange.com/a/49947/13746 中所述
$ nc -k -l 4444 > filename.out
【讨论】:
nc 就会死掉:while true; do nc -l 4444; done。
ncat 而不是nc(它与nmap 捆绑在一起,它是nc 的现代化身)