Jsem v síti pomocí proxy. Mám stroje, které tu a tam používají spoustu skriptů, které se navzájem přistupují přes HTTP.
Moje proxy je 10.1.1.1:81, takže jsem ji nastavil odpovídajícím způsobem:
export http_proxy=http://10.1.1.1:81/
Chci vyloučit svůj vlastní rozsah, který má být přístupný pomocí proxy. Vyzkoušel jsem jakoukoli dostupnou kombinaci.
export no_proxy='10.*'
export no_proxy='10.*.*.*'
export no_proxy='10.0.0.0/8'
Žádná z výše uvedených prací!
Testuji s wget
a vždy se pokusí dotazovat proxy, bez ohledu na IP adresu, ke které se chci připojit.
--no-proxy
volba ve skutečnosti není možnost. Chci jej nastavit do širokého systému.Díváš se na to špatně. The no_proxy
proměnná prostředí uvádí přípony domény, nikoli předpony. Od dokumentace :
no_proxy
: Tato proměnná by měla obsahovat seznam oddělených čárkami, pro které by proxy neměla být použita.
Pro adresy IP tedy máte dvě možnosti:
1) Přidejte každou IP v plné výši:
printf -v no_proxy '%s,' 10.1.{1..255}.{1..255};
export no_proxy="${no_proxy%,}";
2) Přejmenujte wget
na wget-original
a napište wrapper skript (nazvaný wget
), který vyhledá IP hostitele dané URL a určí, zda by měl použít proxy server:
#!/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 "[email protected]";
else
wget-original "[email protected]";
fi;
info wget
říká:
`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.
Proměnná by tedy měla obsahovat seznam domén, nikoli rozsahy IP. Budete muset nastavit správné místní aliasy pro místní stroje v /etc/hosts
soubory.
Kromě toho mějte na paměti, že nastavení proměnné prostředí ne záruka, že proxy bude nebo nebude použit. Je to jen informace, kterou může používat programy, které ji podporují.
Tady je o něco jednodušší (jednořádkový) přístup založený na janmoesenově řešení.
export no_proxy=`echo 10.1.1.{1..255} | sed 's/ /,/g'`
který byl dále vylepšen na základě vstupu Cory Ringdahlové:
export no_proxy="`echo 10.1.1.{1..254},` 10.1.1.255"
sed tlumivky na všechny argumenty předané expanzí 10.1.{1..255}.{1..255}
, buď v jeho kódu, nebo v mém. Takže pokud opravdu potřebujete rozšířit na 256 * 256 IP adres, možná budete moci dále přizpůsobit přístup Cory Ringdahla, ale pokud potřebujete pouze 256 nebo tak, některá z nich by pro vás měla fungovat dokonale.
Hádám, že verze, kde jsou rozšířeny 2 oktety, bude vypadat asi takto:
export no_proxy="`echo 10.1.{1..255}.{1..254},` 10.1.255.255"
ale iTerm mi dává chyby v tom, že seznamy argumentů jsou příliš dlouhé, takže nemůžu s jistotou říci, zda existuje řešení, jak tuto práci provést ...
Není to přesně správné řešení, ale může to vyřešit váš problém. Pokud předpokládáte, že přístup k čemukoli z vnějšku proxy bude používat DNS jména a ne přímo pomocí IP adres, můžete to nastavit takto:
export no_proxy=0,1,2,3,4,5,6,7,8,9
Pokud vím, žádná top doména nekončí číslem, takže pokud ano, musí to být IP adresa.