我正在尝试使用 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
我这样想:
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
或类似的(检查语法)。