Qual é o mecanismo pelo qual um processo que está escutando o host local se recusa a processar uma requisição para seu endereço IP da LAN?

1

O endereço IP privado da minha máquina é 192.168.44.182. Se eu iniciei um processo usando

nc -l localhost 20000

Em seguida, este processo não processará os pedidos enviados para 192.168.44.182.

Como o processo de escutar localhost: 20000 é executado na máquina física com o IP da LAN sendo 192.168.44.182, estou tentando saber como o processo ignora as solicitações para 192.168.44.182.

É verdade que essas solicitações são ignoradas pelo processo ou tais solicitações não são entregues à interface de rede do 127.0.0.1? Trata-se de um mecanismo de camada de rede ou mecanismo de camada de link?

    
por twimo 03.12.2012 / 19:48

2 respostas

3

Quando você configura um soquete de escuta, pode escolher a qual endereço local está vinculado. Isso é feito com a chamada de sistema bind (2). (Você também pode optar por vinculá-lo a 0.0.0.0, o que significa ouvir em todos os endereços locais).

Você disse ao netcat para escutar no localhost. Por isso, chamou bind (2) com 127.0.0.1 (ou similar) como o endereço do soquete. Então, o kernel ligou o socket de escuta apenas a esse endereço.

Quando um pedido de conexão chegou ao 192.168.44.182:20000, o kernel examinou a lista de soquetes de escuta e não encontrou nenhum. Então o kernel recusou a conexão.

Quando uma requisição chegar em 127.0.0.1:20000, o kernel encontrará o soquete de escuta, e o syscall accept (2) informará ao netcat sobre ele.

Para que o netcat ouça todas as interfaces, omita o host: nc -l -p 20000 ou, como alternativa, especifique 0.0.0.0: nc -l 0.0.0.0 -p 20000 . Você também pode especificar o endereço IP específico que deseja ouvir (192.168.44.182), mas é claro que nc localhost 20000 será rejeitado.

(A ligação ao host local geralmente é feita quando você deseja permitir apenas conexões da mesma máquina, por exemplo, por motivos de segurança).

    
por 03.12.2012 / 20:12
0

Cada soquete tem 2 características associadas a ele. Endereço e porta. Soquete escutando em cada interface realmente escuta em um endereço INADDR_ANY , que é 0.0.0.0 , então desde que você diga ao socket que está escutando em 127.0.0.1 ele irá ignorar todos os pedidos para outros endereços da máquina.

    
por 03.12.2012 / 20:12

Tags