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

作为一个分离到这个堆栈溢出的问题,我想要执行相同的调整,除了一些调整。

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

这是我想发送的一个string/行的示例(每个文件有数千行):

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

<null>值是hex值0x00

我已经从第一个条目中重新发现了我的问题,但是@ mzet在我原来的问题上回答了我的问题,因为我的问题是纯文本的,但后来我发现我的string中有一些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的答案,用\x00replace我的文件中的<null>值,并在echo命令中设置-e

 [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 

是否有可能发送一个二进制(文本?)文件,如我所愿? 如果不能逐行发送文件,那么可以发送一个string几千次? 严格必要的,他们不需要是唯一的或在一个文件,因为我可以pipe理相同的string重复自己。

编辑#1

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

 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 

Solutions Collecting From Web of "使用Netcat将二进制文件(逐行)发送到套接字服务器"

你可以通过两个步骤来实现它:

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 

经过大量的尝试和拉我的头发,我终于明白,我可以使用NCat而不是Netcat作为NCat可以执行命令。

开始与NCat连接到端口5000上的套接字服务器并执行脚本./sendlines.sh

ncat --exec "./sendlines.sh" 192.168.1.10 5000

./sendlines.sh将在每行之间延迟./sendlines.sh发送4行:

 #!/bin/bash # # sendlines.sh, v1.00, initial release # i="0" while [ $i -lt 4 ] do echo -ne "\x00e\x00\x0000370513,6598,no,8,,2z\x00" sleep 2 i=$[$i+1] done 

我还没有想出如何逐行发送二进制文件,但这并不是严格必要的,因为我可以通过多次发送相同的字符串来进行管理。

如果你知道一种方式发送一个二进制文件,一行一行,这将是非常好的,因为这将是对我来说最好的解决方案。