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


76

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


Answers:


117
$ nc -k -l 4444 > filename.out

看到 nc(1)


3
有什么方法不需要它循环运行,即绑定直到被杀死?nc如果不这样运行,我会反复连接和断开与插座的连接,然后死亡while true; do nc -l 4444; done
Naftuli Kay 2011年

在某些发行版中,您需要将其更改为“ nc -k -l -p 4444”。
Rostislav Matl

1
如果使用ncat而不是nc,则可以使用完全相同的语法进行多个并发连接。
Sietse van der Molen 2015年

2
是的,使用ncat代替nc(它捆绑在一起,nmap并且是的现代体现nc
Freedom_Ben 16'July


14

可以按照您的预期工作:

 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
fzbd18年

1
@fzbd:没有/ dev / tcp。这是特殊的bash文件,因此ls不会显示出来
Marcin Fabrykowski '18

@MarcinFabrykowski正确,但是如果在其他shell上运行这些命令,则没有可用的处理程序。如果您的bash未使用编译,它也会失败--enable-net-redirections
fzbd

5

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

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并支持并发连接,而​​legacync命令则不支持。
Serge Stroobandt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.