-
Notifications
You must be signed in to change notification settings - Fork 28
Open
Description
# ========================================================
# --- MASTERDNS & DTEST ULTIMATE MANAGER (v14.0 - CPU FIX) ---
# ========================================================
MDNS_DIR="/root/masterdns"
DTEST_DIR="/root/masterdns/dtest"
# --- [ HELPER FUNCTIONS ] ---
get_toml_val() {
local key=$1
local file=$2
if [ -f "$file" ]; then
grep "^$key" "$file" | sed -E 's/.*=[[:space:]]*"?([^"#]*)"?.*/\1/' | tr -d ' ' | tail -n 1
else echo ""; fi
}
# کشتن ریشهای: هر چیزی که نام برنامه را داشته باشد نابود میکند
force-kill() {
local dir=$1
local name=$2
echo -e "💀 \e[1;31mAbsolute Cleanup: Removing all $name instances...\e[0m"
# کشتن بر اساس نام فایل (بدون در نظر گرفتن مسیر برای اطمینان ۱۰۰٪)
pkill -9 -x "$name" > /dev/null 2>&1
# کشتن هر پروسسی که از فایل در آن مسیر استفاده میکند
pkill -9 -f "$dir/$name" > /dev/null 2>&1
fuser -k "$dir/$name" > /dev/null 2>&1
# آزاد سازی پورت ۵۳
if [[ "$name" == "mdns" ]]; then
fuser -k -n udp 53 > /dev/null 2>&1
fuser -k -n tcp 53 > /dev/null 2>&1
fi
sleep 1
echo -e "✅ \e[1;32mSystem Cleaned.\e[0m"
}
show-status() {
local dir=$1
local name=$2
local color=$3
echo -e "\n🔍 \e[1;36mChecking $name Status...\e[0m"
# پیدا کردن PIDها با دقت بالا (حتی اگر با ./ اجرا شده باشند)
PIDS=$(ps aux | grep -E "$dir/$name|./$name" | grep -v "grep" | grep -v "nano" | awk '{print $2}')
if [ -z "$PIDS" ]; then
echo -e "❌ Status: \e[1;31mOFFLINE\e[0m"
else
COUNT=$(echo "$PIDS" | wc -w)
echo -e "✅ Status: $color ONLINE\e[0m (\e[1;33m$COUNT Instance/s\e[0m)"
for pid in $PIDS; do
MEM=$(ps -o rss= -p "$pid" 2>/dev/null | awk '{printf "%.2f MB", $1/1024}')
CPU=$(ps -o %cpu= -p "$pid" 2>/dev/null)
echo -e " 📍 \e[1;34mPID: $pid\e[0m | RAM: $MEM | \e[1;31mCPU: $CPU%\e[0m"
netstat -tulnp 2>/dev/null | grep "$pid/" | sed 's/^/ /'
done
if [ "$COUNT" -gt 1 ]; then
echo -e "⚠️ \e[1;31mWARNING: Multiple instances detected! Use kill command to fix CPU.\e[0m"
fi
fi
}
# --- [ MASTERDNS SECTION ] ---
mdns-help() {
echo -e "\n\e[1;32m==== 🛰️ MASTERDNS MAIN COMMANDS ====\e[0m"
echo -e " \e[1;33mmdns-run\e[0m : Kill ALL, clean logs, and run LIVE"
echo -e " \e[1;33mmdns-restart\e[0m : Background restart (Silent)"
echo -e " \e[1;33mmdns-kill\e[0m : Stop everything related to mdns"
echo -e " \e[1;33mmdns-status\e[0m : Monitor CPU/RAM and Port usage"
echo -e " \e[1;33mmdns-conf\e[0m : Edit config.toml"
echo -e " \e[1;33mmdns-res\e[0m : Edit resolvers list"
echo -e " \e[1;33mmdns-logs\e[0m : Tail logs"
echo -e " \e[1;33mmdns-speed\e[0m : Test speed via tunnel"
echo -e " \e[1;33mmdns-proxy-set\e[0m : Set session proxy"
echo -e " \e[1;31mproxy-unset\e[0m : Disable proxy"
}
mdns-restart() {
force-kill "$MDNS_DIR" "mdns"
> "$MDNS_DIR/mdns-client.log"
cd "$MDNS_DIR" && nohup ./mdns -config ./client_config.toml >> ./mdns-client.log 2>&1 &
echo -e "🚀 \e[1;32mMasterDNS Started.\e[0m"
}
mdns-run() { mdns-restart && tail -f "$MDNS_DIR/mdns-client.log"; }
mdns-kill() { force-kill "$MDNS_DIR" "mdns"; }
mdns-status() { show-status "$MDNS_DIR" "mdns" "\e[1;32m"; }
mdns-conf() { nano "$MDNS_DIR/client_config.toml"; }
mdns-res() { nano "$MDNS_DIR/client_resolvers.txt"; }
mdns-logs() { tail -f "$MDNS_DIR/mdns-client.log"; }
mdns-speed() {
local U=$(get_toml_val "SOCKS5_USER" "$MDNS_DIR/client_config.toml")
local P=$(get_toml_val "SOCKS5_PASS" "$MDNS_DIR/client_config.toml")
local PORT=$(get_toml_val "LISTEN_PORT" "$MDNS_DIR/client_config.toml")
curl -k -L -x socks5h://$U:$P@127.0.0.1:$PORT -o /dev/null https://speed.hetzner.de/100MB.bin
}
mdns-proxy-set() {
local U=$(get_toml_val "SOCKS5_USER" "$MDNS_DIR/client_config.toml")
local P=$(get_toml_val "SOCKS5_PASS" "$MDNS_DIR/client_config.toml")
local PORT=$(get_toml_val "LISTEN_PORT" "$MDNS_DIR/client_config.toml")
export http_proxy="socks5h://$U:$P@127.0.0.1:$PORT"
export https_proxy="socks5h://$U:$P@127.0.0.1:$PORT"
echo -e "🌐 Global Proxy Set to Port $PORT"
}
# --- [ DTEST SECTION ] ---
dtest-help() {
echo -e "\n\e[1;35m==== 🧪 DTEST DEBUG COMMANDS ====\e[0m"
echo -e " \e[1;36mdtest-run\e[0m, \e[1;36mdtest-restart\e[0m, \e[1;36mdtest-kill\e[0m, \e[1;36mdtest-status\e[0m"
}
dtest-restart() {
force-kill "$DTEST_DIR" "dtest"
> "$DTEST_DIR/test.log"
cd "$DTEST_DIR" && nohup ./dtest -config ./client_config.toml >> ./test.log 2>&1 &
echo -e "🚀 \e[1;35mdtest Started.\e[0m"
}
dtest-run() { dtest-restart && tail -f "$DTEST_DIR/test.log"; }
dtest-kill() { force-kill "$DTEST_DIR" "dtest"; }
dtest-status() { show-status "$DTEST_DIR" "dtest" "\e[1;35m"; }
dtest-conf() { nano "$DTEST_DIR/client_config.toml"; }
dtest-res() { nano "$DTEST_DIR/client_resolvers.txt"; }
dtest-logs() { tail -f "$DTEST_DIR/test.log"; }
# --- [ GLOBAL ] ---
proxy-unset() {
unset http_proxy https_proxy
echo -e "❌ \e[1;31mProxy Disabled.\e[0m"
}
alias masterdns-help='mdns-help && dtest-help'
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels