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

时间:2013-10-09 07:06:32

标签: linux bash centos6 netcat

作为this Stack Overflow question的分支,除了几个调整外,我想达到同样的目标。

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

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

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

<null>值是HEX值0x00

我已经从第一个条目重新提出了我的问题,但是 @mzet 在我的原始问题上回答了我,因为我的问题只是文本然后我发现我的字符串有这些{{1}我最初看不到里面的字符。我想用他的答案作为基础,因为我认为它几乎可以工作,但可能需要调整,所以这是他的贡献,而不是我的。

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

0x00

然后我认为我可以调整 @mzet 回答,并使用<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> 替换文件中的<null>值,并在\x00上设置-e命令:

echo

当我这样做时,我可以在服务器端看到[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

是否可以根据需要发送二进制(文本?)文件?如果它不可能逐行发送文件,那么可以发送一个字符串数千次吗?严格来说,它们不需要是唯一的,也不需要在文件中,因为我可以使用相同的字符串重复自我管理。

编辑#1

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

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

2 个答案:

答案 0 :(得分:4)

您可以分两步完成:

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

答案 1 :(得分:3)

经过大量尝试和拉扯我的头发后,我终于发现我可以使用NCat代替Netcat,因为NCat可以执行命令。

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

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

./sendlines.sh将发送4行,每行之间延迟2秒:

#!/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

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

如果你知道一种逐行发送二进制文件的方法,那就太棒了,因为它对我来说是最好的解决方案。