Ich bin in einem Netzwerk, das einen Proxy verwendet. Ich habe Maschinen mit vielen Skripten hier und dort Zugriff auf einander über HTTP.
Das Netzwerk ist 10.0.0.0/8.
Mein Proxy ist 10.1.1.1:81, also habe ich ihn entsprechend eingerichtet:
export http_proxy=http://10.1.1.1:81/
Ich möchte meinen eigenen Bereich für den Zugriff über den Proxy ausschließen. Ich habe alle verfügbaren Kombinationen ausprobiert.
export no_proxy='10.*'
export no_proxy='10.*.*.*'
export no_proxy='10.0.0.0/8'
Keine der oben genannten Möglichkeiten funktioniert!
Ich teste mit wget
und es versucht immer, den Proxy abzufragen, egal mit welcher IP-Adresse ich mich verbinden möchte.
-no-proxy
eigentlich keine Option. Ich möchte sie systemweit setzen.Sie sehen das falsch. Die Umgebungsvariable "no_proxy" listet die Domain-Suffixe auf, nicht die Präfixe. Aus der Dokumentation:
no_proxy
: Diese Variable sollte eine durch Kommata getrennte Liste von Domain-Endungen enthalten, für die Proxy nicht verwendet werden soll.
Für IPs haben Sie also zwei Möglichkeiten:
printf -v no_proxy '%s,' 10.1.{1..255}.{1..255};
export no_proxy="${no_proxy%,}";
wget
in wget-original
um und schreiben Sie ein Wrapper-Skript (namens wget
), das die IP für den angegebenen URL's-Host nachschlägt und feststellt, ob es den Proxy benutzen soll oder nicht:#!/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;
info wget
sagt:
`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.
Die Variable sollte also eine Liste von Domains enthalten, nicht IP-Bereiche. Sie müssen in der/den /etc/hosts
-Datei(en) die richtigen lokalen Aliase für Ihre lokalen Rechner einrichten.
Abgesehen davon sollten Sie bedenken, dass das Setzen einer Umgebungsvariable nicht garantiert, dass ein Proxy verwendet wird oder nicht. Es handelt sich lediglich um eine Information, die von Programmen, die sie unterstützen, verwendet werden kann.
Hier ist ein etwas einfacherer (einzeiliger) Ansatz, der auf janmoesen's Lösung basiert.
export no_proxy=`echo 10.1.1.{1..255} | sed 's/ /,/g'`
der auf der Grundlage von Cory Ringdahl's Beitrag weiter verbessert wurde:
export no_proxy="`echo 10.1.1.{1..254},` 10.1.1.255"
sed verschluckt sich an allen Argumenten, die bei der Erweiterung von 10.1.{1..255}.{1..255}
übergeben werden, entweder in seinem oder meinem Code. Wenn Sie also wirklich auf 256 * 256 IP-Adressen expandieren müssen, können Sie vielleicht Cory Ringdahls Ansatz weiter anpassen, aber wenn Sie nur 256 oder so benötigen, sollte einer dieser beiden Ansätze perfekt für Sie funktionieren.
Ich vermute, dass die Version, bei der 2 Oktette erweitert werden, etwa so aussehen würde:
export no_proxy="`echo 10.1.{1..255}.{1..254},` 10.1.255.255"
aber iTerm gibt mir Fehlermeldungen, dass die Argumentlisten zu lang sind, daher kann ich nicht mit Sicherheit sagen, ob es eine Lösung gibt, damit das funktioniert...