es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede leer los paquetes de ARP en C.

Tengo el siguiente código simple para capturar todos los paquetes ARP enviados a mi dispositivo, pero no imprime nada.


include <stdio.h> include <stdlib.h> include <unistd.h> include <string.h> include <sys socket.h=""> include <sys types.h=""> include <arpa inet.h=""> include <net ethernet.h=""> int main(){ int sock; char recvbuf[2048]; if((sock=socket(PF_PACKET,SOCK_DGRAM,htons(ETH_P_ARP)))==-1){ perror("socket error"); return -1; } for(;;){ if(recvfrom(sock,recvbuf,sizeof(recvbuf),0,NULL,NULL)==-1){ perror("recvfrom error"); } struct ether_header *e; e=(struct ether_header *)recvbuf; printf("arp from :%s\n",e->ether_shost); } }

El resultado es como sigue:
arp from :
arp from :
arp from :
arp from :
arp from :</string.h></unistd.h></stdlib.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Podría haber múltiples razones por las cuales este código no está imprimiendo nada:

    1. No se están enviando paquetes ARP a su dispositivo: Asegúrese de que su dispositivo esté recibiendo paquetes ARP verificando el tráfico de red utilizando una herramienta de captura de paquetes como Wireshark.
    2. Los paquetes ARP recibidos no son válidos: Verifique el contenido del paquete recibido inspeccionando el búfer recvbuf utilizando un depurador. Asegúrese de que el paquete tenga la estructura esperada y que el campo ether_shost no esté vacío.

    3. La función recvfrom() está devolviendo un error: Verifique el valor de retorno de recvfrom() e imprima el mensaje de error utilizando perror() para investigar el problema. Es posible que el socket no esté inicializado correctamente o que haya un problema con la configuración de red.

    Una vez que haya identificado la causa raíz del problema, puede modificar el código según corresponda para solucionar el problema.

Comments are closed.