Skip to content

Instantly share code, notes, and snippets.

@ibrkhalil
Created August 12, 2025 06:13
Show Gist options
  • Select an option

  • Save ibrkhalil/90ddd52dca939b6d06be660209cfbdc5 to your computer and use it in GitHub Desktop.

Select an option

Save ibrkhalil/90ddd52dca939b6d06be660209cfbdc5 to your computer and use it in GitHub Desktop.
#!/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