~kris/dots

srice

ref: c8d9c68937f2c331a6bac47481ed40147fe73cba srice/.local/bin/security/htbvpn -rwxr-xr-x 3.2 KiB
c8d9c689 — Kris Yotam shell migration: fish -> mksh, reorganize bin/, wallpaper cleanup 4 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/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