Created
August 12, 2025 06:13
-
-
Save ibrkhalil/90ddd52dca939b6d06be660209cfbdc5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # Enhanced Multi-tool: Tor Proxy, Network Operations, VPN Management, System Utils | |
| # Colors | |
| RED='\033[0;31m' | |
| GREEN='\033[0;32m' | |
| CYAN='\033[0;36m' | |
| YELLOW='\033[0;33m' | |
| MAGENTA='\033[0;35m' | |
| NC='\033[0m' | |
| # Global Variables | |
| VPN_INTERFACE="tun0" | |
| DEFAULT_IFACE=$(ip route | grep '^default' | awk '{print $5}' | head -n1) | |
| # Function: Clear bash history | |
| clear_history() { | |
| echo -e "${CYAN}[+] Clearing bash history...${NC}" | |
| cat /dev/null > ~/.bash_history | |
| history -c | |
| echo -e "${GREEN}[+] Logs and bash history cleared${NC}" | |
| } | |
| # Function: Route all traffic through Tor | |
| tor_proxy() { | |
| TOR_PORT=9042 | |
| echo -e "${CYAN}[+] Enabling Auto-Proxy via Tor...${NC}" | |
| # Check if Tor is running | |
| if ! systemctl is-active --quiet tor; then | |
| echo -e "${YELLOW}[!] Tor service not running. Starting...${NC}" | |
| sudo systemctl start tor | |
| sleep 3 | |
| fi | |
| sudo iptables -t nat -F | |
| TOR_UID=$(id -u debian-tor 2>/dev/null || echo "43") | |
| sudo iptables -t nat -A OUTPUT -m owner --uid-owner $TOR_UID -j RETURN | |
| sudo iptables -t nat -A OUTPUT -o lo -j RETURN | |
| sudo iptables -t nat -A OUTPUT -d 127.0.0.1/32 -j RETURN | |
| sudo iptables -t nat -A OUTPUT -d 10.0.0.0/8 -j RETURN | |
| sudo iptables -t nat -A OUTPUT -d 172.16.0.0/12 -j RETURN | |
| sudo iptables -t nat -A OUTPUT -d 192.168.0.0/16 -j RETURN | |
| sudo iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports $TOR_PORT | |
| sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |
| sudo iptables -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT | |
| sudo iptables -A OUTPUT -d 127.0.0.1/32 -j ACCEPT | |
| sudo iptables -A OUTPUT -j REJECT | |
| echo -e "${GREEN}[+] Auto-Proxy active. All traffic routed through Tor.${NC}" | |
| echo -e "${YELLOW}[!] To disable: sudo iptables -F && sudo iptables -t nat -F${NC}" | |
| } | |
| # Function: Disconnect network for X seconds | |
| net_disconnect() { | |
| local IFACE=${2:-$DEFAULT_IFACE} | |
| local TIME=${1:-60} | |
| if [[ -z "$IFACE" ]]; then | |
| echo -e "${RED}[!] No network interface found${NC}" | |
| return 1 | |
| fi | |
| echo -e "${CYAN}[+] Disconnecting $IFACE for $TIME seconds...${NC}" | |
| sudo ip link set $IFACE down | |
| # Countdown display | |
| for ((i=$TIME; i>0; i--)); do | |
| echo -ne "\r${YELLOW}Reconnecting in $i seconds...${NC}" | |
| sleep 1 | |
| done | |
| sudo ip link set $IFACE up | |
| echo -e "\n${GREEN}[+] Reconnected.${NC}" | |
| } | |
| # Function: Scan local network | |
| lan_scan() { | |
| local NET=$(ip route | grep -E "^[0-9]" | grep -v "default" | awk '{print $1}' | head -n1) | |
| if [[ -z "$NET" ]]; then | |
| NET="192.168.1.0/24" | |
| echo -e "${YELLOW}[!] Could not detect network. Using default: $NET${NC}" | |
| fi | |
| echo -e "${CYAN}[+] Scanning LAN ($NET)...${NC}" | |
| if command -v nmap &> /dev/null; then | |
| sudo nmap -sn $NET --open | |
| else | |
| echo -e "${YELLOW}[!] nmap not found. Using arp-scan...${NC}" | |
| sudo arp-scan --local | |
| fi | |
| } | |
| # Function: Check VPN status | |
| vpn_status() { | |
| echo -e "${CYAN}[+] Checking VPN status...${NC}" | |
| if ip addr show $VPN_INTERFACE &>/dev/null; then | |
| echo -e "${GREEN}[✓] VPN is connected${NC}" | |
| VPN_IP=$(ip addr show $VPN_INTERFACE | grep "inet " | awk '{print $2}') | |
| echo -e "${CYAN} VPN IP: $VPN_IP${NC}" | |
| else | |
| echo -e "${RED}[✗] VPN is not connected${NC}" | |
| fi | |
| # Show public IP | |
| echo -e "${CYAN}[+] Checking public IP...${NC}" | |
| PUBLIC_IP=$(curl -s ifconfig.me 2>/dev/null || echo "Unable to determine") | |
| echo -e "${CYAN} Public IP: $PUBLIC_IP${NC}" | |
| } | |
| # Function: Kill VPN connection | |
| vpn_kill() { | |
| echo -e "${CYAN}[+] Killing VPN connections...${NC}" | |
| # Kill OpenVPN processes | |
| sudo killall openvpn 2>/dev/null && echo -e "${GREEN}[+] OpenVPN killed${NC}" | |
| # Kill WireGuard | |
| sudo wg-quick down wg0 2>/dev/null && echo -e "${GREEN}[+] WireGuard killed${NC}" | |
| # Flush iptables rules that might be VPN-related | |
| sudo iptables -F OUTPUT 2>/dev/null | |
| sudo iptables -t nat -F 2>/dev/null | |
| echo -e "${GREEN}[+] VPN connections terminated${NC}" | |
| } | |
| # Function: Quick firewall (drop all except established) | |
| quick_firewall() { | |
| echo -e "${CYAN}[+] Setting up quick firewall...${NC}" | |
| # Backup current rules | |
| sudo iptables-save > /tmp/iptables.backup.$(date +%s) | |
| # Clear existing rules | |
| sudo iptables -F | |
| sudo iptables -X | |
| # Default policies | |
| sudo iptables -P INPUT DROP | |
| sudo iptables -P FORWARD DROP | |
| sudo iptables -P OUTPUT ACCEPT | |
| # Allow loopback | |
| sudo iptables -A INPUT -i lo -j ACCEPT | |
| # Allow established connections | |
| sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |
| # Allow SSH (optional - comment out if not needed) | |
| sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT | |
| echo -e "${GREEN}[+] Firewall enabled - dropping all incoming except established${NC}" | |
| echo -e "${YELLOW}[!] Backup saved to /tmp/iptables.backup.*${NC}" | |
| } | |
| # Function: Network interface manager | |
| iface_manager() { | |
| echo -e "${CYAN}[+] Network Interfaces:${NC}" | |
| ip -br addr show | |
| echo "" | |
| echo "1) Bring interface UP" | |
| echo "2) Bring interface DOWN" | |
| echo "3) Restart interface" | |
| echo "4) Show detailed info" | |
| echo "5) Back to main menu" | |
| read -p "Choose option: " opt | |
| case $opt in | |
| 1) | |
| read -p "Enter interface name: " iface | |
| sudo ip link set $iface up | |
| echo -e "${GREEN}[+] $iface brought up${NC}" | |
| ;; | |
| 2) | |
| read -p "Enter interface name: " iface | |
| sudo ip link set $iface down | |
| echo -e "${GREEN}[+] $iface brought down${NC}" | |
| ;; | |
| 3) | |
| read -p "Enter interface name: " iface | |
| sudo ip link set $iface down | |
| sleep 2 | |
| sudo ip link set $iface up | |
| echo -e "${GREEN}[+] $iface restarted${NC}" | |
| ;; | |
| 4) | |
| ip addr show | |
| ;; | |
| 5) | |
| return | |
| ;; | |
| *) | |
| echo -e "${RED}[!] Invalid option${NC}" | |
| ;; | |
| esac | |
| } | |
| # Function: DNS changer | |
| dns_changer() { | |
| echo -e "${CYAN}[+] DNS Configuration${NC}" | |
| echo "Current DNS servers:" | |
| cat /etc/resolv.conf | grep nameserver | |
| echo "" | |
| echo "1) CloudFlare (1.1.1.1)" | |
| echo "2) Google (8.8.8.8)" | |
| echo "3) Quad9 (9.9.9.9)" | |
| echo "4) Custom DNS" | |
| echo "5) Restore default" | |
| echo "6) Back" | |
| read -p "Choose option: " opt | |
| case $opt in | |
| 1) | |
| echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf | |
| echo "nameserver 1.0.0.1" | sudo tee -a /etc/resolv.conf | |
| echo -e "${GREEN}[+] DNS changed to CloudFlare${NC}" | |
| ;; | |
| 2) | |
| echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf | |
| echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf | |
| echo -e "${GREEN}[+] DNS changed to Google${NC}" | |
| ;; | |
| 3) | |
| echo "nameserver 9.9.9.9" | sudo tee /etc/resolv.conf | |
| echo "nameserver 149.112.112.112" | sudo tee -a /etc/resolv.conf | |
| echo -e "${GREEN}[+] DNS changed to Quad9${NC}" | |
| ;; | |
| 4) | |
| read -p "Enter primary DNS: " dns1 | |
| read -p "Enter secondary DNS: " dns2 | |
| echo "nameserver $dns1" | sudo tee /etc/resolv.conf | |
| echo "nameserver $dns2" | sudo tee -a /etc/resolv.conf | |
| echo -e "${GREEN}[+] DNS changed to custom servers${NC}" | |
| ;; | |
| 5) | |
| sudo dhclient -r && sudo dhclient | |
| echo -e "${GREEN}[+] DNS restored to default${NC}" | |
| ;; | |
| 6) | |
| return | |
| ;; | |
| *) | |
| echo -e "${RED}[!] Invalid option${NC}" | |
| ;; | |
| esac | |
| } | |
| # Function: Show system info | |
| system_info() { | |
| echo -e "${CYAN}=== System Information ===${NC}" | |
| echo -e "${YELLOW}Hostname:${NC} $(hostname)" | |
| echo -e "${YELLOW}Kernel:${NC} $(uname -r)" | |
| echo -e "${YELLOW}Uptime:${NC} $(uptime -p)" | |
| echo -e "${YELLOW}Memory:${NC}" | |
| free -h | grep -E "^Mem|^Swap" | |
| echo -e "${YELLOW}Disk Usage:${NC}" | |
| df -h | grep -E "^/dev/" | head -5 | |
| echo -e "${YELLOW}Network Interfaces:${NC}" | |
| ip -br addr show | |
| echo -e "${YELLOW}Default Gateway:${NC} $(ip route | grep default | awk '{print $3}')" | |
| echo -e "${YELLOW}Public IP:${NC} $(curl -s ifconfig.me 2>/dev/null || echo 'Unable to determine')" | |
| } | |
| # Main Menu | |
| show_menu() { | |
| echo -e "\n${GREEN}╔════════════════════════════════════╗${NC}" | |
| echo -e "${GREEN}║ Network Multi-Tool Menu ║${NC}" | |
| echo -e "${GREEN}╚════════════════════════════════════╝${NC}" | |
| echo -e "${CYAN}Network Operations:${NC}" | |
| echo " 1) Enable Tor Auto-Proxy" | |
| echo " 2) Disconnect network temporarily" | |
| echo " 3) Scan local network" | |
| echo " 4) Check VPN status" | |
| echo " 5) Kill VPN connections" | |
| echo -e "${CYAN}Security:${NC}" | |
| echo " 6) Quick firewall setup" | |
| echo " 7) Clear bash history" | |
| echo -e "${CYAN}Configuration:${NC}" | |
| echo " 8) Network interface manager" | |
| echo " 9) DNS changer" | |
| echo -e "${CYAN}Information:${NC}" | |
| echo " 10) System information" | |
| echo -e "${RED} 11) Exit${NC}" | |
| } | |
| # Main loop | |
| while true; do | |
| show_menu | |
| read -p "$(echo -e ${YELLOW}"Choose an option: "${NC})" choice | |
| case $choice in | |
| 1) tor_proxy ;; | |
| 2) | |
| read -p "Enter disconnect time in seconds (default 60): " t | |
| t=${t:-60} | |
| net_disconnect $t | |
| ;; | |
| 3) lan_scan ;; | |
| 4) vpn_status ;; | |
| 5) vpn_kill ;; | |
| 6) quick_firewall ;; | |
| 7) clear_history ;; | |
| 8) iface_manager ;; | |
| 9) dns_changer ;; | |
| 10) system_info ;; | |
| 11) | |
| echo -e "${GREEN}[+] Exiting...${NC}" | |
| exit 0 | |
| ;; | |
| *) | |
| echo -e "${RED}[!] Invalid choice${NC}" | |
| ;; | |
| esac | |
| echo -e "\n${YELLOW}Press Enter to continue...${NC}" | |
| read | |
| done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment