Portál AbcLinuxu, 8. května 2025 04:34
Je to tím, že některé programy respektují řádku hosts:
v /etc/nsswitch.conf
a některé ne. Pokud používají getaddrinfo()
ze standardní knihovny (což je s největší pravděpodobností případ command-line utilit), resolving funguje podle nsswitch.conf
. Pokud naopak mají nějaký svůj vlastní resolving (což je u prohlížečů docela časté), může se klidně stát, že používají výhradně DNS a /etc/hosts
vůbec neřeší. (Často uváděným pseudodůvodem bývá, že /etc/hosts
je (údajně) neportovatelná záležitost, protože jeden jediný divný nekompatibilní systém takový soubor nemá.) Dá se to vyřešit například pomocí dnsmasq
, který se dá nastavit tak, aby bral ohled na /etc/hosts
. (Přesněji řečeno, implicitně tak dokonce nastavený je, jen člověk nesmí mít jistou z[cenzurovanou] distribuci, která nastavení dnsmasq z[cenzuruje].)
Tohle je fakt divné. Není v tom browseru nějaká (vnitrofiremní nebo kdovíkterá jiná) proxy konfigurace, která by třeba přidávala custom TLD nebo nějak resolving měnila? Tady jsou nějaké staré řeči o tom, jak je to v Chromiu s getaddrinfo()
, proč ano a proč ne a tak podobně, ale nejsem z toho příliš moudrý, jestli by to pasovalo na tento případ.
Čistě pro úplnost dodám, že existuje příkaz getaddrinfo
, který volá funkci getaddrinfo()
. Ten minitool je v balíku perl-socket-getaddrinfo
či v jeho ekvivalentu pro jiné distribuce. Tím se dá zjistit, co a kdy přesně getaddrinfo()
vrací, kolik toho je atd. atp. Ale tady to asi (určitě) nepomáhá, protože jestli tomu dobře rozumím, tak getaddrinfo()
dělá správnou věc a jenom resolving v browseru nefunguje.
jeden jediný divný nekompatibilní systém takový soubor nemáKterý? Windows takový soubor mají, dokonce se jmenuje
hosts
a je v adresáři etc
(historie síťového stacku Windows je spletitá).
Často uváděným pseudodůvodem bývá, že /etc/hosts je (údajně) neportovatelná záležitost, protože jeden jediný divný nekompatibilní systém takový soubor nemá.
To nějak nedává smysl. Smyslem getaddrinfo()
(nebo gethostbyname()
) je právě to, aby se program vůbec nemusel zabývat tím, že (ne)existuje nějaký /etc/hosts
a/nebo nějaké DNS dotazy a jestli třeba daný systém místo nich nepoužívá k resolvování jmen třeba LDAP nebo SQL databázi. Takže ručně zadrátovaný DNS resolver by portabilitu naopak snižoval.
Nevím, proč browsery nepoužívají standardní getaddrinfo()
. Dívají se sice třeba do /etc/gai.conf
i do několika dalších klasických konfiguráků, ale jejich chování se od implicitního getaddrinfo()
prostě liší. A ano, naprosto souhlasím s tvrzením, že něco takového nedává smysl.
přestane mi fungovat v prohlížečích resolvingTo jste nějak ověřil a víte to, nebo je to jen domněnka? Nemůže problém způsobovat ověřování názvu na blacklistech, validace DNSSEC v pluginu nebo něco jiného?
výsledek je prostě, že nefunguje name-resolvingNa to jsem se právě ptal, jak tohle víte. Prohlížeč vám asi nevypíše chybu „prostě nefunguje name-resolving“. A i kdyby ji vypsal, je rozdíl v tom, zda ji vypíše hned, nebo až po vypršení nějakého timeoutu. Kdybyste popsal, co se doopravdy děje, bude hledání příčiny mnohem snazší. Třeba: „Zadám do adresního řádku adresu, kterou prohlížeč nemá nakešovanou, a hned se obrazí chyba 'ABC'.“ Nebo „…, prohlížeč cca 30 dnů točí kolečkem a pak se zobrazí chyba 'EFG'.“
koneckonců taková validace by stejně u "lokálních" jmen selhalaJenže je podstatný rozdíl mezi tím, když prohlížeč hned dostane odpověď „neznám“, než když bude marně čekat na odpověď, dokud to nevzdá.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.