f74d0d8e32
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
105 lines
3.5 KiB
Bash
105 lines
3.5 KiB
Bash
#!/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=""
|
|
|
|
# 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 ;;
|
|
--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=(
|
|
"--proxy-server=${proxy_url}"
|
|
"--user-data-dir=${profile_dir}"
|
|
"--proxy-bypass-list=<-loopback>"
|
|
"--no-first-run"
|
|
"--no-default-browser-check"
|
|
)
|
|
|
|
# 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[@]}" </dev/null >"$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 <file>)
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
launch_chromium_proxy "$@"
|
|
fi
|