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