Bash

在 no_proxy 環境變數中設置網路範圍

  • September 17, 2020

我在使用代理的網路中。我讓機器在這里和那裡使用大量腳本通過 HTTP 相互訪問。

  • 網路是 10.0.0.0/8。
  • 我的代理是 10.1.1.1:81,所以我進行了相應的設置:
export http_proxy=http://10.1.1.1:81/
  • 我想排除我自己的範圍以使用代理訪問。我嘗試了任何可用的組合。
export no_proxy='10.*'
export no_proxy='10.*.*.*'
export no_proxy='10.0.0.0/8'

以上都不行!

我正在測試wget它總是嘗試查詢代理,無論我想連接什麼IP地址。

  • 由於所有系統中到處都有大量腳本,因此該--no-proxy選項實際上不是一個選項。我想在系統範圍內設置它。

你以錯誤的方式看待它。no_proxy環境變數列出域後綴,而不是前綴。從文件中

no_proxy:此變數應包含一個逗號分隔的域擴展代理列表,不應使用它。

因此,對於 IP,您有兩種選擇:

1)完整添加每個IP:

printf -v no_proxy '%s,' 10.1.{1..255}.{1..255};
export no_proxy="${no_proxy%,}";
  1. 重命名wgetwget-original編寫一個包裝腳本(稱為wget),查找給定 URL 主機的 IP,並確定它是否應該使用代理:
#!/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;

引用自:https://unix.stackexchange.com/questions/23452