Defina um intervalo de rede na variável de ambiente no_proxy

43

Estou em uma rede usando um proxy. Eu tenho máquinas usando muitos scripts aqui e ali, acessando uns aos outros através de HTTP.

  • A rede é 10.0.0.0/8.
  • Meu proxy é 10.1.1.1:81, então configurei de acordo:

    export http_proxy=http://10.1.1.1:81/
    
  • Desejo excluir meu próprio intervalo para ser acessado com o proxy. Eu tentei qualquer combinação disponível.

    export no_proxy='10.*'
    export no_proxy='10.*.*.*'
    export no_proxy='10.0.0.0/8'
    

Nenhum dos trabalhos acima!

Estou testando com wget e ele sempre tenta consultar o proxy, qualquer que seja o endereço IP ao qual desejo me conectar.

  • Como muitos scripts estão em todos os lugares em todos os sistemas, a opção --no-proxy não é uma opção. Eu quero definir todo o sistema.
por SamK 28.10.2011 / 10:30

4 respostas

36

Você está olhando para o caminho errado. A variável de ambiente no_proxy lista os sufixos de domínio, não os prefixos. A partir da documentação :

no_proxy: This variable should contain a comma-separated list of domain extensions proxy should not be used for.

Então, para IPs, você tem duas opções:

1) Adicione cada IP completo:

printf -v no_proxy '%s,' 10.1.{1..255}.{1..255};
export no_proxy="${no_proxy%,}";

2) Renomeie wget para wget-original e escreva um script de invólucro (chamado wget ) que pesquise o IP do host da URL, e determine se ele deve ou não usar o proxy:

#!/bin/bash
ip='';
for arg; do
   # parse arg; if it's a URL, determine the IP address
done;
if [[ "$ip" =~ ^10\.1\. ]]; then
   wget-original --no-proxy "$@";
else
   wget-original "$@";
fi;
    
por 28.10.2011 / 14:05
15

info wget diz:

 'no_proxy'
     This variable should contain a comma-separated list of domain
     extensions proxy should _not_ be used for.  For instance, if the
     value of 'no_proxy' is '.mit.edu', proxy will not be used to
     retrieve documents from MIT.

Portanto, a variável deve conter uma lista de domínios , e não intervalos de IP . Você precisará configurar aliases locais apropriados para suas máquinas locais em /etc/hosts file (s).

Além disso, lembre-se de que definir uma variável de ambiente não garante que um proxy será ou não usado. É apenas uma informação que pode ser usada por programas que a suportam.

    
por 28.10.2011 / 14:04
12

Aqui está uma abordagem um pouco mais simples (de uma linha) baseada na solução de janmoesen.

export no_proxy='echo 10.1.1.{1..255} | sed 's/ /,/g''

Infelizmente, o sed engasga com todos os argumentos passados da expansão de 10.1.{1..255}.{1..255} , seja em seu código ou no meu. Portanto, se você realmente precisa expandir para 256 * 256 endereços IP, precisará de uma abordagem diferente, mas, se precisar apenas de 256, isso funcionará perfeitamente para você.

    
por 15.08.2014 / 17:26
7

Não é exatamente uma solução correta, mas pode resolver o problema para você. Se você assumir que acessar qualquer coisa do lado de fora do proxy usará nomes de DNS e não usar endereços IP diretamente, poderá defini-lo da seguinte forma:

export no_proxy=0,1,2,3,4,5,6,7,8,9

Até onde eu sei, nenhum domínio principal termina com um número, então, se isso acontecer, deve ser um endereço IP.

    
por 15.11.2017 / 12:35