echo command | netcat host port
这导致命令被发送到远程主机,并且一些数据被读回。但是几秒钟后,连接关闭。-w参数没有任何改变。我正在SuSE 10.1上使用netcat v1.10。
echo command | netcat host port
这导致命令被发送到远程主机,并且一些数据被读回。但是几秒钟后,连接关闭。-w参数没有任何改变。我正在SuSE 10.1上使用netcat v1.10。
Answers:
这适用nc
于OS X上的命令(假设要发送的命令在文件中):
cat file - | nc host port
(本质上,cat
将文件的内容转储到stdout上,然后在stdin上等待您)。
通过扩展,如果您想从外壳本身发送命令,则可以执行以下操作:
cat <(echo command) - | nc host port
{ echo command; cat;}
会做同样的事情,并且可能被认为更容易理解。
netcat
命令将使套接字保持打开状态,直到看到输入结束为止。所有这些例子都说明了这一点,但并没有真正说明原因。我与交互服务器使用的只是使用长时间:。 SocketTest 是一种方便的工具,可以侦听或在任何TCP或UDP端口上使用。SocketTest
netcat
cat - | nc localhost 8063
随着nc
Ubuntu上:
nc -q -1 host port
-q seconds
after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
请注意,各个发行版nc
之间的可用选项差异很大,因此这可能不适用于您的(OpenSUSE)。
我认为您不会用netcat或socat来管理它。我刚刚对两者进行了广泛的修改,而socat看起来最有前途。
我设法将socat设置为连接到远程TCP端口并在本地unix域套接字上侦听(从理论上讲,这样链接可以一直保持下去),但是只要本地进程从unix套接字中分离出来(另一个socat)将unix套接字链接到stdin / out),它关闭了TCP socat会话。
这里的问题是,通过netcat / socat进行的每个连接都与服务器建立了一个新的TCP流连接,并且在本端断开连接时会关闭该TCP流会话。
我认为您可能需要为此编写一些自定义代理软件,该软件将打开与远程端的TCP连接,然后在套接字/管道/ fifo或其他任何内容上本地侦听,然后仅将数据发送到现有的TCP管道下并返回结果。
可能是插座另一端的连接关闭了吗?
默认情况下,nc
如果您没有明确告诉他保持收听(使用-k
选项),则在完成后关闭连接:
-k Forces nc to stay listening for another connection after its current
connection is completed. It is an error to use this option without the
-l option.
请参阅man nc.1
。
我成功地在两台机器之间流传输数据,如下所示:
发件人:
while (true); do
echo -n "$RANDOM " | nc <host> <port>
done
接收者:
nc -kl <port>
socat
的shut-none
选项在这里应该有所帮助:
Changes the (address dependent) method of shutting down the write part of a connection to not do anything.
您可能还需要使用来覆盖默认的超时期限-t <timeout>
,否则套接字将在0.5s后关闭。此选项将覆盖默认行为,即:
When one of the streams effectively reaches EOF, the closing phase begins. Socat transfers the EOF condition to the other stream, i.e. tries to shutdown only its write stream, giving it a chance to terminate gracefully. For a defined time socat continues to transfer data in the other direction, but then closes all remaining channels and terminates.
因此,命令如下:
echo 'blah' | socat -t 10 stdio tcp:<addr>:<port>,shut-none
发送“ blah”后,将保持套接字打开10秒钟。