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

Naf*_*Kay 72 sockets linux bash tcp

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

Nik*_*sov 111

$ nc -k -l 4444 > filename.out
Run Code Online (Sandbox Code Playgroud)

看到 nc(1)

  • 任何方式这样做不需要它在循环中运行,即绑定直到被杀死?我反复连接和断开插座,如果我不像这样运行,`nc`就会死:`while true; 做nc -l 4444; done`. (3认同)
  • 添加`-k`选项. (3认同)
  • 如果您使用 ncat 而不是 nc,则可以使用完全相同的语法拥有多个并发连接。 (2认同)
  • 是的,使用`ncat`代替`nc`(它与`nmap`捆绑在一起,并且是`nc`的现代体现) (2认同)

Die*_*ano 46

只是因为你问过怎么做bash,虽然netcat答案是非常有效的:

  $ exec 3<>/dev/tcp/127.0.0.1/4444
  $ cat <&3
Run Code Online (Sandbox Code Playgroud)

  • 但这对听力不起作用.我认为不可能严格使用bash听 (13认同)
  • 该解决方案确实需要监听服务器.Bash不能通过http://unix.stackexchange.com/a/49947/13746中解释的`/ dev/tcp`来做到这一点 (7认同)
  • 听着?这就是 xinetd 的用途!:D (2认同)

小智 10

这正如您所期望的那样:

 nc -k -l 4444 |bash
Run Code Online (Sandbox Code Playgroud)

然后你

echo "ls" >/dev/tcp/127.0.0.1/4444
Run Code Online (Sandbox Code Playgroud)

然后你看到bash执行的列表.

[简要安全警告]
当然,如果你在计算机上运行这样的东西,你就会有一个开放的网关用于各种攻击,因为命令可以从你网络中任何主机上的任何用户帐户发送.这不会实现任何安全性(身份验证,身份验证),并通过网络发送未加密的所有传输命令,因此很容易被滥用.

  • 如果你没有`/dev/tcp`,你可以运行:`echo "ls" | 数控127.0.0.1 4444` (2认同)

Kil*_*ahn 5

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

ncat -k -l 127.0.0.1 4444
Run Code Online (Sandbox Code Playgroud)

和 man ncat 选项的解释:

-k, --keep-open            Accept multiple connections in listen mode
-l, --listen               Bind and listen for incoming connections
Run Code Online (Sandbox Code Playgroud)