使用netcat逐行发送文本文件

时间:2012-12-20 10:14:37

标签: shell unix netcat

我正在尝试使用以下命令逐行发送文件:

nc host port < textfile
cat textfile | nc host port

我尝试使用 tail head ,但结果相同:整个文件作为唯一行发送。 服务器正在侦听特定守护程序以接收数据日志信息。

我想逐个发送和接收这些行,而不是一次性发送整个文件。

我该怎么做?

4 个答案:

答案 0 :(得分:8)

你必须使用netcat吗?

cat textfile > /dev/tcp/HOST/PORT

也可以满足你的目的,至少用bash。


  

我想一个接一个地发送和接收这些行,而不是一次性发送所有文件。

尝试

while read x; do echo "$x" | nc host port; done < textfile

答案 1 :(得分:3)

OP尚不清楚他们是否需要为每个行添加新连接。但基于OP's comment here,我认为他们的需求与我的不同。但是,谷歌向我们提供了我需要的人,所以我将在这里放置这个替代方案。

我需要通过单个连接来逐行发送文件。基本上,它是一个“慢”cat。 (这将是许多“会话”协议的常见需求。)

如果我尝试向nc发送电子邮件,则会收到错误消息,因为服务器无法与我进行“对话”。

$ cat email_msg.txt | nc localhost 25
554 SMTP synchronization error

现在,如果我在管道中插入slowcat,我会收到电子邮件。

$ function slowcat(){ while read; do sleep .05; echo "$REPLY"; done; }
$ cat email_msg.txt | slowcat | nc localhost 25
220 et3 ESMTP Exim 4.89 Fri, 27 Oct 2017 06:18:14 +0000
250 et3 Hello localhost [::1]
250 OK
250 Accepted
354 Enter message, ending with "." on a line by itself
250 OK id=1e7xyA-0000m6-VR
221 et3 closing connection

email_msg.txt看起来像这样:

$ cat email_msg.txt
HELO localhost
MAIL FROM:<system@example.com>
RCPT TO:<bbronosky@example.com>
DATA
From: [IES] <system@example.com>
To: <bbronosky@example.com>
Date: Fri, 27 Oct 2017 06:14:11 +0000
Subject: Test Message

Hi there! This is supposed to be a real email...

Have a good day!
-- System


.
QUIT

答案 2 :(得分:2)

只是在这里猜测,但你可能CR-NL结束了行:

sed $'s/$/\r/' textfile | nc host port

答案 3 :(得分:2)

使用stdbuf -oL调整标准输出流缓冲。如果MODE是&#39; L&#39;相应的流将进行行缓冲:

stdbuf -oL cat textfile | nc host port