Como o / etc / hosts corresponde ao trabalho?

4

Estou curioso sobre como as entradas / etc / hosts combinam trabalhos no Linux vs outros * plataforma nix (se houver alguma diferença).

Em particular, eu estaria interessado em entender se o "tempo de correspondência" é proporcional à quantidade de entradas ou não.

Após a primeira correspondência ser encontrada, a "correspondência" é interrompida? Ou usa todas as entradas, mesmo que uma correspondência já tenha sido encontrada?

Muito obrigado

    
por Simone D. 06.07.2013 / 15:36

3 respostas

8

No Linux, o / etc / hosts é analisado até corresponder para resolver as entradas. Isso também é como foi tratado no lançamento de 1983 do BSD 4.3, que foi o primeiro lançamento geral da moderna pilha IP do Unix.

É importante lembrar que, no momento do 4.3 BSD, toda a lista de hosts conectados à Internet era mantida em um Centro de Informações de Rede centralizado e numerada apenas cerca de 325 . Um host conectado recuperaria a lista de todos os hosts da Internet a partir da NIC, e uma pesquisa linear em algumas centenas de linhas era boa o suficiente. Foi nessa época que a IETF percebeu que não ia escalar bem, então propôs o Sistema de Nomes de Domínio . Depois disso, se você tivesse mais do que algumas centenas de linhas em / etc / hosts, estaria "fazendo errado".

Note também que / etc / hosts é processado pela libc, uma biblioteca de espaço do usuário. O kernel não tem idéia de que existe alguma coisa, exceto um sockaddr . Portanto, esta resposta aplica-se apenas ao tratamento de / etc / hosts e ignora especificamente os sistemas de resolução de nomes abrangentes, que variam amplamente em seus comportamentos de cache e complexidades de tempo.

    
por 06.07.2013 / 19:32
3

How does /etc/hosts match work?

Depende de /etc/nsswitch.conf e /etc/host.conf para decidir se deseja ler informações em /etc/hosts

Como @msw disse processado pela libc, uma biblioteca de espaço do usuário, ele lê nsswitch.conf e lê Tag " hosts: arquivos dns ", então arquivo significa leitura /etc/hosts e dns significam /etc/resolve.conf

Agora, suponha que você tenha atingido o link no firefox

  1. em seguida, o firefox primeiro resolverá o google.com com a ajuda do resolvedor local (libresolve.so) e, em seguida,
  2. primeiro, verifique a prioridade do arquivo e do dns ,
  3. no caso padrão, ele pesquisará em arquivo significa "/ etc / hosts",
  4. no caso de o google.com não corresponder, ele irá indicar "/etc/resolv.conf". Nesse arquivo, verifique a tag nameserver se ela não estiver configurada e, em seguida, resolver enviando dns Consulta para localhost na porta 53,
  5. se o servidor de nomes definir suponha nameserver 8.8.8.8 , ele enviará a consulta para, por exemplo. %código%. Claro que agora podemos obter ans da consulta do DNS público.

EDITAR 1 Além disso, os usuários podem manter seu próprio arquivo de hosts usando a variável "HOSTALIASES", portanto, ele primeiro verificará esse arquivo antes de ler / etc / hosts.

Ex.

echo "fb  www.fb.com" >> ~/my_hosts
echo "export HOSTALIASES=~/my_hosts" >> ~/.bashrc
source ~/.bashrc 
    
por 07.07.2013 / 00:11
0

As duas funções que você precisa são gethostbyname() e gethostbyaddr() , descritas no link Se você ainda tiver nslookup disponível, tente usá-lo em, por exemplo %código%. Você vê que um nome pode levar a diferentes endereços IP. A outra maneira também é normal, o mesmo endereço IP pode apontar para diferentes nomes de host. Para verificar isso, basta adicionar endereços IP e nomes de host ao seu / etc / hosts e verificá-lo com as funções mencionadas.

    
por 06.07.2013 / 22:00

Tags