在bash中实现netcat

在bash中实现netcat,bash,netcat,Bash,Netcat,作为我试图编写的更大脚本的基础,我试图在bash中实现一个基本的netcat客户端。我当前的脚本在技术上可行,它看起来如下: #!/bin/bash exec 3<>/dev/tcp/$1/$2 cat <&3 & cat <&1 >3 CAT1_PID=$$ echo CAT1_PID > /tmp/CAT1_PID exec cat <&3 &

作为我试图编写的更大脚本的基础,我试图在bash中实现一个基本的netcat客户端。我当前的脚本在技术上可行,它看起来如下:

#!/bin/bash

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

cat <&3 &                      
cat <&1 >3
CAT1_PID=$$
echo CAT1_PID > /tmp/CAT1_PID
exec cat <&3 &
#/bin/bash
执行3/dev/tcp/$1/$2

猫这是一个可怕的乱七八糟的地方,但是你可以产生一个次地狱,所以类似这样的东西:

#!/bin/bash

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

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

我认为杰里米的回答是正确的,但对任何好奇的人来说,这是我最后的完整剧本:

#!/bin/bash

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

control_c()
{
    kill $CAT_PID
    exit $?
}

trap control_c SIGINT

cat <&3 &                      
CAT_PID=$!
cat >&3
#/bin/bash
执行3/dev/tcp/$1/$2
控制_c()
{
杀死$CAT_PID
退出$?
}
陷阱控制信号
第三类

当我控制我的脚本时,你知道一种自动调用pkill的方法吗?我已经有一段时间没有做任何真正的脚本了,所以我不得不依赖全能的谷歌。如果您使用的是
bash
,那么您可以试试这个。我最近发现了一系列不同的shell变体作为默认shell,因此请确保您有
#指向正确的位置。向上投票以发布您的工作解决方案。人们这样做真是太好了!谢谢你!我也做了类似的工作,但是使用
pkill-P$$
而不是捕获PID,并且在末尾使用一个额外的
pkill-P$$$
来捕获客户端关闭的连接(这导致一只无主猫在附近逗留了一段时间)添加一个“等待”在远端发送响应之前,阻止脚本存在。否则,一旦stdin关闭,猫就会被遗弃。