Shell 脚本在退出时不会杀死 nc 进程

问题描述 投票:0回答:1

我正在尝试使用 shell 脚本创建一个简单的蜜罐。该脚本使用 while 循环来防止

nc
在客户端关闭连接时停止。 我写了一个函数来杀死所有进程,包括脚本本身,以确保脚本关闭后netcat将停止监听。

当我启动脚本时,会创建3个进程

honeypot.sh
和1个进程
n
,当我使用
ctrl-c
关闭脚本并检查
ps -a
时,3个
honeypot.sh
消失了,但单个
nc 
仍然存在,我必须使用
killall -nc
手动杀死它。

最后一个

nc
过程的一个有趣的事情是,即使脚本关闭,我仍然能够连接到服务器,它甚至显示横幅,但是这一次,当我关闭连接时,
nc 
消失,服务器按其应有的方式关闭。 - 我希望服务器在脚本关闭时完全关闭。

有人可以告诉我我做错了什么吗?

#! /usr/bin/bash

port="$1"
honeypot_pid=()
touch honeypot.log

# Handle SIGNI and kill created processes
function ctrl_c()
{
    #kill "$honeypot_pid"
#   wait
#   cleanup
#   exit 1
    echo -e "\nEncerrando o servidor..."
    for pid in "${honeypot_pid[@]}"; do
        kill "$pid"
    done
    killall honeypot.sh
    exit 1
}

# Netcat server
server ()
{
    while true; do
        ( echo -e "--------" $(date) "--------\n" ; nc -vnlp $port < banner.txt) >>  honeypot.log 2>&1
    honeypot_pid+=($!)
    done &
}

# Handles ctrl-c
trap ctrl_c INT

echo "Initializing server..."

ifconfig
server

# Show real time log
tail -f ./honeypot.log

bash process sh netcat honeypot
1个回答
0
投票

我这样想:

while true; do
    ( echo -e "--------" $(date) "--------\n" ; nc -vnlp $port < banner.txt) >>  honeypot.log 2>&1
honeypot_pid+=($!)
done &

您可能想这样做:

while true; do
    { echo -e "-------- $(date) --------\n" ; nc -vnlp $port < banner.txt; } >>  honeypot.log 2>&1 &
    honeypot_pid+=($!)
done

或类似的(检查语法)。

© www.soinside.com 2019 - 2024. All rights reserved.