为什么 wget 会挂掉?

为什么 wget 会挂掉?

从我的一台服务器向单个特定 URL 发送 wget 总是超时。此框中的所有其他 URL 工作正常。此 URL 在我拥有的任何其他框中都可以正常工作。以下是输出:

wget -T 10 http://www.fcc-fac.ca
--2011-07-14 14:44:29--  http://www.fcc-fac.ca/
Resolving www.fcc-fac.ca... 65.87.238.35, 207.195.108.140
Connecting to www.fcc-fac.ca|65.87.238.35|:80... failed: Connection timed out.
Connecting to www.fcc-fac.ca|207.195.108.140|:80... failed: Connection timed out

你能告诉我哪里出了问题吗?我该如何排除故障?我正在使用 Ubuntu 11.04 (GNU/Linux 2.6.38-8-server x86_64)

提前非常感谢您,并原谅我的菜鸟无知:)

ping、telnet、nc www.fcc-fac.ca 80 - 全部挂起。但是,其他一些 URL 很容易通过 wget 获取,尽管只有一些其主机均可 ping 通。

traceroute 没有告诉我太多信息:

7  rx0nr-access-communications.wp.bigpipeinc.com (66.244.208.10)  148.834 ms  149.018 ms  148.940 ms
8  sw-1-research.accesscomm.ca (24.72.3.9)  158.901 ms  159.805 ms  160.162 ms
9  65.87.238.126 (65.87.238.126)  150.069 ms  148.861 ms  148.846 ms
10  * * *
...
30  * * *

非常感谢您的回答!

答案1

我认为问题在于 wget 不能很好地处理 IPv6 地址,而 DNS 服务器正在为该站点发送 IPv6。如果我误解了您的问题,请见谅。检查这些测试:

hmontoliu@ulises:~$ wget -T10 http://www.fcc-fac.ca
--2011-07-14 16:44:34--  http://www.fcc-fac.ca/
Resolving www.fcc-fac.ca... failed: Connection timed out.
wget: unable to resolve host address `www.fcc-fac.ca'

如果我强制使用 IPv6,因为我认为您的问题与 IPv6 有关,则会失败:

hmontoliu@ulises:~$ wget -6 http://www.fcc-fac.ca
--2011-07-14 16:40:44--  http://www.fcc-fac.ca/
Resolving www.fcc-fac.ca... failed: No address associated with hostname.
wget: unable to resolve host address `www.fcc-fac.ca'

但是,如果我强制使用 IPv4,它会直接下载索引页

hmontoliu@ulises:~$ wget -4 http://www.fcc-fac.ca
--2011-07-14 16:40:56--  http://www.fcc-fac.ca/
Resolving www.fcc-fac.ca... 65.87.238.35, 207.195.108.140
Connecting to www.fcc-fac.ca|65.87.238.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6554 (6,4K) [text/html]
Saving to: `index.html'

答案2

运行nc www.fcc-fac.ca 80,输入GET /并按两次 Enter。

远程视线可能已关闭或者阻挡了您。

答案3

看来 wget 无法通过端口 80 连接到您的 IP。

检查你的服务器是否可 ping 通:

ping 65.87.238.35
ping 207.195.108.140

如果可以 ping 通 IP,请检查是否可以使用 telnet 连接到端口 80:

远程登录 65.87.238.35 80

如果服务器没有响应 ping,则可能是服务器已关闭或无法访问您的源网络。

使用 traceroute 工具进行测试,查看连接失败的位置。

答案4

修复使用 CURL 库的 PHP 脚本中 DNS 解析缓慢的问题。

来自 libcurl 文档:

CURLOPT_IPRESOLVE

允许应用程序选择在解析主机名时使用哪种 IP 地址。这仅在使用解析使用多个 IP 版本的地址的主机名时才有意义。允许的值为:

CURL_IPRESOLVE_WHATEVER

默认情况下,将地址解析为系统允许的所有 IP 版本。

CURL_IPRESOLVE_V4

解析为 IPv4 地址。

CURL_IPRESOLVE_V6

解析为 IPv6 地址。

我相信这些可以设置为环境变量。至少在使用 PHP 时,这些设置对解析器速度有很大影响。

相关内容