在bash中实现netcat

时间:2012-08-24 23:53:50

标签: bash netcat

作为我正在尝试编写的更大脚本的基础,我正在尝试基本上在bash中实现基本的netcat客户端。我目前的脚本很有用,看起来像这样:

#!/bin/bash

exec 3<>/dev/tcp/$1/$2         

cat <&3 &                      
cat <&1 >3

它的问题在于它留下了一个需要被杀死的挂猫进程,但是我无法想出一个自动的方法,并且手动运行pkill cat并不是真正的运动。< / p>

2 个答案:

答案 0 :(得分:5)

我接受了Jeremy的答案是正确的,但对于任何好奇的人来说,这是我最终的完整剧本:

#!/bin/bash

exec 3<>/dev/tcp/$1/$2         

control_c()
{
    kill $CAT_PID
    exit $?
}

trap control_c SIGINT

cat <&3 &                      
CAT_PID=$!
cat >&3

答案 1 :(得分:3)

这是一个可怕的kludge,但你可以产生一个子shell,所以像这样:

CAT1_PID=$$
echo CAT1_PID > /tmp/CAT1_PID
exec cat <&3 &

然后,当然,如果正在运行此脚本的多个副本,则会遇到竞争条件。

根据您的shell,您可以在PS列表中调用某种形式的exec和“重命名”cat。那你可以

pkill the_cat_that_ate_the_network