#!/usr/bin/env bash # launch_chromium_proxy — Lanza Chromium apuntando a un proxy HTTP/HTTPS local con perfil aislado. launch_chromium_proxy() { local proxy_url="http://127.0.0.1:8080" local profile_dir="/tmp/chromium-proxy" local start_url="" local ca_cert="" local extra_args="" local ext_dir="" # Parsear argumentos while [[ $# -gt 0 ]]; do case "$1" in --proxy) proxy_url="$2"; shift 2 ;; --profile) profile_dir="$2"; shift 2 ;; --url) start_url="$2"; shift 2 ;; --ca-cert) ca_cert="$2"; shift 2 ;; --ext) ext_dir="$2"; shift 2 ;; --extra) extra_args="$2"; shift 2 ;; *) echo "ERROR: argumento desconocido: $1" >&2 return 1 ;; esac done # Detectar binario del navegador local browser_bin="" for candidate in chromium chromium-browser google-chrome-stable google-chrome; do if command -v "$candidate" &>/dev/null; then browser_bin="$candidate" break fi done if [[ -z "$browser_bin" ]]; then echo "ERROR: no se encontro ningun binario Chromium/Chrome en el PATH." >&2 echo " Probados: chromium, chromium-browser, google-chrome-stable, google-chrome." >&2 return 1 fi # Crear directorio de perfil si no existe if [[ ! -d "$profile_dir" ]]; then mkdir -p "$profile_dir" || { echo "ERROR: no se pudo crear el directorio de perfil: $profile_dir" >&2 return 1 } fi # Construir argumentos del navegador local args=( "--user-data-dir=${profile_dir}" "--no-first-run" "--no-default-browser-check" ) # Proxy fijo opcional. Con "--proxy none" (o vacio) no se fija proxy en el # cmdline: util cuando una extension de proxy gestiona la conexion (toggle). if [[ -n "$proxy_url" && "$proxy_url" != "none" ]]; then args+=("--proxy-server=${proxy_url}" "--proxy-bypass-list=<-loopback>") fi # Cargar una extension desempaquetada (--load-extension). Funciona en # Chromium (no en Chrome stable 138+). Para persistencia en todos los # perfiles se usa managed policy en su lugar. if [[ -n "$ext_dir" ]]; then args+=("--load-extension=${ext_dir}") fi # Manejo de certificados TLS if [[ -n "$ca_cert" ]]; then # El usuario instalo el CA en el perfil; no ignorar errores de certificado. # (El CA se instala en el sistema o en el perfil antes de lanzar.) echo "INFO: CA cert declarado: $ca_cert" >&2 echo "INFO: Asegurate de haber importado el CA en el perfil o en el sistema antes de navegar HTTPS." >&2 else # Sin CA cert: ignorar errores de certificado para que mitmproxy/Burp funcionen sin configuracion extra. # ADVERTENCIA: esto desactiva la validacion TLS completa del navegador. args+=("--ignore-certificate-errors") echo "WARN: --ignore-certificate-errors activo. Usa --ca-cert si instalaste el CA del proxy." >&2 fi # URL inicial opcional if [[ -n "$start_url" ]]; then args+=("$start_url") fi # Argumentos extra pasados por el usuario # shellcheck disable=SC2206 local extra_arr=() if [[ -n "$extra_args" ]]; then read -r -a extra_arr <<< "$extra_args" args+=("${extra_arr[@]}") fi # Log temporal para stderr/stdout del navegador local log_file="/tmp/chromium-proxy-$$.log" # Lanzar en background desacoplado de la sesion del agente setsid "$browser_bin" "${args[@]}" "$log_file" 2>&1 & local browser_pid=$! disown "$browser_pid" # Emitir JSON con informacion del proceso lanzado printf '{"pid":%d,"browser":"%s","proxy":"%s","profile":"%s","log":"%s"}\n' \ "$browser_pid" "$browser_bin" "$proxy_url" "$profile_dir" "$log_file" } # Ejecutar si se llama directamente (fn run / bash ) if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then launch_chromium_proxy "$@" fi