1 votes

ARM-linux4.3.2, ne peut pas ouvrir de socket avec le type PF_PACKET

J'utilise FriendlyARM avec linux 2.6.29 et je compile avec ARM-Linux GCC. 4.3.2

Lorsque l'on essaie d'ouvrir un socket avec PF_PACKET, l'échec est accompagné d'errno 97, Adresse non supportée par le protocole.

Voici un exemple de programme qui illustre le problème -

 #include <stdio.h>
 #include <sys/socket.h>
 #include <netpacket/packet.h>
 #include <net/ethernet.h> 
 //#include <linux/if_packet.h>
 //#include <linux/if_ether.h>
 #include <errno.h>

  int main() {
      int sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETHER_TYPE));
      if (sockfd < 0)
          perror("Can't open socket");
  }

Une idée de la raison pour laquelle cela se produit ?

Merci d'avance

Oren

éditer : Les choses que j'ai essayées -

  1. Je m'assure que je fonctionne en tant que Root

  2. Compilation sous linux 2.6.27.7-9-pae et une machine intel, sous laquelle il fonctionne bien (gcc 4.4.1)

  3. Le post ci-dessous suggère que cela a quelque chose à voir avec la version linux, mais d'après ce qui précède, je pense que cela pourrait être autre chose. texte du lien

2voto

JayM Points 2064

Avez-vous défini CONFIG_PACKET dans la configuration de votre noyau ? C'est nécessaire pour AF_PACKET.

0voto

DRL Points 2403

Si vous pouvez vous passer de la couche de liaison, vous pouvez essayer avec PF_INET :

    if((isock = socket(PF_INET, SOCK_RAW, htons(ETH_P_IP))) == -1){
        perror("socket():");
    }

Là encore, le noyau gère la couche de liaison.

Ou avec SOCK_DGRAM :

if((rsock = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))) == -1){
        perror("socket():");
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X