2013-10-09 48 views
1

作为一个分拆到this Stack Overflow question我想实现相同,除了一些调整。发送一个二进制文件(逐行)到Netcat的套接字服务器

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

这是一个字符串/线我要发送(每秒数千文件中的行)的一个例子:

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

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

我已经rewitten我的问题从它的第一个条目,但@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答案,并用\x00取代我的文件中的<null>值,并在echo命令设置-e

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

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

[[email protected]]# 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 

回答

2

很多的努力和后拉我的头发我终于明白,我可以使用NCat而不是Netcat,因为NCat可以执行命令。

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

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

./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 

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

如果您知道一种逐行发送二进制文件的方式,那将会很棒,因为它对我来说是最好的解决方案。

3

您可以分两步实现它:

1)你必须用一个命名管道启动NC (fifo)作为输入:

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

2)从文件输入发送您的数据。TXT,一行行用2秒延时自拍:

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

我这个“服务器”(我使用OpenBSD的netcat的语法)进行了测试:

nc -l localhost 2222 
+0

这似乎工作,我会接受你的答案,除非有更好的几天内出现。你是否也知道是否有可能避免它在每行之后发送新行? – DHS

+1

在while循环中尝试'echo -n'而不是'echo' – mzet

+0

请参阅我的编辑 – DHS

相关问题