如何检查网络代理是否真正生效?

我正在尝试设置网络代理,以使用我的局域网的互联网连接来更新软件包。虽然代理设置在我的Firefox上有效,但软件包管理器仍无法连接到互联网。我已经在“系统 >> 首选项 >> 网络代理”中设置了代理,并在“详细信息”中输入了代理的用户名/密码。
我该如何确保代理网络被正确应用?
9个回答

首先,确保在gnome-network-properties(System -> Preferences -> Network Proxy)中更改代理设置时,点击“应用于整个系统...”。这将设置http_proxy和相关环境变量。在代理设置“应用于整个系统...”之后启动的所有程序都应该可以使用这些变量。为了确保万无一失,您可以注销并重新登录以进行双重检查。
如果您打开终端并使用命令“set | grep -i proxy”,您会看到相关的环境变量已设置。理想情况下,这应该足够了。
然而,我曾遇到过即使按照上述方式设置了代理,Synaptic或apt-get(通过命令行)仍无法通过代理连接到互联网的情况。在这种情况下,一个解决方案是在/etc/apt/apt.conf.d中添加一个文件,其中包含apt的特定代理配置(这将被apt-get、aptitude、synaptic和Ubuntu软件中心使用)。
请按照以下步骤操作:
  1. 创建 /etc/apt/apt.conf.d/40proxy 文件

    gksudo gedit /etc/apt/apt.conf.d/40proxy

  2. 将以下内容放入文件中 - 根据您的情况修改内容。

    Acquire::http::Proxy "http://proxy.site.com:8080";

如果您有用户名和密码,可以将其编码到代理URL中(例如:http://username:password@proxy.site.com:8080),或者您可以使用类似ntlmaps的工具来获得更好的控制。

更多信息请参考这里


1谢谢!首先感谢你介绍了set命令。然后正如你预测的那样,使用apt-get和update manager时还是遇到了问题...但通过创建40proxy文件解决了这个问题。唯一剩下的问题就是只有root用户能看到代理。例如,使用普通用户和root用户执行wget whatismyip.com会得到不同的结果。 - Alexar
你能详细说明一下你剩下的问题吗?例如,如果你使用“系统 -> 首选项 -> 网络代理”来设置代理,并且选择了“应用于整个系统”,那么你是不是说以root用户身份运行的命令看不到这个设置?(也就是说,使用“sudo wget whatismyip.com”命令不能返回代理的IP地址?) - koushik
另外,确保备份这个40proxy文件(比如说,在你的家目录中的某个地方),我曾经遇到过它莫名其妙消失的情况。我觉得在“网络代理”对话框中选择“直接连接到互联网”可能会导致此问题被清除。这也可能是我的系统出了问题,但不确定。 - koushik
兄弟,你救了我的命,非常感谢你。给你点大赞! - undefined

你点击了“应用到整个系统”(已突出显示)按钮吗?如果没有,代理设置将仅适用于你的Gnome会话,并且因此当root去下载软件包时,它不会使用相同的网络设置。

Proxy settings


是的,我已经完成了。 - Alexar

上面有很多好的答案可以帮助你解决问题(这也是你的问题暗示的内容)。然而,这是一个针对检查网络代理设置是否已应用的狭义问题的答案:
方法一:启动新的 shell(xterm),然后检查环境变量:
% env | grep -i proxy
http_proxy=http://172.17.0.130:8080/
ftp_proxy=ftp://172.17.0.130:8080/
all_proxy=socks://172.17.0.130:8080/
...

请注意,现有的shell不会更新环境变量。因此,如果您要执行一个查看环境变量以获取代理设置的命令,请在更改代理设置之后创建一个新的shell来启动它。
方法2: 使用gconftool查询gconf设置(存储在~/.gconf下):
% gconftool -R /system/proxy 
 old_ftp_port = 0
 old_ftp_host = 
 old_secure_port = 0
 old_secure_host = 
 autoconfig_url = 
 mode = manual
 ftp_host = 172.17.0.130
 secure_host = 172.17.0.130
 ...

% gconftool -R /system/http_proxy 
 use_authentication = false
 authentication_password = 
 authentication_user = 
 ignore_hosts = [localhost,127.0.0.0/8,*.local,...]
 use_http_proxy = true
 port = 8080
 use_same_proxy = true
 host = 172.17.0.130

正如其他人所指出的那样,请确保您的浏览器和其他应用程序设置为“使用系统代理设置”。

如果你尝试:
curl http://www.google.com

从命令行执行,如果您收到 HTML 返回,则代理正在工作。

为临时设置代理,您可以打开终端并输入以下命令: export http_proxy="http://yourproxy:yourport" 然后启动程序,例如包管理器 Synaptic。控制台可能会提供有关出现问题的有用输出。

2要仅为一个命令设置环境变量,您也可以使用以下命令: http_proxy="http://yourproxy:yourport" synaptic - hultqvist

有没有人想过去检查/添加以下设置:

/etc/environment

试一试这个:

http_proxy="http://user:password@proxyserver:port" https_proxy="http://user:password@proxyserver:port" ftp_proxy="http://user:password@proxyserver:port"


我也在使用代理,而且我必须为Synergy和更新管理器单独设置代理设置(使用Synergy:配置->首选项->网络)。那里没有使用“系统设置”的选项,即使它应该起作用,更改系统级别的代理服务器也无法让我进行更新 :-(
不过,我对能够解决这个问题的解决方案很感兴趣 :-)

点击“应用于整个系统…”并检查所有的互联网应用程序是否设置为使用系统代理。除此之外,没有其他需要注意的地方。无需修改配置文件和启动脚本。

应用于整个系统还不够!我认为可能是ISA服务器或者可能是每次查询网络时进行的synaptic重置连接导致了登录和密码验证出现问题。或者可能是ISA服务器不接受传输不符合HTTP协议的查询,但这并不是我喜欢的方式。