Skip to content

اسکریپت دستورات ساده برای مدیریت و دسترسی به برنامه. #44

@edi900310

Description

@edi900310
# ========================================================
# --- 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'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions