web-dev-qa-db-ja.com

なぜwgetがハングしているのですか?

サーバーの1つから単一の特定の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-すべてがハングします。ただし、ping可能なホストはsomeのみですが、簡単に取得できる他のURLもあります。

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  * * *

回答ありがとうございます!

12
Szczepan

問題は、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を強制すると、失敗します:

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'
14
hmontoliu

nc www.fcc-fac.ca 80を実行し、GET /と入力してEnterキーを2回押します。

リモートサイトがダウンしているか、あなたをブロックしている可能性があります。

1
Jodie C

wgetがポート80でIPに接続できないようです。

サーバーがping可能かどうかを確認します。

ping 65.87.238.35
ping 207.195.108.140

iPがping可能な場合は、uがtelnetを使用してポート80に接続できるかどうかを確認します。

telnet 65.87.238.35 80

サーバーがpingに応答しない場合は、おそらくダウンしているか、ソースネットに到達できません。

tracerouteツールを使用してテストし、接続が失敗した場所を確認します。

1
Goez

CURLライブラリを使用するPHPスクリプトのDNS解決が遅い問題を修正しました。

Libcurlドキュメントから:

CURLOPT_IPRESOLVE

ホスト名の解決時に使用するIPアドレスの種類をアプリケーションが選択できるようにします。これは、複数のバージョンのIPを使用してアドレスを解決するホスト名を使用する場合にのみ興味深いものです。許可される値は次のとおりです。

CURL_IPRESOLVE_WHATEVER

デフォルトでは、システムが許可するすべてのIPバージョンにアドレスを解決します。

CURL_IPRESOLVE_V4

IPv4アドレスに解決します。

CURL_IPRESOLVE_V6

IPv6アドレスに解決します。

これらは環境変数として設定できると思います。少なくともPHPを使用している間、これらの設定はリゾルバーの速度に大きな違いをもたらしました。

1
Bryan Hunt