使用 xargs 与 netcat 并行向同一台服务器发送请求

使用 xargs 与 netcat 并行向同一台服务器发送请求

我正在尝试设计一个单行程序来将文本发送到一个简单的回显服务器 - 但并行多个连接。这就是我正在尝试的:

echo -e  A,B,C,D | xargs -d, -i -P 4 echo {} |  nc localhost 7000

但是,它并没有完全发挥作用。服务器收到了四个连接,但没有数据(“null”)。

这里正确的 xargs 和 netcat 命令是什么?

答案1

如果你喜欢使用,这可能会更简洁一些(并且我认为更易读)GNU 并行

parallel 'echo {} | nc localhost 7000' ::: A B C D

甚至:

parallel 'echo {} | nc localhost 7000' ::: {A..D}

答案2

答案是使用 来sh -c启动xargs

echo 'A,B,C,D' | xargs -d, -i -P 4 sh -c 'echo "{}" | nc localhost 7000'

看:https://stackoverflow.com/questions/845863/how-to-use-in-an-xargs-command

答案3

使用echo -n否则您将获得 5 个连接而不是 4 个,其中一个没有数据。如果服务器未检查这一点,则可能是它导致了您的问题。

echo -n A,B,C,D | xargs -d, -I{} -P 4 -n 1 echo {} | nc localhost 7000

此外,使用 netcat 作为监听服务器,它似乎工作正常:

zhen@sydow:~$ nc -l 7000
A
D
B
C

而且它似乎是并行的,我看到了无序的回声。

答案4

对于 xargs

xargs -i -P 1200 nc -zvn {} 22 < textfile-with-hosts.txt

对于并行:

parallel -j200% -n1 -a textfile-with-hosts.txt nc -vz {} ::: 22

相关内容