使用netcat逐行发送文本文件

Pos*_*ssa 5 unix shell netcat

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

nc host port < textfile
cat textfile | nc host port
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能做到这一点?

ani*_*ane 8

你必须使用netcat吗?

cat textfile > /dev/tcp/HOST/PORT
Run Code Online (Sandbox Code Playgroud)

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


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

尝试

while read x; do echo "$x" | nc host port; done < textfile
Run Code Online (Sandbox Code Playgroud)


Jir*_*rka 5

使用 stdbuf -oL 调整标准输出流缓冲。如果 MODE 为“L”,则相应的流将被行缓冲:

stdbuf -oL cat textfile | nc host port
Run Code Online (Sandbox Code Playgroud)


Bru*_*sky 5

OP不清楚是否需要为每条线路建立新的连接。但是基于OP在这里的评论,我认为他们的需求与我的不同。但是,Google会将有我需要的人发送到这里,因此我将在这里放置这种选择。

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

如果我尝试发送一封电子邮件给nc我,则会出现错误,因为服务器无法与我进行“对话”。

$ cat email_msg.txt | nc localhost 25
554 SMTP synchronization error
Run Code Online (Sandbox Code Playgroud)

现在,如果我将a 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)