2009-02-23 62 views
15

我有一些应用程序,标准Unix工具将它们的输出发送到Solaris中的named-pipes,但是只能从本地存储中读取命名管道(在Solaris上),所以我无法通过网络访问它们,或者将管道放置在NFS存储器上以联网访问其输出。标准的Unix命令行工具,用于管道套接字

这让我想知道是否有到命令行工具的输出直接转发到插座类似的方式,这样说:

mksocket mysocket:12345 
vmstat 1 > mysocket 2>&1 

回答

19

Netcat很适合这个。这是一个page with some common examples

使用您的情况可能是这个样子:

  1. 服务器监听连接,然后将输出发送到它:

    server$ my_script | nc -l 7777

  2. 远程客户端连接到server端口7777,接收数据,保存到日志文件:

    client$ nc server 7777 >> /var/log/archive

+0

感谢,并感谢您的例子! – 2009-02-23 07:27:48

+0

如果“nc -l 7777”不起作用,请尝试“nc -l -p 7777” – 2018-03-08 10:11:51

6

的netcat将有助于建立一个管道在网络上。

14

netcat(也称为nc)正是你”重新寻找。它变得相当标准,但在所有系统上都不可用。

socat似乎是netcat的增强版本,具有更多功能,但不太常用。在Linux上,您也可以使用/dev/tcp/<host>/<port>。有关更多信息,请参见Advanced Bash-Scripting Guide

0

大家都在netcat的正确轨道上。但是我想补充一点,如果你输入nc并期待回复,你需要使用-q <seconds>选项。从手册:

-q秒

标准输入EOF后,等待指定的秒数,然后退出。如果秒数是负数,请永久等待。

举例来说,如果你想与你的SSH代理互动,你可以做这样的事情:

echo -en '\x00\x00\x00\x01\x0b' | nc -q 1 -U $SSH_AUTH_SOCK | strings 

一个更完整的例子是在https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4

*我偷了这个来自https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html