Acessando pacotes de camada de link de dados
-
22-09-2019 - |
Pergunta
Quero criar um soquete para acessar pacotes IPv4 na camada de link de dados. De Unix Network Programming V1,
socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))
1) Estou implementando um cliente DHCP, é a maneira correta de fazer isso? (significa sem acessar a camada de link de dados, não posso receber a resposta do servidor DHCP) ou existe outra maneira mais fácil?Além disso, como este soquete receberá todos os pacotes IPv4 destinados ao meu sistema, como devo distinguir o pacote de resposta DHCP de outros pacotes?
2) Por favor me sugira um bom link/tuorial para Programação de rede com acesso à camada de link de dados. No livro acima, não é uma descrição detalhada.
Isto é meu código
Solução
Você também precisa dos cabeçalhos da camada de link? Se sim, você precisa usar SOCK_RAW
—SOCK_DGRAM
Removerá o cabeçalho da camada de link antes de alimentá -lo ao seu aplicativo.
Você pode identificar solicitações DHCP pelas portas de origem e destino, pois o DHCP gera tráfego nas portas UDP 67 e 68.
Outras dicas
Você tentou olhar para as bibliotecas do PCAP? Ele fornece boas funções de filtragem em IP, porta e outras coisas.