Dlaczego wisi wisi?

12

wget do jednego konkretnego adresu URL z jednego z moich serwerów ciągle otrzymuje limity czasu. Wszystkie pozostałe adresy URL z tego pola działają dobrze. Ten adres URL działa poprawnie z dowolnych innych pól, które mam. Oto wynik:

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

Czy możesz mi powiedzieć, co może być nie tak i jak mogę to rozwiązać? Używam Ubuntu 11.04 (GNU / Linux 2.6.38-8-server x86_64)

Z góry bardzo dziękuję i wybaczcie moją noobistyczną ignorancję :)

ping, telnet, nc www.fcc-fac.ca 80 - wszystkie zawieszają się. Jednak niektóre inne adresy URL są łatwe do wget'ow, chociaż tylko niektóre z ich hostów są pingowalne.

traceroute niewiele mi mówi:

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

Wielkie dzięki za odpowiedzi!

Szczepan
źródło

Odpowiedzi:

14

Myślę, że problem polega na tym, że wget nie radzi sobie dobrze z adresami IPv6, a serwer DNS wysyła IPv6 dla tej witryny. Przepraszam, jeśli źle zrozumiałem twoje pytanie. Sprawdź te testy:

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'

Jeśli wymuszę IPv6, ponieważ uważam, że twój problem jest z tym związany, nie powiedzie się:

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'

Jeśli jednak zmuszę się do korzystania z protokołu IPv4, pobierze on bezpośrednio stronę indeksu

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'
hmontoliu
źródło
Rozwiązuje to dobrze za pomocą adresu IPv4.
Jodie C
Kolejny przykład, dlaczego nie lubię IPv6: - /
PJ Brunet
1

Uruchom nc www.fcc-fac.ca 80, wpisz GET /i naciśnij dwukrotnie klawisz Enter.

Zdalny widok może być w dół lub blokować cię.

Jodie C.
źródło
Hej, dzięki za odpowiedź - zaktualizowałem oryginalne pytanie
Szczepan
Jeśli nie możesz netcat do adresu, prawdopodobnie jesteś gdzieś po drodze zablokowany.
Jodie C
1

wygląda na to, że wget nie może połączyć się z twoim ipem na porcie 80.

sprawdź, czy twój serwer jest pingowany:

ping 65.87.238.35
ping 207.195.108.140

jeśli ip jest pingowany, sprawdź, czy możesz połączyć się z portem 80 za pomocą telnet:

telnet 65.87.238.35 80

jeśli serwer nie odpowiada na ping, prawdopodobnie jest niedostępny lub nieosiągalny dla twojej sieci źródłowej.

przetestuj za pomocą narzędzia traceroute, aby sprawdzić, gdzie połączenie nie powiedzie się.

Goez
źródło
Hej, dzięki za odpowiedź - zaktualizowałem oryginalne pytanie
Szczepan
wykop na www.fcc-fac.ca mówi mi, że ma 2 rekordy DNS typu A: ;; SEKCJA ODPOWIEDZI: www.fcc-fac.ca. 120 IN A 65.87.238.35 www.fcc-fac.ca. 120 IN A 207.195.108.140, jeśli oba są nieosiągalne, host jest wyłączony i naturalnie wget nie będzie mógł pobrać żądanego pliku. jeśli są jakieś osiągalne ip, wget będzie pomijał ip, dopóki nie natrafi na ip, który może osiągnąć, i pobiera stamtąd plik. w twoim przypadku oba hosty wydają się nie działać ze względu na długi czas reakcji, który moim zdaniem (przerwa)
Goez
możesz użyć opcji -T w wget, aby przedłużyć limit czasu
Limit
Dobrze. Widzę. Oba Ips nie są składane (sprawdziłem z 2 różnych maszyn). Jednak link działa poprawnie w przeglądarce i kiedy jest wget'owany z innych maszyn niż ten, który sprawia kłopoty: /
Szczepan
Wyższy limit czasu nie pomaga
Szczepan
1

Naprawiono powolne rozpoznawanie DNS w skryptach PHP za pomocą biblioteki CURL.

Z dokumentacji libcurl:

CURLOPT_IPRESOLVE

Zezwala aplikacji na wybór adresów IP używanych podczas rozwiązywania nazw hostów. Jest to interesujące tylko w przypadku używania nazw hostów, które rozwiązują adresy przy użyciu więcej niż jednej wersji adresu IP. Dozwolone wartości to:

CURL_IPRESOLVE_WHATEVER

Domyślnie rozpoznaje adresy we wszystkich wersjach IP dozwolonych przez system.

CURL_IPRESOLVE_V4

Rozdziel na adresy IPv4.

CURL_IPRESOLVE_V6

Rozwiąż do adresów IPv6.

Uważam, że można je ustawić jako zmienne środowiskowe. Przynajmniej przy korzystaniu z PHP te ustawienia miały ogromny wpływ na szybkość resolvera.

Bryan Hunt
źródło