linux - 使用 Netcat 将二进制文件(逐行)发送到套接字服务器

标签 linux bash centos6 netcat

作为 this Stack Overflow question 的副产品除了一些调整外,我想实现相同的目标。

我想连接到一个主机,逐行发送一个二进制文件,每行之间有几秒钟的延迟......而且它必须在同一个连接中。我要发送的字符串大部分是基于文本的,但该行中有几个不可打印的字符。

这是我要发送的字符串/行的示例(每个文件数千行):

<null>e<null><null>00326513,6598,no,8,,2z<null>

<null>值是十六进制值 0x00 .

我已经从它的第一个条目中重写了我的问题,但是 @mzet 回答了我原来的问题,因为当时我的问题是纯文本的,但后来我发现我的字符串有这些 0x00起初我看不到的字符。我想以他的回答为基础,因为我认为它几乎可以工作,但可能需要调整,所以这是他的贡献,而不是我的。

如果我有一个包含 3 行的文件:

<null>e<null><null>00370513,6598,no,8,,2z<null>
<null>f<null><null>00891548,6598,yes,8,,3z<null>
<null>f<null><null>00129525,6598,yes,8,,2z<null>

然后我想我可以调整 @mzet 答案并替换 <null>我文件中的值 \x00并设置 -eecho 上命令:

[root@srv]# mkfifo /tmp/fifoIn; cat /tmp/fifoIn | nc localhost 2222 &
[root@srv]# cat myfile | while read line; do echo -ne $line; sleep 2; done > /tmp/fifoIn

当我这样做时,我可以看到 x00在服务器端:

[root@srv]# nc -l 2222
x00ex00x0000370513,6598,no,8,,2zx00
x00fx0000891548,6598,yes,8,,3zx00
x00fx00x0000129525,6598,yes,8,,2zx00

是否可以按我的意愿发送二进制(文本?)文件?如果无法逐行发送文件,是否可以将一个字符串发送数千次?绝对必要的是,它们不需要是唯一的或在一个文件中,因为我可以使用重复的相同字符串来管理。

编辑#1

为什么我的脚本只向服务器发送一行(我希望是 4 行)之后它只是永远暂停(?)。客户端(也不是服务器)关闭了它的连接,但没有出现任何错误:

rm -f /tmp/fifofile
mkfifo /tmp/fifofile
cat /tmp/fifofile | nc 192.168.20.6 5000 &
sleep 1

i="0"

while [ $i -lt 4 ]
do
  echo "$i"
  echo -ne "\x00e\x00\x00001212dsfdsfdsfsdfsdfsdfdsf\x00" | tee /tmp/fifofile
  sleep 1
  i=$[$i+1]
done

最佳答案

您可以分两步实现:

1) 您需要以命名管道 (fifo) 作为输入来启动 nc:

mkfifo /tmp/fifoIn; cat /tmp/fifoIn | nc localhost 2222 &

2) 从文件 input.txt 中逐行发送数据,延迟 2 秒:

cat input.txt | while read line; do echo $line; sleep 2; done > /tmp/fifoIn

我已经用这个“服务器”测试过它(我使用的是 openbsd netcat 语法):

nc -l localhost 2222

关于linux - 使用 Netcat 将二进制文件(逐行)发送到套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265300/

相关文章:

python - 显式链接本地共享对象库

linux - 如何使用 --harmony 选项使 nodejs 文件可执行

linux - 如何告诉 wget 仅下载特定路径中的文件

linux - 将目录存储为变量供以后在 linux 脚本中使用

linux - shell中两个日期之间的天数差异

linux - 在 Bash 中导入远程源文件

php - CentOS Linux 控制台命令与 PHP exec(command)

unix - 通过 ffmpeg 命令将文件的扩展名转换为不同的目录

linux - 如何将多行粘贴到 scala stdIn 进程的命令行提示符?

linux - 文件编辑-命令行 unix