Skip to Content
Guia do Desenvolvedor

Exemplo de Script de Proxy

A seguir, há um exemplo de script de proxy que pode ser usado com a variável de ambiente QWEN_SANDBOX_PROXY_COMMAND. Esse script permite apenas conexões HTTPS para example.com:443 e rejeita todas as demais solicitações.

#!/usr/bin/env node /** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ // Exemplo de servidor de proxy que escuta na porta :::8877 e permite apenas conexões HTTPS para example.com. // Defina `QWEN_SANDBOX_PROXY_COMMAND=scripts/example-proxy.js` para executar o proxy junto com o sandbox. // Teste com `curl https://example.com` dentro do sandbox (no modo shell ou via ferramenta shell). import http from 'node:http'; import net from 'node:net'; import { URL } from 'node:url'; import console from 'node:console'; const PROXY_PORT = 8877; const ALLOWED_DOMAINS = ['example.com', 'googleapis.com']; const ALLOWED_PORT = '443'; const server = http.createServer((req, res) => { // Negar todas as solicitações que não sejam CONNECT para HTTPS console.log( `[PROXY] Negando solicitação não CONNECT para: ${req.method} ${req.url}`, ); res.writeHead(405, { 'Content-Type': 'text/plain' }); res.end('Método Não Permitido'); }); server.on('connect', (req, clientSocket, head) => { // req.url terá o formato "hostname:port" para uma solicitação CONNECT. const { port, hostname } = new URL(`http://${req.url}`); console.log(`[PROXY] Solicitação CONNECT interceptada para: ${hostname}:${port}`); if ( ALLOWED_DOMAINS.some( (domain) => hostname == domain || hostname.endsWith(`.${domain}`), ) && port === ALLOWED_PORT ) { console.log(`[PROXY] Permitindo conexão com ${hostname}:${port}`); // Estabelecer uma conexão TCP com o destino original. const serverSocket = net.connect(port, hostname, () => { clientSocket.write('HTTP/1.1 200 Conexão Estabelecida\r\n\r\n'); // Criar um túnel redirecionando dados entre o cliente e o servidor de destino. serverSocket.write(head); serverSocket.pipe(clientSocket); clientSocket.pipe(serverSocket); }); serverSocket.on('error', (err) => { console.error(`[PROXY] Erro ao conectar ao destino: ${err.message}`); clientSocket.end(`HTTP/1.1 502 Gateway Inválido\r\n\r\n`); }); } else { console.log(`[PROXY] Negando conexão com ${hostname}:${port}`); clientSocket.end('HTTP/1.1 403 Proibido\r\n\r\n'); } clientSocket.on('error', (err) => { // Isso pode ocorrer se o cliente encerrar a conexão abruptamente. console.error(`[PROXY] Erro no socket do cliente: ${err.message}`); }); }); server.listen(PROXY_PORT, () => { const address = server.address(); console.log(`[PROXY] Proxy escutando em ${address.address}:${address.port}`); console.log( `[PROXY] Permitindo conexões HTTPS para os domínios: ${ALLOWED_DOMAINS.join(', ')}`, ); });
Last updated on