Cecep Purwana

I am a Personal fun

Cecep Purwana

Seorang Driver Dump Truck Yang Menjadikan Computer Sebagai Hobi Dan Memiliki Ketertarikan Akan Dunia IT,Serta Ingin Selalu Mencoba Sesuatu Yang Baru Untuk Menambah Pengetahuan Dan Pengalaman Diri. "Computer is my hobby, the street is my life"

  • Jalan Raya Badau Km.11 Rt.006.Rw.002 Tanjung Pandan Belitung 33451
  • +628197887769
  • purwana.cecep@gmail.com
  • www.ceceppurwana.blogspot.co.id
Me

My Professional Skills

Web Development 90%
Internet Marketing 95%
Computer Technician 95%
Blogger 95%
Driver 97%

Jasa Pembuatan Website

Menerima jasa pembuatan website Usaha,Pribadi,Organisasi,Sekolah,Berita,Iklan Online,Toko Online,dll sesuai dengan permintaan anda

Service Computer

Jasa Service komputer belitung terpercaya dan berpengalaman.Kami memberikan service dan layanan terbaik sehingga customer merasa puas akan layanan yang kami berikan

Perakitan Computer

Jasa Perakitan Komputer kantor, pribadi, maupun game/warnet, Kami Memenuhi kebutuhan anda berdasarkan budget dengan mengutamakan kualitas

Internet Marketing

Merancang cara pemasaran atau modern marketing plan yang fokus mendapatkan prospek atau leads hingga meningkatkan convertion rate merupakan pilihan yang cepat, tepat dan murah.

Pemasangan CCTV

Menerima Jasa Setting CCTV , Jasa Pemasangan CCTV dan Perawatan CCTV untuk Rumah, Kafe, Hotel, Penginapan, Rumah Makan, Kantor, Warnet dan lain-lainnya.Keterangan lebih lanjut hubungi kami.

Maintenance Computer

Jasa Maintenance komputer untuk perkantoran,sekolah atau warnet,khusus bagi anda yang menghargai waktu berharga anda.Serahkan urusan ini kepada kami.Yang terbaik hanya untuk anda

0
completed project
0
my client
0
facebook like
0
work partners
  • Membuat Menu Panel UDP Hunter

    panel_udp_hunter

    Ini adalah kelanjutan postingan sebelumnya dengan judul : Sistem Anti-MultiLogin UDP dengan Panel On/Off . Jika anda menemukan postingan ini harap untuk membuka dan membaca postingan sebelumnya untuk memahami secara utuh apa yang akan kita bahas di postingan ini.
    Ikuti langkah-langkah di bawah ini untuk membuatnya.
    Langkah 1: Membuat File Skrip hunter
    Kita akan membuat file skrip bernama hunter di direktori /usr/local/bin. Direktori ini ada di PATH sistem, artinya Anda bisa menjalankan skrip dari mana saja dengan cukup mengetik namanya.
    1.Buat file skrip dengan nano:
    sudo nano /usr/local/bin/hunter
    2.Copy-paste seluruh kode di bawah ini ke dalam file nano:
    #!/bin/bash
    
    # Fungsi untuk menampilkan menu
    show_menu() {
        clear
        echo "=========================================="
        echo "     PANEL PENJAGA UDP - HUNTER"
        echo "=========================================="
        echo "1. Aktifkan Penjaga UDP"
        echo "2. Nonaktifkan Penjaga UDP"
        echo "3. Lihat Status Penjaga"
        echo "4. Pantau Log Aktivitas (Live)"
        echo "5. Lihat IP yang Diblokir"
        echo "6. Bersihkan Semua IP yang Diblokir"
        echo "7. Keluar"
        echo "=========================================="
    }
    
    # Loop utama menu
    while true; do
        show_menu
        read -p "Masukkan pilihan Anda [1-7]: " choice
    
        case $choice in
            1)
                echo ">> Mengaktifkan Penjaga..."
                sudo /opt/udp-proxy/panel/enable.sh
                ;;
            2)
                echo ">> Menonaktifkan Penjaga..."
                sudo /opt/udp-proxy/panel/disable.sh
                ;;
            3)
                echo ">> Status Layanan Penjaga:"
                sudo systemctl status udp-enforcer.service --no-pager
                ;;
            4)
                echo ">> Menampilkan log aktivitas (tekan Ctrl+C untuk kembali ke menu):"
                sudo journalctl -u udp-enforcer.service -f
                ;;
            5)
                echo ">> Daftar IP yang saat ini diblokir:"
                sudo iptables -L UDP_ENFORCER -n -v --line-numbers
                ;;
            6)
                echo ">> Membersihkan semua aturan blokir IP..."
                sudo iptables -F UDP_ENFORCER
                echo ">> Semua IP telah dibebaskan dari blokir."
                ;;
            7)
                echo ">> Keluar dari menu Hunter. Sampai jumpa!"
                exit 0
                ;;
            *)
                echo ">> Pilihan tidak valid, silakan coba lagi."
                ;;
        esac
    
        # Jeda sebelum menampilkan menu kembali
        echo ""
        read -p "Tekan [Enter] untuk melanjutkan..."
    done
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    Langkah 2: Jadikan Skrip Dapat Dieksekusi
    Agar skrip hunter bisa dijalankan, kita perlu memberinya izin eksekusi.
    sudo chmod +x /usr/local/bin/hunter
    Langkah 3: Cara Menggunakan Menu hunter
    1.Buka terminal.
    2.Ketik perintah berikut untuk membuka menu:
    sudo hunter
    3.Anda akan melihat menu interaktif seperti ini:
    PANEL PENJAGA UDP - HUNTER========================================== 1.Aktifkan Penjaga UDP
    2.Nonaktifkan Penjaga UDP
    3.Lihat Status Penjaga
    4.Pantau Log Aktivitas (Live)
    5.Lihat IP yang Diblokir
    6.Bersihkan Semua IP yang Diblokir
    7.Keluar
    Masukkan pilihan Anda [1-7]:
    Enter your code here...
    Sekarang, panel interaktif Anda siap digunakan!
  • Sistem Anti-MultiLogin UDP dengan Panel On-Off

    udp script no multilogin
    Jika anda adalah admin dari sebuah server tunneling khususnya layanan UDP,ini adalah script Sistem Anti-MultiLogin UDP dengan Panel On/Off.Dengan cara ini anda bisa melihat user mana yang melakukan kecurangan multilogin akan bisa di atasi dengan mudah dan realtime.Script ini bisa di gunakan di Ubuntu 20.04 sampai dengan Ubuntu 24.04
    Langkah 0: Persiapan Dan Prasyarat :
    Sebelum memulai, pastikan dua hal ini terpenuhi.
    1.Pastikan Anda memiliki layanan UDP proxy yang sudah berjalan. Anda perlu mengetahui nama layanan systemd-nya. Nama yang umum adalah udp-custom.service, udp-proxy.service, atau xray.service. Untuk panduan ini, kita akan menggunakan udp-custom.service sebagai contoh. Ganti dengan nama layanan Anda yang sebenarnya.
    Cari nama layanan Anda:
    systemctl list-units --type=service | grep -i udp
    2.Instal conntrack. Alat ini wajib untuk memutus koneksi UDP secara paksa.
    # Untuk Debian/Ubuntu
    sudo apt update && sudo apt install conntrack -y
    Langkah 1: Membuat Skrip Penjaga Utama
    Ini adalah otak dari sistem. Skrip ini akan memantau log, mengelola status, dan mengeksekusi aturan firewall.
    1.Buat file skrip di lokasi yang standar:
    sudo nano /opt/udp-proxy/bin/enforcer_service.sh
    2.Copy-paste seluruh kode di bawah ini. Jangan ubah apa pun kecuali yang ada di bagian "KONFIGURASI".
    #!/bin/bash
    
    # =================================================================
    # --- CEK FILE BENDERA (PANEL KONTROL) ---
    # Skrip akan berhenti jika file bendera ini tidak ada.
    # =================================================================
    FLAG_FILE="/opt/udp-proxy/log/enforcer.enabled"
    if [ ! -f "$FLAG_FILE" ]; then
        echo "[$(date)] File bendera '$FLAG_FILE' tidak ditemukan. Penjaga tidak aktif. Keluar."
        exit 0
    fi
    
    # =================================================================
    # --- KONFIGURASI PENJAGA (UBAH BAGIAN INI SAJA) ---
    # =================================================================
    PROTECTED_PORT=36712         # Port UDP yang dilindungi
    STATE_FILE="/opt/udp-proxy/log/enforcer_state.log"
    IPTABLES_CHAIN="UDP_ENFORCER"
    MEMORY_MINUTES=10            # Berapa lama mengingat sesi yang tidak aktif
    TIMEOUT_MINUTES=15           # Sesi dianggap hangus setelah X menit tidak ada aktivitas
    GRACE_PERIOD_SECONDS=120     # Waktu tunggu sebelum IP lama ditendang (120 detik = 2 menit)
    # Nama layanan UDP proxy Anda (DITEMUKAN DI LANGKAH 0)
    UDP_SERVICE_NAME="udp-custom.service"
    # =================================================================
    
    # --- PASTIKAN DIREKTORI YANG DIPERLUKAN ADA ---
    mkdir -p "$(dirname "$STATE_FILE")"
    touch "$STATE_FILE"
    
    # =================================================================
    # --- FUNGSI PEMBERSIH (OTOMATIS LUPA & EKSEKUSI TIMER) ---
    # =================================================================
    function cleanup() {
        echo "[$(date)] =====> MEMULAI PEMBERSIHAN DAN EKSEKUSI TIMER <====="
        local current_time=$(date +%s)
        local timeout_seconds=$((TIMEOUT_MINUTES * 60))
        local temp_state_file=$(mktemp)
    
        while IFS=':' read -r user ip last_seen violation_time; do
            if [[ -z "$user" || -z "$ip" || -z "$last_seen" ]]; then continue; fi
            
            local elapsed=$((current_time - last_seen))
    
            if [ "$elapsed" -lt "$timeout_seconds" ]; then
                if [[ -n "$violation_time" ]]; then
                    local violation_elapsed=$((current_time - violation_time))
                    if [ "$violation_elapsed" -ge "$GRACE_PERIOD_SECONDS" ]; then
                        echo "[$(date)] >>> EKSEKUSI: Timer habis. Memutus & memblokir IP '$ip' (user: '$user')..."
                        sudo conntrack -D -s "$ip" -p udp 2>/dev/null
                        if ! sudo iptables -C "$IPTABLES_CHAIN" -s "$ip" -j DROP &> /dev/null; then
                            sudo iptables -A "$IPTABLES_CHAIN" -s "$ip" -j DROP -m comment --comment "Kicked $USER on $(date +%F-%T)"
                            echo "[$(date)] >>> IP '$ip' telah diblokir."
                        fi
                        continue
                    else
                        echo "[$(date)] [DEBUG] Timer untuk IP '$ip' user '$user' belum habis. Menunggu..."
                        echo "${user}:${ip}:${last_seen}:${violation_time}" >> "$temp_state_file"
                    fi
                else
                    echo "[$(date)] [DEBUG] Sesi normal untuk user '$user' dari IP '$ip'."
                    echo "${user}:${ip}:${last_seen}:" >> "$temp_state_file"
                fi
            else
                echo "[$(date)] Sesi untuk user '$user' dari IP '$ip' kadaluarsa. Membuka blokir..."
                local rule_num=$(sudo iptables -L "$IPTABLES_CHAIN" --line-numbers -n | grep "$ip" | awk '{print $1}' | head -n 1)
                if [ -n "$rule_num" ]; then
                    sudo iptables -D "$IPTABLES_CHAIN" "$rule_num"
                fi
            fi
        done < "$STATE_FILE"
    
        mv "$temp_state_file" "$STATE_FILE"
        echo "[$(date)] =====> PEMBERSIHAN SELESAI <====="
    }
    
    # =================================================================
    # --- INISIALISASI PENJAGA ---
    # =================================================================
    # Buat chain jika belum ada
    if ! sudo iptables -L "$IPTABLES_CHAIN" &> /dev/null; then
        echo "[$(date)] Membuat chain iptables: $IPTABLES_CHAIN"
        sudo iptables -N "$IPTABLES_CHAIN"
    fi
    
    # --- PASTIKAN POSISI ATURAN BENAR (KRUSIAL) ---
    echo "[$(date)] Memastikan aturan iptables berada di posisi teratas..."
    sudo iptables -D INPUT -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN" 2>/dev/null
    sudo iptables -D FORWARD -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN" 2>/dev/null
    sudo iptables -F "$IPTABLES_CHAIN" # Bersihkan aturan lama
    sudo iptables -I INPUT 1 -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN"
    sudo iptables -I FORWARD 1 -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN"
    
    # Jalankan cleanup di latar belakang
    while true; do
        cleanup
        sleep 300
    done &
    CLEANUP_PID=$!
    trap 'kill $CLEANUP_PID; exit' SIGTERM SIGINT
    
    # Memori awal
    echo "[$(date)] Memuat memori awal dari $MEMORY_MINUTES menit terakhir..."
    sudo journalctl -u "$UDP_SERVICE_NAME" --since "$MEMORY_MINUTES minutes ago" --no-pager | grep "Client connected" | sort | awk -F'[][]' '
    {
        for (i=1; i<=NF; i++) {
            if ($i ~ /src:/) { split($i, s, ":"); ip = s[2]; }
            if ($i ~ /user:/) { split($i, u, ":"); user = u[2]; }
        }
        if (user && ip) {
            print user ":" ip ":" systime() ":" > "'"$STATE_FILE"'"
        }
    }'
    awk -i inplace '!seen[$0]++' "$STATE_FILE"
    echo "[$(date)] Memori awal selesai. Penjaga siap bertugas!"
    
    # Loop utama pemantauan
    echo "[$(date)] Memantau log layanan: $UDP_SERVICE_NAME"
    sudo journalctl -u "$UDP_SERVICE_NAME" -f --no-tail | while read line; do
        if [[ "$line" == *"[INFO]"*"[src:"*"[user:"*"Client connected"* ]]; then
            IP=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /src:/){split($i, a, ":"); print a[2]}}}')
            USER=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /user:/){split($i, a, ":"); print a[2]}}}')
            if [[ -n "$IP" && -n "$USER" ]]; then
                echo "[$(date)] Koneksi baru: User '$USER' dari IP '$IP'"
                LAST_ENTRY=$(grep "^${USER}:" "$STATE_FILE" | tail -n 1)
                LAST_IP=$(echo "$LAST_ENTRY" | cut -d':' -f2)
                if [[ -n "$LAST_IP" && "$LAST_IP" != "$IP" ]]; then
                    echo "[$(date)] >>> PELANGGARAN: User '$USER' multi-login (IP lama: '$LAST_IP', IP baru: '$IP')."
                    echo "[$(date)] >>> IP lama '$LAST_IP' akan ditendang dalam $((GRACE_PERIOD_SECONDS / 60)) menit."
                    OLD_LAST_SEEN=$(echo "$LAST_ENTRY" | cut -d':' -f3)
                    sed -i "/^${USER}:${LAST_IP}:/d" "$STATE_FILE"
                    echo "${USER}:${LAST_IP}:${OLD_LAST_SEEN}:$(date +%s)" >> "$STATE_FILE"
                fi
                echo "${USER}:${IP}:$(date +%s)::" >> "$STATE_FILE"
                awk -i inplace '!seen[$0]++' "$STATE_FILE"
            fi
        elif [[ "$line" == *"[INFO]"*"[src:"*"[user:"*"Client disconnected"* ]]; then
            IP=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /src:/){split($i, a, ":"); print a[2]}}}')
            USER=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /user:/){split($i, a, ":"); print a[2]}}}')
            if [[ -n "$IP" && -n "$USER" ]]; then
                echo "[$(date)] User '$USER' dari IP '$IP' disconnect. Membersihkan state..."
                sed -i "/^${USER}:${IP}:/d" "$STATE_FILE"
            fi
        fi
    done
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    4.Jadikan skrip dapat dieksekusi:
    sudo chmod +x /opt/udp-proxy/bin/enforcer_service.sh
    Langkah 2: Membuat Layanan systemd
    Ini membuat skrip penjaga berjalan otomatis di latar belakang dan restart jika gagal.
    1.Buat file layanan:
    sudo nano /etc/systemd/system/udp-enforcer.service
    2.Copy-paste konfigurasi berikut:
    [Unit]
    Description=UDP Multi-Login Enforcer Service
    After=network.target udp-custom.service
    
    [Service]
    Type=simple
    User=root
    ExecStart=/opt/udp-proxy/bin/enforcer_service.sh
    Restart=always
    RestartSec=10s
    
    [Install]
    WantedBy=multi-user.target
    Penting: Jika nama layanan UDP Anda bukan udp-custom.service, ubah baris After=... sesuai.
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    4.Aktifkan layanan untuk berjalan saat boot:
    sudo systemctl daemon-reload
    sudo systemctl enable udp-enforcer.service
    Langkah 3: Membuat Panel Kontrol On/Off
    Ini adalah antarmuka sederhana untuk mengontrol penjaga.
    1.Buat direktori untuk panel:
    sudo mkdir -p /opt/udp-proxy/panel
    2.Buat skrip enable.sh:
    sudo nano /opt/udp-proxy/panel/enable.sh
    Isi dengan:
    #!/bin/bash
    echo "Mengaktifkan Penjaga UDP..."
    # Pastikan direktori log ada
    sudo mkdir -p /opt/udp-proxy/log
    # Buat file bendera
    sudo touch /opt/udp-proxy/log/enforcer.enabled
    # Restart layanan untuk menerapkan
    sudo systemctl restart udp-enforcer.service
    echo "Penjaga UDP telah diaktifkan dan dimulai ulang."
    3.Buat skrip disable.sh:
    sudo nano /opt/udp-proxy/panel/disable.sh
    Isi dengan:
    #!/bin/bash
    echo "Menonaktifkan Penjaga UDP..."
    # Hapus file bendera
    sudo rm -f /opt/udp-proxy/log/enforcer.enabled
    # Hentikan layanan
    sudo systemctl stop udp-enforcer.service
    echo "Penjaga UDP telah dinonaktifkan dan dihentikan."
    4.Jadikan kedua skrip panel dapat dieksekusi:
    sudo chmod +x /opt/udp-proxy/panel/enable.sh
    sudo chmod +x /opt/udp-proxy/panel/disable.sh
    Langkah 4: Aktivasi Dan Verifikasi Akhir
    Sekarang kita akan mengaktifkan semuanya dan memastikan berjalan sempurna.
    1.Aktifkan Penjaga menggunakan panel:
    sudo /opt/udp-proxy/panel/enable.sh
    2.Periksa status layanan. Harus active (running):
    sudo systemctl status udp-enforcer.service
    Output yang diharapkan:
    ● udp-enforcer.service - UDP Multi-Login Enforcer Service
         Loaded: loaded (/etc/systemd/system/udp-enforcer.service; enabled; vendor preset: enabled)
         Active: **active (running)** since ...
    3.Periksa log untuk memastikan skrip berjalan:
    sudo journalctl -u udp-enforcer.service -f
    4.Verifikasi aturan iptables ada di posisi teratas:
    sudo iptables -L INPUT -n --line-numbers
    Pastikan aturan yang mengarah ke UDP_ENFORCER ada di nomor 1.
    Sistem Anda sekarang seharusnya sudah siap dan berjalan dengan benar!
    Untuk mempermudah penggunaan script yang telah kita buat di atas,kita akan membuat menu panel sederhana di postingan berikutnya : Membuat Menu Panel Hunter
  • Streaming Facebook Via VPS

    stream_facebook_via_vps
    Berikut adalah panduan cara streaming facebook via vps lengkap dari awal hingga cara masuk kembali ke layar streaming:
    Langkah 1: Update dan Install FFmpeg
    apt update && apt upgrade -y
    Install FFmpeg:
    apt install ffmpeg -y
    Langkah 2: Install TMUX
    Agar streaming tidak terputus saat menutup terminal:
    apt install tmux -y
    Langkah 3: Persiapan Folder
    Buat folder penyimpanan dan masuk ke dalamnya:
    mkdir -p /root/video
    cd /root/video
    Untuk melihat file ketikan
    ls
    Langkah 4: Membuat File Playlist
    Buat file teks yang berisi daftar video.
    1.Ketik perintah ini:
    nano playlist.txt
    2.Isi dengan daftar video (gunakan kutip satu '). Contoh:
    file 'Video Satu.mp4'
    file 'Video Dua (Lagu).mp4'
    file 'Video Tiga.mp4'
    3.Simpan: Tekan Ctrl + X, lalu Y, lalu Enter.
    Langkah 5: Upload Video
    Buka FileZilla, login sebagai root, masuk ke folder /root/video, lalu upload semua file video yang tercantum di playlist.txt tersebut.
    Langkah 6: Masuk ke Sesi TMUX Baru (Nama: stream360)
    Kita akan membuat layar bernama stream360 agar nanti mudah dimasuki kembali.
    tmux new -s stream360
    Langkah 7: Jalankan Skrip Streaming
    Sekarang jalankan perintah FFmpeg kamu (pastikan masih berada di folder /root/video):
    ffmpeg -re -f concat -safe 0 -stream_loop -1 -i playlist.txt \
    -vf scale=640:-2 \
    -c:v libx264 -preset ultrafast -tune zerolatency -b:v 350k -maxrate 350k -bufsize 700k -pix_fmt yuv420p -g 30 -threads 1 \
    -c:a aac -b:a 64k -ar 44100 \
    -f flv "rtmps://live-api-s.facebook.com:443/rtmp/FB-25673775738930917-0-Ab6a6EuzqQhALumB1JgAeiCj"
    PENTING : Ganti kode API Facebook diatas dengan API Facebook milik mu
    Langkah 8: Keluar tmux dan biarkan streaming berjalan.
    Agar kamu bisa menutup laptop tapi stream tetap jalan:
    1.Tekan Ctrl + B.
    2.Lalu tekan D.
    Langkah 9: Menghentikan Streaming
    tmux attach -t stream360
    Setelah masuk ke Tmux,tekan ctrl + c ,kemudian ketik exit,kamu akan berhenti dari mode streaming.
  • Update Script Monitoring UDP V3

    update_script_monitoring_udp
    Postingan ini adalah kelanjutan dari postingan sebelumnya dengan Judul Membuat Panel Monitoring UDP V2
    Cara Menggunakan:
    1.Buka file dengan perintah: sudo nano /opt/udp-proxy/bin/monitorpanel.sh
    sudo nano /opt/udp-proxy/bin/monitorpanel.sh
    2.Hapus semua isi file lama
    3.Copy dan paste script di atas ke dalam file
    4.Simpan dengan Ctrl+X, lalu Y, lalu Enter
    5.Jalankan panel dengan perintah: bash /opt/udp-proxy/bin/monitorpanel.sh
    bash /opt/udp-proxy/bin/monitorpanel.sh
    6.Untuk menampilkan panel menu cukup ketik monitorpanel pada terminal
    monitorpanel
    Script Monitoring UDP V3
    #!/bin/bash
    
    # --- DEFINISI WARNA ---
    NC='\033[0m'; RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; MAGENTA='\033[0;35m'; CYAN='\033[0;36m'; WHITE='\033[1;37m'
    
    # --- Fungsi Helper untuk Enforcer ---
    function start_enforcer() {
        if pgrep -f "enforcer.sh" > /dev/null; then
            echo -e "${YELLOW}Penjaga Koneksi (Enforcer) sudah berjalan.${NC}"
        else
            echo -e "${YELLOW}Menjalankan Penjaga Koneksi di latar belakang...${NC}"
            screen -dmS enforcer /opt/udp-proxy/bin/enforcer.sh
            sleep 2
            if pgrep -f "enforcer.sh" > /dev/null; then
                echo -e "${GREEN}Penjaga Koneksi berhasil dijalankan.${NC}"
            else
                echo -e "${RED}Gagal menjalankan Penjaga Koneksi. Cek lognya dengan 'screen -r enforcer'.${NC}"
            fi
        fi
    }
    
    function stop_enforcer() {
        if pgrep -f "enforcer.sh" > /dev/null; then
            echo -e "${YELLOW}Menghentikan Penjaga Koneksi...${NC}"
            pkill -f "enforcer.sh"
            sleep 2
            echo -e "${GREEN}Penjaga Koneksi telah dihentikan.${NC}"
        else
            echo -e "${YELLOW}Penjaga Koneksi tidak sedang berjalan.${NC}"
        fi
    }
    
    function show_enforcer_status() {
        if pgrep -f "enforcer.sh" > /dev/null; then
            echo -e "${GREEN}Status: Berjalan${NC}"
            echo -e "Untuk melihat log real-time, jalankan: ${CYAN}screen -r enforcer${NC}"
        else
            echo -e "${RED}Status: Tidak Berjalan${NC}"
        fi
        echo ""
        echo -e "${CYAN}Aturan IP yang diblokir saat ini:${NC}"
        sudo iptables -L UDP_ENFORCER --line-numbers -n
    }
    
    function unkick_all() {
        echo -e "${YELLOW}Menghapus semua aturan blokir IP...${NC}"
        sudo iptables -F UDP_ENFORCER
        echo -e "${GREEN}Semua IP telah dibebaskan (unkicked).${NC}"
    }
    
    # --- Fungsi Menu Enforcer ---
    function show_enforcer_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Kelola Penjaga Koneksi (Kick Multi-Login) ---${NC}"
            echo -e "  ${GREEN}1.${NC} Jalankan Penjaga Koneksi"
            echo -e "  ${GREEN}2.${NC} Hentikan Penjaga Koneksi"
            echo -e "  ${GREEN}3.${NC} Lihat Status Penjaga & IP Terblokir"
            echo -e "  ${YELLOW}4.${NC} Hapus Semua Blokir IP (Unkick All)"
            echo -e "  ${RED}5.${NC} Kembali ke Menu Utama"
            echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-5]: ${NC}"
            read choice
            case $choice in
                1)
                    echo -e "${YELLOW}Menjalankan dan mengaktifkan Penjaga Koneksi...${NC}"
                    sudo systemctl enable udp-enforcer.service
                    sudo systemctl start udp-enforcer.service
                    sleep 2
                    echo -e "${GREEN}Selesai.${NC}"
                    ;;
                2)
                    echo -e "${YELLOW}Menghentikan dan menonaktifkan Penjaga Koneksi...${NC}"
                    sudo systemctl stop udp-enforcer.service
                    sudo systemctl disable udp-enforcer.service
                    sleep 2
                    echo -e "${GREEN}Selesai.${NC}"
                    ;;
                3)
                    echo -e "${CYAN}Status Layanan:${NC}"
                    sudo systemctl status udp-enforcer.service --no-pager
                    echo ""
                    echo -e "${CYAN}Aturan IP yang diblokir saat ini:${NC}"
                    sudo iptables -L UDP_ENFORCER --line-numbers -n
                    ;;
                4) unkick_all ;;
                5) break ;;
                *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;;
            esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    
    
    # --- FUNGSI MENU LAINNYA (TIDAK PERLU DIUBAH) ---
    function show_header() {
        clear
        echo -e "${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
        echo -e "${WHITE}                            [ UDP MONITOR PANEL ]                              ${NC}"
        echo -e "${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
        echo -e "${CYAN}                              Powered by HAXOR                                  ${NC}"
        echo -e "${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
        echo ""
    }
    function show_menu() {
        echo -e "${MAGENTA}Pilih kategori menu:${NC}"
        echo -e "  ${GREEN}1.${NC} Monitoring User UDP"
        echo -e "  ${GREEN}2.${NC} Monitoring Bandwidth & Jaringan"
        echo -e "  ${GREEN}3.${NC} Monitoring Sumber Daya (CPU/RAM/Disk)"
        echo -e "  ${GREEN}4.${NC} Informasi & Kontrol Sistem"
        echo -e "  ${GREEN}5.${NC} Kelola Penjaga Koneksi (Kick Multi-Login)"
        echo -e "  ${RED}6.${NC} Keluar"
        echo ""
    }
    function show_user_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Monitoring User UDP ---${NC}"
            echo -e "  ${GREEN}1.${NC} Cek User Login (Real-time Dashboard)"; echo -e "  ${GREEN}2.${NC} Cek User Multi-Login"; echo -e "  ${GREEN}3.${NC} Tampilkan User Aktif Saat Ini"; echo -e "  ${GREEN}4.${NC} Tampilkan Alur Log Koneksi (Live Stream)"; echo -e "  ${RED}5.${NC} Kembali ke Menu Utama"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-5]: ${NC}"; read choice
            case $choice in 1) watch -n 5 udplog ;; 2) checkmultilogin ;; 3) udplog ;; 4) sudo journalctl -u udp-custom.service -f | grep "Client connected" ;; 5) break ;; *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;; esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    function show_network_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Monitoring Bandwidth & Jaringan ---${NC}"
            echo -e "  ${GREEN}1.${NC} Monitor Bandwidth (Per Jam)"; echo -e "  ${GREEN}2.${NC} Monitor Bandwidth (Per Hari)"; echo -e "  ${GREEN}3.${NC} Monitor Bandwidth (Per Bulan)"; echo -e "  ${GREEN}4.${NC} Cek Kecepatan Internet (Ookla Speedtest)"; echo -e "  ${RED}5.${NC} Kembali ke Menu Utama"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-5]: ${NC}"; read choice
            case $choice in 1) vnstat -h ;; 2) vnstat -d ;; 3) vnstat -m ;; 4) speedtest ;; 5) break ;; *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;; esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    function show_resource_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Monitoring Sumber Daya ---${NC}"
            echo -e "  ${GREEN}1.${NC} Tampilkan Penggunaan CPU & RAM (Real-time)"; echo -e "  ${GREEN}2.${NC} Tampilkan Penggunaan Disk"; echo -e "  ${GREEN}3.${NC} Ringkasan Penggunaan Sumber Daya"; echo -e "  ${RED}4.${NC} Kembali ke Menu Utama"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-4]: ${NC}"; read choice
            case $choice in 1) htop ;; 2) df -h ;; 3) echo -e "${CYAN}### Penggunaan CPU & RAM ###${NC}"; top -bn1 | head -5; echo -e "\n${CYAN}### Penggunaan Disk ###${NC}"; df -h ;; 4) break ;; *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;; esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    function show_system_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Informasi & Kontrol Sistem ---${NC}"
            echo -e "  ${GREEN}1.${NC} Informasi VPS Lengkap"; echo -e "  ${GREEN}2.${NC} Pengguna VPS yang Sedang Login"; echo -e "  ${GREEN}3.${NC} Restart Service UDP"; echo -e "  ${YELLOW}4.${NC} Restart VPS"; echo -e "  ${GREEN}5.${NC} Atur Auto Reboot VPS"; echo -e "  ${RED}6.${NC} Kembali ke Menu Utama"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-6]: ${NC}"; read choice
            case $choice in
                1) neofetch ;;
                2) w ;;
                3) echo -e "${YELLOW}Mencoba me-restart service udp-custom...${NC}"; sudo systemctl restart udp-custom.service; echo -e "${GREEN}Service telah di-restart.${NC}" ;;
                4) printf "${RED}Apakah Anda yakin ingin me-reboot VPS? (y/n): ${NC}"; read confirm; if [[ $confirm == [yY] ]]; then echo -e "${YELLOW}VPS akan reboot dalam 5 detik...${NC}"; sleep 5; sudo reboot; fi ;;
                5) setup_auto_reboot_menu ;;
                6) break ;;
                *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;;
            esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    function setup_auto_reboot_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Atur Auto Reboot VPS ---${NC}"
            echo -e "  ${GREEN}1.${NC} Setiap Jam"; echo -e "  ${GREEN}2.${NC} Setiap 6 Jam"; echo -e "  ${GREEN}3.${NC} Setiap 12 Jam"; echo -e "  ${GREEN}4.${NC} Setiap Hari (Tengah Malam)"; echo -e "  ${YELLOW}5.${NC} Batalkan Auto Reboot"; echo -e "  ${RED}6.${NC} Kembali"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-6]: ${NC}"; read choice
            local cron_job=""
            case $choice in 1) cron_job="0 * * * * /sbin/reboot" ;; 2) cron_job="0 */6 * * * /sbin/reboot" ;; 3) cron_job="0 */12 * * * /sbin/reboot" ;; 4) cron_job="0 0 * * * /sbin/reboot" ;;
                5) echo -e "${YELLOW}Membatalkan semua auto-reboot...${NC}"; (crontab -l | grep -v "/sbin/reboot") | crontab -; echo -e "${GREEN}Auto-reboot telah dibatalkan.${NC}"; read -p "Tekan Enter untuk melanjutkan..."; break ;;
                6) break ;; *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1; continue ;;
            esac
            if [ -n "$cron_job" ]; then echo -e "${YELLOW}Menambahkan cron job: $cron_job${NC}"; (crontab -l 2>/dev/null; echo "$cron_job") | crontab -; echo -e "${GREEN}Auto-reboot telah diatur.${NC}"; read -p "Tekan Enter untuk melanjutkan..."; break; fi
        done
    }
    
    # --- Loop Utama Program ---
    while true; do
        show_header; show_menu
        printf "${YELLOW}Masukkan pilihan Anda [1-6]: ${NC}"; read choice
        case $choice in
            1) show_user_menu ;;
            2) show_network_menu ;;
            3) show_resource_menu ;;
            4) show_system_menu ;;
            5) show_enforcer_menu ;;
            6) echo -e "${GREEN}Keluar dari Monitor Panel. Sampai jumpa!${NC}"; exit 0 ;;
            *) echo -e "${RED}Pilihan tidak valid, silakan coba lagi.${NC}"; sleep 2 ;;
        esac
    done
  • UDP RENEW Script Fix

    udp_script_renew_fix
    Ini adalah script perbaikan udp yang mengalami error saat renew user
    #!/bin/bash
    #Version : ⇢ 2.5-Lite
    udp_dir='/etc/UDPCustom'
    source $udp_dir/module
    
    # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    # Local Module
    #source ./module/module
    # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    
    request_public_ip=$(grep -m 1 -oE '^[0-9]{1,3}(\.[0-9]{1,3}){3}$' <<<"$(wget -T 10 -t 1 -4qO- "http://ip1.dynupdate.no-ip.com/" | curl -s 4.ipw.cn)")
    
    #======= multi-login limiter =====
    
    limiter() {
      ltr() {
        clear
        msg -bar
    
        # Check if limiter is already running and remove from scheduled tasks if so
        for i in $(atq | awk '{print $1}'); do
          if [[ ! $(at -c $i | grep '/etc/limiter.sh') = "" ]]; then
            atrm $i
            sed -i '/etc/limiter.sh/d' /var/spool/cron/crontabs/root
            print_center -verd "Limiter stopped"
            enter
            return
          fi
        done
    
       # Prompt user to configure limiter
        print_center -ama "CONFIGURE LIMITER"
        msg -bar
        print_center -ama "Block users when they exceed the maximum number of connections"
        msg -bar
    
        # Set interval for running limiter
        unset option
        while [[ -z $option ]]; do
          msg -nama "Run limiter every (in minutes): "
          read option
    
          if [[ ! $option =~ ^[0-9]+$ ]]; then
            del 1
            print_center -verm2 "Only numbers are allowed"
            sleep 2
            del 1
            unset option && continue
          elif [[ $option -le 0 ]]; then
            del 1
            print_center -verm2 "Minimum time is 1 minute"
            sleep 2
            del 1
            unset option && continue
          fi
    
          del 1
          echo -e "$(msg -nama "Run limiter every: ") $(msg -verd "$option minutes")"
          echo "$option" >${udp_dir}/limit
        done
    
       msg -bar
    
        # Set interval for automatically unblocking users blocked by the limiter
        print_center -ama "Users blocked by the limiter will be unlocked automatically (enter 0 for manual unlock)"
        msg -bar
    
        unset option
        while [[ -z $option ]]; do
          msg -nama "Unblock users every (in minutes): "
          read option
    
          if [[ ! $option =~ ^[0-9]+$ ]]; then
            tput cuu1 && tput dl1
            print_center -verm2 "Only numbers are allowed"
            sleep 2
            tput cuu1 && tput dl1
            unset option && continue
          fi
    
          tput cuu1 && tput dl1
          [[ $option -le 0 ]] && echo -e "$(msg -nama "Unblock: ") $(msg -verd "manual")" || echo -e "$(msg -nama "Unblock users every: ") $(msg -verd "$option minutes")"
          echo "$option" >${udp_dir}/unlimit
        done
    
        # Start limiter with new settings
        nohup ${udp_dir}/limiter.sh &>/dev/null &
        msg -bar
        print_center -verd "Limiter started"
        enter
      }
    
      l_exp() {
        clear
        msg -bar
        l_cron=$(cat /var/spool/cron/crontabs/root | grep -w 'limiter.sh' | grep -w 'ssh')
        if [[ -z "$l_cron" ]]; then
          print_center -ama '0 1 * * * /etc/limiter.sh --ssh' >>/var/spool/cron/crontabs/root
          print_center -verd "${a82:-scheduled expiration limiter\nwill be executed every day at 1 am\naccording to the time schedule}"
        else
          sed -i '/limiter.sh --ssh/d' /var/spool/cron/crontabs/root
          print_center -verm2 "${a83:-expired limiter stopped}"
        fi
        enter
        return
      }
    
      log() {
        clear
        msg -bar
        print_center -ama "${a84:-LIMITER REGISTRY}"
        msg -bar
        [[ ! -e /etc/limit.log ]] && touch /etc/limit.log
        if [[ -z $(cat /etc/limit.log) ]]; then
          print_center -ama "${a85:-no account limiter record}"
          msg -bar
          sleep 2
          return
        fi
        msg -teal "$(cat /etc/limit.log)"
        msg -bar
       print_center -ama "►► ${a86:-Press enter to continue...} ◄◄"
       print_center -ama "►► ${a87:-0 to clear record} ◄◄"
        read option
        [[ $option = "0" ]] && print_center -ama "" >/etc/limit.log
      }
    
      [[ $(cat /var/spool/cron/crontabs/root | grep -w 'limiter.sh' | grep -w 'ssh') ]] && lim_e=$(msg -verd "[ON]") || lim_e=$(msg -verm2 "[OFF]")
    
      clear
      msg -bar
      print_center -ama "${a11:-ACCOUNT LIMITER}"
      msg -bar
      menu_func "${a64:-MULTI-LOGIN LIMITER}" "${a65:-EXPIRED LIMITER} $lim_e" "${a66:-LIMITER LOG}"
      back
      msg -ne " ${a67:-option}: "
      read option
      case $option in
      1) ltr ;;
      2) l_exp ;;
      3) log ;;
      0) return ;;
      esac
    }
    
    #======= CONFIGURATION OF SSH UDP ACCOUNTS =======
    
    data_user() {
      cat_users=$(cat "/etc/passwd" | grep 'home' | grep 'false' | grep -v 'syslog' | grep -v '::/' | grep -v 'hwid\|token')
      [[ -z "$(echo "${cat_users}" | head -1)" ]] && print_center -verm2 "${a96:-NO REGISTERED SSH USERS}" && return 1
      dat_us=$(printf '%-13s%-14s%-10s%-4s%-6s%s' "${a48:-User}" "${a49:-Pass}" "${a97:-Date}" "${a98:-Days}" 'Lmt' 'Stat')
      msg -azu "  $dat_us"
      msg -bar
    
      i=1
    
      while read line; do
        u=$(echo "$line" | awk -F ':' '{print $1}')
    
        fecha=$(chage -l "$u" | sed -n '4p' | awk -F ': ' '{print $2}')
    
        mes_dia=$(echo $fecha | awk -F ',' '{print $1}' | sed 's/ //g')
        ano=$(echo $fecha | awk -F ', ' '{printf $2}' | cut -c 3-)
        us=$(printf '%-12s' "$u")
    
        pass=$(echo "$line" | awk -F ':' '{print $5}' | cut -d ',' -f2)
        [[ "${#pass}" -gt '12' ]] && pass="${a99:-Discount}"
        pass="$(printf '%-12s' "$pass")"
    
        unset stat
        if [[ $(passwd --status $u | cut -d ' ' -f2) = "P" ]]; then
          stat="$(msg -verd "ULK")"
        else
          stat="$(msg -verm2 "BLK")"
        fi
    
        Limit=$(echo "$line" | awk -F ':' '{print $5}' | cut -d ',' -f1)
        [[ "${#Limit}" = "1" ]] && Limit=$(printf '%2s%-4s' "$Limit") || Limit=$(printf '%-6s' "$Limit")
    
        echo -ne "$(msg -verd "$i")$(msg -verm2 "-")$(msg -azu "${us}") $(msg -azu "${pass}")"
        if [[ $(echo $fecha | awk '{print $2}') = "" ]]; then
          exp="$(printf '%8s%-2s' '[X]')"
          exp+="$(printf '%-6s' '[X]')"
          echo " $(msg -verm2 "$fecha")$(msg -verd "$exp")$(echo -e "$stat")"
        else
          if [[ $(date +%s) -gt $(date '+%s' -d "${fecha}") ]]; then
            exp="$(printf '%-5s' "Exp")"
            echo " $(msg -verm2 "$mes_dia/$ano")  $(msg -verm2 "$exp")$(msg -ama "$Limit")$(echo -e "$stat")"
          else
            EXPTIME="$(($(($(date '+%s' -d "${fecha}") - $(date +%s))) / 86400))"
            [[ "${#EXPTIME}" = "1" ]] && exp="$(printf '%2s%-3s' "$EXPTIME")" || exp="$(printf '%-5s' "$EXPTIME")"
            echo " $(msg -verm2 "$mes_dia/$ano")  $(msg -verd "$exp")$(msg -ama "$Limit")$(echo -e "$stat")"
          fi
        fi
        let i++
      done <<<"$cat_users"
    }
    
    # ======== user Details ====
    
    detail_user() {
      clear
      active_users=('' $(show_users))
      if [[ -z ${active_users[@]} ]]; then
        msg -bar
        print_center -verm2 "${a62:-No registered user}"
        msg -bar
        sleep 3
        return
      else
        msg -bar
        print_center -ama "${a63:-DETAILS OF USERS}"
        msg -bar
      fi
      data_user
      msg -bar
      enter
    }
    
    #======== user block ======
    
    block_user() {
      clear
      active_users=('' $(show_users))
      msg -bar
      print_center -ama "${a9:-BLOCK/UNBLOCK USERS}"
      msg -bar
      data_user
      back
    
      print_center -ama "${a52:-Type a Username from the list}"
      msg -bar
      unset selection
      while [[ ${selection} = "" ]]; do
        msg -nazu "${a53:-Please type a username}: " && read selection
        del 1
      done
    
      [[ ${selection} = "0" ]] && return
      if [[ ! $(print_center -ama "${selection}" | egrep '[^0-9]') ]]; then
        user_del="${active_users[$selection]}"
      else
        user_del="$selection"
      fi
      [[ -z $user_del ]] && {
        msg -verm "${a54:-Error, Invalid User}"
        msg -bar
        return 1
      }
      [[ ! $(echo ${active_users[@]} | grep -w "$user_del") ]] && {
        msg -verm "${a54:-Error, Invalid User}"
        msg -bar
        return 1
      }
    
      msg -nama "   ${a48:-Username}: $user_del >>>> "
    
      if [[ $(passwd --status $user_del | cut -d ' ' -f2) = "P" ]]; then
        pkill -u $user_del &>/dev/null
        droplim=$(droppids | grep -w "$user_del" | awk '{print $2}')
        kill -9 $droplim &>/dev/null
        usermod -L $user_del &>/dev/null
        sleep 2
        msg -verm2 "${a60:-Blocked}"
      else
        usermod -U $user_del
        sleep 2
        msg -verd "${a61:-Unblocked}"
      fi
      msg -bar
      sleep 3
    }
    
    #======== user remover =========
    
    renew_user_fun() {
      #nama dias - perbaikan format tanggal
      datexp=$(date "+%Y-%m-%d" -d " + $2 days")
      
      # Cek apakah chage tersedia
      if command -v chage &>/dev/null; then
        if chage -E "$datexp" "$1" &>/dev/null; then
          print_center -ama "${a100:-Renewed User Successfully}"
        else
          print_center -verm "${a101:-Error, Renewal failed!}"
          # Tampilkan pesan error detail
          print_center -verm "Error: $(chage -l "$1" 2>&1 | head -1)"
        fi
      else
        # Alternatif jika chage tidak tersedia
        if usermod -e "$datexp" "$1" &>/dev/null; then
          print_center -ama "${a100:-Renewed User Successfully}"
        else
          print_center -verm "${a101:-Error, Renewal failed!}"
          print_center -verm "Error: User modification failed"
        fi
      fi
    }
    
    renew_user() {
      clear
      # Dapatkan daftar user yang benar
      active_users=()
      while IFS= read -r user; do
        if [[ -n "$user" ]]; then
          active_users+=("$user")
        fi
      done < <(cat /etc/passwd | grep 'home' | grep 'false' | grep -v 'syslog' | grep -v 'hwid' | grep -v 'token' | grep -v '::/' | awk -F ':' '{print $1}')
      
      msg -bar
      print_center -ama "${a8:-RENEW USERS}"
      msg -bar
      data_user
      back
    
      print_center -ama "${a52:-Type a Username from the list}"
      msg -bar
      unset selection
      while [[ -z ${selection} ]]; do
        msg -nazu "${a53:-Select an Option}: " && read selection
        del 1
      done
    
      [[ ${selection} = "0" ]] && return
      
      # Validasi user yang lebih baik
      useredit=""
      # Cek apakah selection adalah nomor
      if [[ "$selection" =~ ^[0-9]+$ ]]; then
        # Pastikan nomor tidak melebihi jumlah user
        if [[ $selection -gt 0 && $selection -le ${#active_users[@]} ]]; then
          useredit="${active_users[$selection-1]}"  # kurangi 1 karena array dimulai dari 0
        fi
      else
        # Cek apakah selection adalah username
        for user in "${active_users[@]}"; do
          if [[ "$user" == "$selection" ]]; then
            useredit="$user"
            break
          fi
        done
      fi
    
      # Cek apakah user ditemukan
      if [[ -z "$useredit" ]]; then
        msg -verm "${a54:-Error, Invalid User}"
        msg -bar
        sleep 3
        return 1
      fi
    
      # Cek apakah user ada di sistem
      if ! id "$useredit" &>/dev/null; then
        msg -verm "${a54:-Error, User does not exist}"
        msg -bar
        sleep 3
        return 1
      fi
    
      while true; do
        msg -ne "${a58:-New Duration}: $useredit"
        read -p ": " userdays
        if [[ -z "$userdays" ]]; then
          print_center -ama -e '\n\n\n'
          err_fun 7 && continue
        elif [[ "$userdays" != +([0-9]) ]]; then
          print_center -ama -e '\n\n\n'
          err_fun 8 && continue
        elif [[ "$userdays" -gt "360" ]]; then
          print_center -ama -e '\n\n\n'
          err_fun 9 && continue
        fi
        break
      done
      msg -bar
      renew_user_fun "${useredit}" "${userdays}"
      msg -bar
      sleep 3
    }
    
    #======== remove client =========
    
    droppids() {
      port_dropbear=$(ps aux | grep 'dropbear' | awk NR==1 | awk '{print $17;}')
      log=/var/log/auth.log
      loginsukses='Password auth succeeded'
      pids=$(ps ax | grep 'dropbear' | grep " $port_dropbear" | awk -F " " '{print $1}')
      for pid in $pids; do
        pidlogs=$(grep $pid $log | grep "$loginsukses" | awk -F" " '{print $3}')
        i=0
        for pidend in $pidlogs; do
          let i=i+1
        done
        if [ $pidend ]; then
          login=$(grep $pid $log | grep "$pidend" | grep "$loginsukses")
          PID=$pid
          user=$(print_center -ama $login | awk -F" " '{print $10}' | sed -r "s/'/ /g")
          waktu=$(print_center -ama $login | awk -F" " '{print $2"-"$1,$3}')
          while [ ${#waktu} -lt 13 ]; do
            waktu=$waktu" "
          done
          while [ ${#user} -lt 16 ]; do
            user=$user" "
          done
          while [ ${#PID} -lt 8 ]; do
            PID=$PID" "
          done
          print_center -ama "$user $PID $waktu"
        fi
      done
    }
    
    rm_user() {
      pkill -u $1
      droplim=$(droppids | grep -w "$1" | awk '{print $2}')
      kill -9 $droplim &>/dev/null
      userdel --force "$1" &>/dev/null
      msj=$?
    }
    
    show_users() {
      for u in $(cat /etc/passwd | grep 'home' | grep 'false' | grep -v 'syslog' | grep -v 'hwid' | grep -v 'token' | grep -v '::/' | awk -F ':' '{print $1}'); do
        print_center -ama "$u"
      done
    }
    
    remove_user() {
      clear
      active_users=('' $(show_users))
      msg -bar
      print_center -ama "${a7:-REMOVE USERS}"
      msg -bar
      data_user
      back
    
      print_center -ama "${a52:-Type or Select a User}"
      msg -bar
      unset selection
      while [[ -z ${selection} ]]; do
        msg -nazu "${a53:-Please type a username}: " && read selection
        tput cuu1 && tput dl1
      done
      [[ ${selection} = "0" ]] && return
      if [[ ! $(print_center -ama "${selection}" | egrep '[^0-9]') ]]; then
        user_del="${active_users[$selection]}"
      else
        user_del="$selection"
      fi
      [[ -z $user_del ]] && {
        msg -verm "${a54:-Error, Invalid User}"
        msg -bar
        return 1
      }
      [[ ! $(echo ${active_users[@]} | grep -w "$user_del") ]] && {
        msg -verm "${a54:-Error, Invalid User}"
        msg -bar
        return 1
      }
    
      print_center -ama "${a55:-Selected User}: $user_del"
      rm_user "$user_del"
      if [[ $msj = 0 ]]; then
        print_center -verd "[${a56:-Removed}]"
      else
        print_center -verm "[${a57:-Not Removed}]"
      fi
      enter
    }
    
    #========create client =============
    
    add_user() {
      Fecha=$(date +%d-%m-%y-%R)
      [[ $(cat /etc/passwd | grep $1: | grep -vi [a-z]$1 | grep -v [0-9]$1 >/dev/null) ]] && return 1
      valid=$(date '+%Y-%m-%d' -d " +$3 days")
      osl_v=$(openssl version | awk '{print $2}')
      osl_v=${osl_v:0:5}
      if [[ $osl_v = '1.1.1' ]]; then
        pass=$(openssl passwd -6 $2)
      else
        pass=$(openssl passwd -1 $2)
      fi
      useradd -M -s /bin/false -e ${valid} -K PASS_MAX_DAYS=$3 -p ${pass} -c $4,$2 $1 &>/dev/null
      msj=$?
    }
    
    new_user() {
      clear
      active_users=('' $(show_users))
      msg -bar
      print_center -ama "${a6:-CREATE USER ACCOUNT}"
      msg -bar
      data_user
      back
    
      while true; do
        msg -ne " ${a41:-Username}: "
        read nameuser
        nameuser="$(echo $nameuser | sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚñÑçǪº/aAaAaAaAeEeEiIoOoOoOuUnNcCao/')"
        nameuser="$(echo $nameuser | sed -e 's/[^a-z0-9 -]//ig')"
        if [[ -z $nameuser ]]; then
          err_fun 1 && continue
        elif [[ "${nameuser}" = "0" ]]; then
          return
        elif [[ "${#nameuser}" -lt "4" ]]; then
          err_fun 2 && continue
        elif [[ "${#nameuser}" -gt "12" ]]; then
          err_fun 3 && continue
        elif [[ "$(echo ${active_users[@]} | grep -w "$nameuser")" ]]; then
          err_fun 14 && continue
        fi
        break
      done
    
      while true; do
        msg -ne " ${a42:-Password}"
        read -p ": " userpass
        userpass="$(echo $userpass | sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚñÑçǪº/aAaAaAaAeEeEiIoOoOoOuUnNcCao/')"
        if [[ -z $userpass ]]; then
          err_fun 4 && continue
        elif [[ "${#userpass}" -lt "4" ]]; then
          err_fun 5 && continue
        elif [[ "${#userpass}" -gt "12" ]]; then
          err_fun 6 && continue
        fi
        break
      done
    
      while true; do
        msg -ne " ${a43:-Number of Days}"
        read -p ": " userdays
        if [[ -z "$userdays" ]]; then
          err_fun 7 && continue
        elif [[ "$userdays" != +([0-9]) ]]; then
          err_fun 8 && continue
        elif [[ "$userdays" -gt "360" ]]; then
          err_fun 9 && continue
        fi
        break
      done
      
      while true; do
        msg -ne " ${a44:-Connection Limit}"
        read -p ": " limiteuser
        if [[ -z "$limiteuser" ]]; then
          err_fun 11 && continue
        elif [[ "$limiteuser" != +([0-9]) ]]; then
          err_fun 12 && continue
        elif [[ "$limiteuser" -gt "999" ]]; then
          err_fun 13 && continue
        fi
        break
      done
    
      add_user "${nameuser}" "${userpass}" "${userdays}" "${limiteuser}"
      clear
      msg -bar
      if [[ $msj = 0 ]]; then
        print_center -verd "${a45:-User Created Successfully}"
      else
        print_center -verm2 "${a46:-Error, user not created}"
        enter
        return 1
      fi
      msg -bar
      msg -ne " ${a47:-Server IP}: " && msg -ama "    $request_public_ip"
      msg -ne " ${a47:-Port Range}: " && msg -ama "    1-65535"
      msg -ne " ${a48:-Username}: " && msg -ama "         $nameuser"
      msg -ne " ${a49:-Password}: " && msg -ama "         $userpass"
      msg -ne " ${a50:-Number of Days}: " && msg -ama "   $userdays"
      msg -ne " ${a44:-Connection Limit}: " && msg -ama " $limiteuser"
      msg -ne " ${a51:-Expiration Date}: " && msg -ama "$(date "+%F" -d " + $userdays days")"
      enter
    }
    
    #======= CONFIGURATION OF UDP-CUSTOM & UDP-REQUEST ========
    
    make_service() {
      ip_nat=$(ip -4 addr | grep inet | grep -vE '127(\.[0-9]{1,3}){3}' | cut -d '/' -f 1 | grep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}' | head -1)
      interfas=$(ip -4 addr | grep inet | grep -vE '127(\.[0-9]{1,3}){3}' | grep "$ip_nat" | awk {'print $NF'})
      ip_publica=$(grep -m 1 -oE '^[0-9]{1,3}(\.[0-9]{1,3}){3}$' <<<"$(wget -T 10 -t 1 -4qO- "http://ip1.dynupdate.no-ip.com/" || curl -s 4.ipw.cn)")
    
      cat </etc/systemd/system/udp-request.service
    [Unit]
    Description=UDP Request Service
    After=network.target
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/root
    ExecStart=/usr/bin/udp-request -ip=$ip_publica -net=$interfas$Port -mode=system
    Restart=always
    RestartSec=3s
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
      systemctl enable udp-request &>/dev/null
      systemctl start udp-request &>/dev/null
      if [[ $(systemctl is-active udp-request) = 'active' ]]; then
        # msg -verd 'OK'
        systemctl enable udp-request &>/dev/null
      else
        msg -verm2 'fail'
      fi
      if [[ $(systemctl is-active udp-request) = 'active' ]]; then
        # msg -verd 'OK'
        systemctl enable udp-request &>/dev/null
      else
        msg -verm2 'fail'
      fi
    
    }
    
    uninstall_udp_manager() {
      title "${a32:-Uninstall UDP-Manager & Binaries}"
      read -rp " $(msg -ama "${a33:-Do you wish to continue? [Y/n]}:") " -e -i Y UNINS
      [[ $UNINS != @(Y|y|S|s) ]] && return
      systemctl stop udp-custom &>/dev/null
      systemctl disable udp-custom &>/dev/null
      # systemctl stop udp-request &>/dev/null
      # systemctl disable udp-request &>/dev/null
      # systemctl stop autostart &>/dev/null
      # systemctl disable autostart &>/dev/null
      rm -rf /etc/systemd/system/udp-custom.service
      # rm -rf /etc/systemd/system/udp-request.service
      # rm -rf /etc/systemd/system/autostart.service
      rm -rf /usr/bin/udp-custom
      rm -rf /root/udp/udp-custom
      # rm -rf /root/udp/udp-request
      # rm -rf /usr/bin/udp-request
      rm -rf /root/udp/config.json
      rm -rf /etc/UDPCustom/udp-custom
      # rm -rf /usr/bin/udp-request
      # rm -rf /etc/UDPCustom/autostart.service
      # rm -rf /etc/UDPCustom/autostart
      # rm -rf /etc/autostart.service
      # rm -rf /etc/autostart
      rm -rf /usr/bin/udpgw
      rm -rf /etc/systemd/system/udpgw.service
      systemctl stop udpgw &>/dev/null
      del 1
      print_center -ama "${a34:-Uninstallation completed!}"
      rm -rf /usr/bin/udp
      enter
      exit
    }
    
    reset_udp_request() {
      if [[ $(systemctl is-active udp-request) = 'active' ]]; then
        systemctl stop udp-request &>/dev/null
        systemctl disable udp-request &>/dev/null
        print_center -ama "${a35:-UDP-Request reset done!}"
      else
        systemctl start udp-request &>/dev/null
        if [[ $(systemctl is-active udp-request) = 'active' ]]; then
          systemctl enable udp-request &>/dev/null
          print_center -verd "${a36:-UDP-Request started!}"
        else
          print_center -verm2 "${a37:-failed to start udp-request.service!}"
        fi
      fi
      enter
    }
    
    reset_udp_custom() {
      if [[ $(systemctl is-active udp-custom) = 'active' ]]; then
        systemctl stop udp-custom &>/dev/null
        systemctl disable udp-custom &>/dev/null
        print_center -ama "${a35:-UDP-Custom reset done!}"
      else
        systemctl start udp-custom &>/dev/null
        if [[ $(systemctl is-active udp-custom) = 'active' ]]; then
          systemctl enable udp-custom &>/dev/null
          print_center -verd "${a36:-UDP-Custom started!}"
        else
          print_center -verm2 "${a37:-failed to start udp-custom.service!}"
        fi
      fi
      enter
    }
    
    add_exclude() {
      title "${a20:-Exclude UDP ports}"
      print_center -ama "${a21:-UDP-Request covers full range of ports,}"
      print_center -ama "${a22:-However, you can exclude UDP ports.}"
      msg -bar3
      print_center -ama "${a23:-Examples of ports you can exclude:}:"
      print_center -ama "dnstt (slowdns) udp 53 5300"
      print_center -ama "wireguard udp 51820"
      print_center -ama "openvpn udp 1194"
      msg -bar
      print_center -verd "${a24:-enter the ports separated by spaces}"
      print_center -verd "${a25:-Example}: 53 5300 51820 1194"
      in_opcion_down "${a26:-type ports or hit enter to skip}"
      del 4
      tmport=($opcion)
      
      # Perbaikan: gunakan for loop yang kompatibel dengan semua shell
      i=0
      for port in "${tmport[@]}"; do
        num=$(($port))
        if [[ $num -gt 0 ]]; then
          echo "$(msg -ama " ${a27:-port to exclude} >") $(msg -azu "$num") $(msg -verd "OK")"
          Port+=" $num"
        else
          msg -verm2 " ${a28:-not a port} > $port?"
          continue
        fi
        i=$((i+1))
      done
      
      if [[ $Port = "" ]]; then
        unset Port
        print_center -ama "${a29:-no ports excluded}"
      else
        exclude=$(cat /etc/systemd/system/udp-request.service | grep 'exclude')
        if systemctl is-active udp-request &>/dev/null; then
          systemctl stop udp-request &>/dev/null
          systemctl disable udp-request &>/dev/null
          iniciar=1
        fi
        if [[ -z $exclude ]]; then
          Port=" -exclude=$(echo "$Port" | sed "s/ /,/g" | sed 's/,//')"
          sed -i "s/ -mode/$Port -mode/" /etc/systemd/system/udp-request.service
        else
          exclude_port=$(echo $exclude | awk '{print $4}' | cut -d '=' -f2)
          Port="-exclude=$exclude_port$(echo "$Port" | sed "s/ /,/g")"
          sed -i "s/-exclude=$exclude_port/$Port/" /etc/systemd/system/udp-request.service
        fi
        if [[ $iniciar = 1 ]]; then
          systemctl start udp-request &>/dev/null
          systemctl enable udp-request &>/dev/null
        fi
      fi
      enter
    }
    
    quit_exclude() {
      title "${a88:-REMOVE EXCLUSION PORT}"
      exclude=$(cat /etc/systemd/system/udp-request.service | grep 'exclude' | awk '{print $4}')
      ports=($port)
      for ((i = 0; i < ${#ports[@]}; i++)); do
        a=$(($i + 1))
        echo "             $(msg -verd "[$a]") $(msg -verm2 '>') $(msg -azu "${ports[$i]}")"
      done
      if [[ ! ${#ports[@]} = 1 ]]; then
        let a++
        msg -bar
        echo "             $(msg -verd "[0]") $(msg -verm2 ">") $(msg -bra "\033[1;41m${a89:-GO BACK}")  $(msg -verd "[$a]") $(msg -verm2 ">") $(msg -bra "\033[1;41m${a90:-REMOVE ALL}")"
        msg -bar
      else
        msg -bar
        echo "             $(msg -verd "[0]") $(msg -verm2 ">") $(msg -bra "\033[1;41m${a89:-GO BACK}")"
        msg -bar
      fi
      option=$(selection_fun $a)
      [[ $option = 0 ]] && return
      if systemctl is-active udp-request &>/dev/null; then
        systemctl stop udp-request &>/dev/null
        systemctl disable udp-request &>/dev/null
        iniciar=1
      fi
      if [[ $option = $a ]]; then
        sed -i "s/$exclude /" /etc/systemd/system/udp-request.service
        print_center -ama "${a91:-Removed all excluded ports}"
      else
        let option--
        unset Port
        for ((i = 0; i < ${#ports[@]}; i++)); do
          [[ $i = $option ]] && continue
          echo "$(msg -ama " ${a27:-Port to exclude} >") $(msg -azu "${ports[$i]}") $(msg -verd "OK")"
          Port+=" ${ports[$i]}"
        done
        Port=$(echo $Port | sed 's/ /,/g')
        sed -i "s/$exclude/-exclude=$Port/" /etc/systemd/system/udp-request.service
      fi
      if [[ $iniciar = 1 ]]; then
        systemctl start udp-request &>/dev/null
        systemctl enable udp-request &>/dev/null
      fi
      enter
    }
    
    # [Tweak UDP Speed]
    tweak_udp_speed() {
      # WARNING!!!
      clear
      echo ""
      msg -bar
      echo "$(msg -verm2 "${a3:-  A RISK TO YOUR SYSTEM}")"
      echo "$(msg -verm2 "${a8:-  ⇢ ... this may or may-not work,}")"
      echo "$(msg -verm2 "${a8:-    depending on your OS Image!}")"
      sleep 2
      echo "$(msg -verm2 "${a8:-  ⇢ patching...}")"
      sleep 2
      # Turn off TCP Timestamps to improve UDP throughput
      echo 0 >/proc/sys/net/ipv4/tcp_timestamps
    
      # Increase the maximum amount of memory available for network buffers
      echo 4194304 >/proc/sys/net/core/wmem_max
      echo 4194304 >/proc/sys/net/core/rmem_max
    
      # Increase the default network buffer sizes
      echo 16384 87380 16777216 >/proc/sys/net/ipv4/tcp_wmem
      echo 16384 87380 16777216 >/proc/sys/net/ipv4/tcp_rmem
      # Increase the maximum size of the receive buffer queue
      echo 4096 >/proc/sys/net/ipv4/tcp_max_syn_backlog
    
      # Increase the maximum number of open files per process
      ulimit -n 65535
    
      # Reboot networking interface
      sudo systemctl restart NetworkManager &>/dev/null
    
      sleep 2
      echo "${a6:-  ⇢ You may see network speed improvement on this Server.}"
      echo "${a6:-  ⇢ Done!}"
      msg -bar0
      sleep 3
    }
    
    vps_info() {
      # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
      #information
      # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
      if [[ "$(grep -c "Ubuntu" /etc/issue.net)" = "1" ]]; then
        system=$(cut -d' ' -f1 /etc/issue.net)
        system+=$(echo ' ')
        system+=$(cut -d' ' -f2 /etc/issue.net | awk -F "." '{print $1}')
      else
        system=$(cut -d' ' -f1 /etc/issue.net)
      fi
      _system=$(printf '%-14s' "$system")
      os_arch=$(uname -i)
      ip=$(wget -qO- ipinfo.io/ip)
      region=$(wget -qO- ipinfo.io/region)
      isp=$(wget -qO- ipinfo.io/org)
      timezone=$(wget -qO- ipinfo.io/timezone)
      ossys=$(neofetch | grep "OS" | cut -d: -f2 | sed 's/ //g')
      host=$(neofetch | grep "Host" | cut -d: -f2 | sed 's/ //g')
      kernel=$(neofetch | grep "Kernel" | cut -d: -f2 | sed 's/ //g')
      uptime=$(neofetch | grep "Uptime" | cut -d: -f2 | sed 's/ //g')
      cpu=$(top -bn1 | awk '/Cpu/ { cpu = "" 100 - $8 "%" }; END { print cpu }')
      _core=$(printf '%-1s' "$(grep -c cpu[0-9] /proc/stat)")
      memory=$(neofetch | grep "Memory" | cut -d: -f2 | sed 's/ //g')
      ram=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')
    
      clear
      title_sub "\033[3;40m${a10:-•UDP Custom Manager} •"
      print_center -ama ' Version: 2.5-Lite'
      print_center -ama ' VPS Info'
      msg -bar
      echo " "
      echo -e "$CLAY  ⇢ Operating System :$NC $system $NC"
      echo -e "$CLAY  ⇢ Arch :$NC $os_arch $NC"
      echo -e "$CLAY  ⇢ IP Address :$NC $ip $NC"
      echo -e "$CLAY  ⇢ Region :$NC $region $NC"
      echo -e "$CLAY  ⇢ ISP :$NC $isp $NC"
      echo -e "$CLAY  ⇢ Date :$NC $(date +%A) $(date +%m-%d-%Y)"
      echo -e "$CLAY  ⇢ Up Time :$NC $uptime $NC"
      echo -e "$CLAY  ⇢ CPU Load :$NC $cpu $NC"
      echo -e "$CLAY  ⇢ CPU Cores :$NC $_core $NC"
      echo -e "$CLAY  ⇢ Memory Usage :$NC $memory $NC"
      echo -e "$CLAY  ⇢ Ram Usage :$NC $ram $NC"
      msg -bar0
      enter
    }
    
    # [UDP - Request]
    menu_udp_request() {
      make_service
      title "\033[3;40m${a10:-•UDP Custom | UDP Request Manager} •"
      print_center -ama ' Version: ⇢ 2.5-Lite'
      print_center -ama ' UDP REQUEST'
      print_center -ama ' Tunnel App : SocksIP'
      msg -bar
      if [[ $(systemctl is-active udp-request) = 'active' ]]; then
        port=$(cat /etc/systemd/system/udp-request.service | grep 'exclude')
        if [[ ! $port = "" ]]; then
          port=$(echo $port | awk '{print $4}' | cut -d '=' -f2 | sed 's/,/ /g')
          print_center -ama "${a2:-EXCLUDED PORTS} $port"
          msg -bar0
          msg -bar
        fi
      fi
      ram=$(printf '%-8s' "$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')")
      cpu=$(printf '%-1s' "$(top -bn1 | awk '/Cpu/ { cpu = "" 100 - $8 "%" }; END { print cpu }')")
      # print_center -ama " $(msg -verd 'IP:') $(msg -azu "$request_public_ip")  $(msg -verd 'Ram:') $(msg -azu "$ram") $(msg -verd 'CPU:') $(msg -azu "$cpu")"
      echo " $(msg -verd ' ⇢  IP:') $(msg -azu "$request_public_ip")  $(msg -verd 'Ram:') $(msg -azu "$ram") $(msg -verd 'CPU:') $(msg -azu "$cpu")"
      msg -bar
    
      if [[ $(systemctl is-active udp-request) == 'active' ]]; then
        state=$(echo -e "\e[1m\e[32m[ON]")
      else
        systemctl start udp-request &>/dev/null
        if [[ $(systemctl is-active udp-request) == 'active' ]]; then
          state=$(echo -e "\e[1m\e[32m[ON]")
        else
          state=$(echo -e "\e[1m\e[31m[OFF]")
        fi
      fi
    
      echo -e " $(msg -verd "[1]") $(msg -verm2 '>') $(msg -azu "${a2:-Activate/Deactivate UDP-Request}") $state"
      msg -bar0
      msg -bar3
      print_center -ama "${a12:-QUICK MENU}"
      msg -bar3
      echo " $(msg -verd "[2]") $(msg -verm2 '>') $(msg -verd "${a6:-Create User}")"
      echo " $(msg -verd "[3]") $(msg -verm2 '>') $(msg -verm2 "${a7:-Remove User}")"
      echo " $(msg -verd "[4]") $(msg -verm2 '>') $(msg -ama "${a8:-Renew User}")"
      echo " $(msg -verd "[5]") $(msg -verm2 '>') $(msg -blu "${a9:-Block/Unlock User}")"
      echo " $(msg -verd "[6]") $(msg -verm2 '>') $(msg -verm3 "${a10:-User Details}")"
      echo " $(msg -verd "[7]") $(msg -verm2 '>') $(msg -teal "${a11:-Limit Accounts}")"
      msg -bar3
      print_center -ama "${a12:-Port Exclusion List}"
      msg -bar3
      echo " $(msg -verd "[8]") $(msg -verm2 '>') $(msg -verd "${a13:-Add Port To The Exclusion List}")"
      num=8
      if [[ ! $port = "" ]]; then
        echo " $(msg -verd "[9]") $(msg -verm2 '>') $(msg -verm2 "${a14:-Port Exclusion List}")"
        num=9
      fi
      back
      option=$(selection_fun $num)
    
      case $option in
      1) reset_udp_request ;;
      2) new_user ;;
      3) remove_user ;;
      4) renew_user ;;
      5) block_user ;;
      6) detail_user ;;
      7) limiter ;;
      8) add_exclude ;;
      9) quit_exclude ;;
      0) menu_main ;;
      esac
    }
    
    # [UDP - Custom]
    menu_udp_custom() {
      # title "\033[3;40m${a10:-•UDP Custom | UDP Request Manager} •"
      title_sub "\033[3;40m${a10:-•UDP Custom Manager} •"
      print_center -ama ' Version: 2.5-Lite'
      print_center -ama ' UDP CUSTOM'
      print_center -ama ' Tunnel App : HTTP Custom'
      msg -bar
    
      ram=$(printf '%-8s' "$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')")
      cpu=$(printf '%-1s' "$(top -bn1 | awk '/Cpu/ { cpu = "" 100 - $8 "%" }; END { print cpu }')")
      echo " $(msg -verd ' ⇢  IP:') $(msg -azu "$request_public_ip")  $(msg -verd 'Ram:') $(msg -azu "$ram") $(msg -verd 'CPU:') $(msg -azu "$cpu")"
      msg -bar
    
      if [[ $(systemctl is-active udp-custom) = 'active' ]]; then
        state="\e[1m\e[32m[ON]"
      else
        state="\e[1m\e[31m[OFF]"
      fi
      echo -e " $(msg -verd "[1]") $(msg -verm2 '>') $(msg -azu "${a2:-Activate/Deactivate UDP-Custom}") $state"
      msg -bar0
      msg -bar3
      print_center -ama "${a12:-QUICK MENU}"
      msg -bar3
      echo " $(msg -verd "[2]") $(msg -verm2 '>') $(msg -verd "${a6:-Create User}")"
      echo " $(msg -verd "[3]") $(msg -verm2 '>') $(msg -verm2 "${a7:-Remove User}")"
      echo " $(msg -verd "[4]") $(msg -verm2 '>') $(msg -ama "${a8:-Renew User}")"
      echo " $(msg -verd "[5]") $(msg -verm2 '>') $(msg -blu "${a9:-Block/Unlock User}")"
      echo " $(msg -verd "[6]") $(msg -verm2 '>') $(msg -verm3 "${a10:-User Details}")"
      echo " $(msg -verd "[7]") $(msg -verm2 '>') $(msg -teal "${a11:-Limit Accounts}")"
      msg -bar3
      back
      # option=$(selection_fun $num)
      read -p " ⇢  Enter your selection: " option
    
      case $option in
      1) reset_udp_custom ;;
      2) new_user ;;
      3) remove_user ;;
      4) renew_user ;;
      5) block_user ;;
      6) detail_user ;;
      7) limiter ;;
      0) menu_main ;;
      esac
    }
    
    # --- FUNGSI MENU_MAIN DENGAN WARNA BARU ---
    # [MAIN MENU]A
    menu_main() {
      # Definisi Warna Baru
      NC='\e[0m' # No Color
      WHITE='\e[1;37m'
      CYAN='\e[1;36m'
      LIGHT_CYAN='\e[1;96m'
      GREEN='\e[1;32m'
      LIGHT_GREEN='\e[1;92m'
      YELLOW='\e[1;33m'
      LIGHT_BLUE='\e[1;94m'
      GRAY='\e[0;37m'
      PURPLE='\e[1;35m'
    
      clear
      # Header Baru
      echo -e "${CYAN}┌──────────────────────────────────────────────────────────────────────────────┐${NC}"
      echo -e "${CYAN}│${NC}                      ${LIGHT_CYAN}• UDP Custom Manager •${NC}                       ${CYAN}│${NC}"
      echo -e "${CYAN}│${NC}                         ${WHITE}Version: 2.5-Lite${NC}                          ${CYAN}│${NC}"
      echo -e "${CYAN}│${NC}                     ${GRAY}Tunnel App : HAXOR Custom${NC}                        ${CYAN}│${NC}"
      echo -e "${CYAN}└──────────────────────────────────────────────────────────────────────────────┘${NC}"
      echo ""
    
      # System Info Baru
      ram=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')
      cpu=$(top -bn1 | awk '/Cpu/ { cpu = "" 100 - $8 "%" }; END { print cpu }')
      echo -e " ${LIGHT_BLUE} ⇢  IP:${NC} ${GREEN}$request_public_ip${NC}  ${LIGHT_BLUE}Ram:${NC} ${YELLOW}$ram${NC} ${LIGHT_BLUE}CPU:${NC} ${YELLOW}$cpu${NC}"
      echo -e "${GRAY}────────────────────────────────────────────────────────────────────────${NC}"
      echo ""
    
      # Menu Options Baru
      echo -e "${LIGHT_CYAN}             ${PURPLE}CHOOSE UDP CORE${NC}"
      echo -e "${GRAY}────────────────────────────────────────────────────────────────────────${NC}"
      echo -e " ${LIGHT_GREEN}[1]${NC} ${WHITE}UDP Custom${NC}"
      echo ""
      echo -e "${LIGHT_GREEN}[3]${NC} ${WHITE}Tweak UDP Speed${NC} ${YELLOW}[!Caution!]${NC}"
      echo -e "${LIGHT_GREEN}[4]${NC} ${WHITE}VPS Info${NC}"
      echo ""
      echo -e "${LIGHT_GREEN}[10]${NC} ${WHITE}Uninstall UDP Manager${NC}"
      echo -e "${LIGHT_GREEN}[11]${NC} ${WHITE}Monitoring User UDP (Panel)${NC}"
      echo -e "${GRAY}────────────────────────────────────────────────────────────────────────${NC}"
      echo -e "       ${LIGHT_GREEN}[0]${NC} ${WHITE}Exit${NC}"
      echo ""
    
      # Prompt Baru
      echo -n -e " ${LIGHT_BLUE} ⇢  Enter your selection:${NC} "
      read option
    
      # handle option selection
      case $option in
      1)
        menu_udp_custom
        ;;
      3)
        tweak_udp_speed
        ;;
      4)
        vps_info
        ;;
      10)
        uninstall_udp_manager
        ;;
      11)
        clear
        monitorpanel
        ;;
      0)
        exit
        ;;
      esac
    }
    
    while [[ $? -eq 0 ]]; do
      menu_main
    done
    Cara Menggunakan:
    1.Buka nano dan simpan skrip ini ke file:
    nano /usr/bin/udp
    2.Simpan file (Ctrl+O, Enter) dan keluar (Ctrl+X)
    3.Beri izin eksekusi:
    chmod +x /usr/bin/udp
    4.Jalankan Panel.
    udp
  • Cara Non Aktifkan IPV6 Pada Server Atau VPS

    Ini adalah metode yang paling umum,aman,dan mudah untuk dikembalikan (revert). Perubahan akan bertahan setelah reboot.
    Langkah 1: Cek Status IPv6 Saat Ini Apakah Sedang Aktif
    ip a | grep inet6
    Langkah 2: Edit File Konfigurasi sysctl.conf
    sudo nano /etc/sysctl.conf
    Langkah 3: Tambahkan Baris Konfigurasi
    Gulir ke bagian paling bawah file, lalu tambahkan baris-baris berikut:
    # Menonaktifkan IPv6 untuk semua interface
    net.ipv6.conf.all.disable_ipv6 = 1
    # Menonaktifkan IPv6 untuk interface baru yang akan ditambahkan
    net.ipv6.conf.default.disable_ipv6 = 1
    # Menonaktifkan IPv6 untuk interface loopback (lo)
    net.ipv6.conf.lo.disable_ipv6 = 1
    Langkah 4: Simpan dan Tutup File
    Langkah 5: Terapkan Perubahan Tanpa Reboot
    sudo sysctl -p
    Langkah 6: Verifikasi bahwa IPv6 Telah Dinonaktifkan
    Jika berhasil, perintah ini tidak akan menampilkan output apa pun.
    ip a | grep inet6
    Anda juga bisa memeriksanya langsung dari file sistem kernel:
    cat /proc/sys/net/ipv6/conf/all/disable_ipv6
    Outputnya harus angka 1, yang berarti IPv6 telah dinonaktifkan.
    Cara Mengembalikan (Mengaktifkan Kembali) IPv6
    1.Buka kembali file sysctl.conf: sudo nano /etc/sysctl.conf
    sudo nano /etc/sysctl.conf
    2.Hapus tanda # di depan baris yang Anda tambahkan, atau ubah angka 1 menjadi 0, atau berikan tanda komentar # di setiap barisnya.
    #net.ipv6.conf.all.disable_ipv6 = 1
    #net.ipv6.conf.default.disable_ipv6 = 1
    #net.ipv6.conf.lo.disable_ipv6 = 1
    3.Simpan file (Ctrl+X, Y, Enter).
    4.Terapkan perubahan: sudo sysctl -p
    sudo sysctl -p
  • My Profile In Youtube

    ADDRESS

    Jalan Raya Badau Km.11 Rt.06/02 Tanjung Pandan Belitung 33451

    EMAIL

    purwana.cecep@gmail.com
    uraxarixteamxxx@gmail.com

    Telephone

    +628197887769