#!/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