| 
          #!/bin/sh | 
        
        
           | 
          
 | 
        
        
           | 
          # Enable exit on error | 
        
        
           | 
          set -e | 
        
        
           | 
          
 | 
        
        
           | 
          # Function to generate a random number between 49152 and 65535 | 
        
        
           | 
          generate_random_port() { | 
        
        
           | 
              awk -v min=49152 -v max=65535 'BEGIN { srand(); print int(min + rand() * (max - min + 1)) }' | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          interface="wgc$1" | 
        
        
           | 
          sleep 3 | 
        
        
           | 
          # Log the start of the script | 
        
        
           | 
          logger -t WireGuardClient -p user.notice "Starting junk-udp-hack script" | 
        
        
           | 
          logger -t WireGuardClient -p user.notice "Processing WG interface - $interface" | 
        
        
           | 
          
 | 
        
        
           | 
          # Retrieve the server and port | 
        
        
           | 
          wg_endpoint=$(wg show "$interface" endpoints 2>/dev/null || echo "") | 
        
        
           | 
          if [ -z "$wg_endpoint" ]; then | 
        
        
           | 
              logger -s -t WireGuardClient -p user.err "Unable to retrieve endpoint for interface $interface" >&2 | 
        
        
           | 
              exit 1 | 
        
        
           | 
          fi | 
        
        
           | 
          
 | 
        
        
           | 
          wg_server=$(echo "$wg_endpoint" | awk '{print $2}' | cut -d':' -f1 2>/dev/null || echo "") | 
        
        
           | 
          wg_port=$(echo "$wg_endpoint" | awk '{print $2}' | cut -d':' -f2 2>/dev/null || echo "") | 
        
        
           | 
          
 | 
        
        
           | 
          if [ -z "$wg_server" ] || [ -z "$wg_port" ]; then | 
        
        
           | 
              logger -s -t WireGuardClient -p user.err "Unable to extract server or port for interface $interface" >&2 | 
        
        
           | 
              exit 1 | 
        
        
           | 
          fi | 
        
        
           | 
          
 | 
        
        
           | 
          # Generate a random message | 
        
        
           | 
          message=$(dd if=/dev/urandom bs=228 count=5 2>/dev/null | tr -dc 'A-Za-z0-9') | 
        
        
           | 
          
 | 
        
        
           | 
          # Generate a new random port and ensure it's not in use | 
        
        
           | 
          l_port=$(generate_random_port) | 
        
        
           | 
          while netstat -an | grep -qE '(^|[^0-9])'"$l_port"'([^0-9]|$)'; do | 
        
        
           | 
              logger -t WireGuardClient -p user.warn "Port $l_port is already in use. Generating new one" | 
        
        
           | 
              sleep 1 | 
        
        
           | 
              l_port=$(generate_random_port) | 
        
        
           | 
          done | 
        
        
           | 
          
 | 
        
        
           | 
          logger -t WireGuardClient -p user.notice "Setting connection to WG server $wg_server:$wg_port from client's port $l_port" | 
        
        
           | 
          
 | 
        
        
           | 
          # Send the message using socat | 
        
        
           | 
          echo "$message" | socat - UDP-SENDTO:"$wg_server:$wg_port",sourceport="$l_port" | 
        
        
           | 
          
 | 
        
        
           | 
          # Update the WireGuard interface with the new listen port | 
        
        
           | 
          wg set "$interface" listen-port "$l_port" | 
        
        
           | 
          
 | 
        
        
           | 
          logger -t WireGuardClient -p user.notice "Done" |