#!/bin/sh # htbvpn - HackTheBox VPN Manager # Finds newest .ovpn file in downloads, moves to HTB directory, and connects #============================================================================= # CONFIGURATION - Set these paths #============================================================================= DOWNLOADS_DIR="$HOME/downloads" HTB_VPN_DIR="$HOME/.config/htb" VPN_FILE="htb.ovpn" #============================================================================= # FUNCTIONS #============================================================================= usage() { echo "htbvpn - HackTheBox VPN Manager" echo "" echo "Usage: htbvpn [command]" echo "" echo "Commands:" echo " connect, c Connect to HTB VPN (default)" echo " update, u Find newest .ovpn in downloads, move to HTB dir, then connect" echo " status, s Show VPN connection status" echo " stop, k Kill VPN connection" echo " help, h Show this help" echo "" echo "Paths:" echo " Downloads: $DOWNLOADS_DIR" echo " HTB VPN Dir: $HTB_VPN_DIR" echo " VPN File: $HTB_VPN_DIR/$VPN_FILE" } find_newest_ovpn() { find "$DOWNLOADS_DIR" -maxdepth 1 -name "*.ovpn" -type f -printf '%T@ %p\n' 2>/dev/null | \ sort -rn | head -1 | cut -d' ' -f2- } update_vpn() { newest=$(find_newest_ovpn) if [ -z "$newest" ]; then echo "Error: No .ovpn files found in $DOWNLOADS_DIR" exit 1 fi echo "Found: $newest" # Create HTB dir if needed mkdir -p "$HTB_VPN_DIR" # Backup old file if exists if [ -f "$HTB_VPN_DIR/$VPN_FILE" ]; then mv "$HTB_VPN_DIR/$VPN_FILE" "$HTB_VPN_DIR/${VPN_FILE}.bak" echo "Backed up old VPN file" fi # Move and rename mv "$newest" "$HTB_VPN_DIR/$VPN_FILE" echo "Moved to: $HTB_VPN_DIR/$VPN_FILE" } connect_vpn() { if [ ! -f "$HTB_VPN_DIR/$VPN_FILE" ]; then echo "Error: VPN file not found at $HTB_VPN_DIR/$VPN_FILE" echo "Run 'htbvpn update' first to import a VPN file" exit 1 fi echo "Connecting to HackTheBox VPN..." sudo openvpn "$HTB_VPN_DIR/$VPN_FILE" } status_vpn() { if pgrep -x openvpn >/dev/null 2>&1; then echo "VPN Status: Connected" echo "Process: $(pgrep -x openvpn)" # Try to get tun interface IP ip -4 addr show tun0 2>/dev/null | grep -oP '(?<=inet\s)\d+(\.\d+){3}' && \ echo "Interface: tun0" else echo "VPN Status: Not connected" fi } stop_vpn() { if pgrep -x openvpn >/dev/null 2>&1; then echo "Stopping VPN..." sudo pkill -x openvpn echo "VPN stopped" else echo "VPN is not running" fi } #============================================================================= # MAIN #============================================================================= case "${1:-connect}" in update|u) update_vpn connect_vpn ;; connect|c) connect_vpn ;; status|s) status_vpn ;; stop|kill|k) stop_vpn ;; help|h|-h|--help) usage ;; *) echo "Unknown command: $1" usage exit 1 ;; esac