# [Hping] physical layer header size unknown (?) (résolu)

## angela

Bonjour,

j'ai installé Hping (2.0.0_rc3 et 2.0.0_rc3-r1), mais comme j'essaie de l'utiliser:

```
hping2 -S 10.1.1.3 -I ath0

[main] physical layer header size unknown

```

Et ça me le fait tout le temps. Je comprends pas pourquoi j'aurais besoin de spécifier la taille demandée. Il a toujours bien fonctionné, jusqu'à ce que je le réessaie aujourd'hui...

Hum, si vous avez des idées, ça serait gentil.

MerciLast edited by angela on Sun Aug 28, 2005 9:29 am; edited 1 time in total

----------

## titix

L'interface ath0 fonctionne-t-elle correctement ?

Qu'en est-il si tu le fait avec une autre interface (eth0, wlan0, ...) ?

----------

## bulki

 *titix wrote:*   

> L'interface ath0 fonctionne-t-elle correctement ?
> 
> Qu'en est-il si tu le fait avec une autre interface (eth0, wlan0, ...) ?

 

Chez moi, j'ai le même problème. 

En regardant le code, on a ça:

```
   

#define PPPHDR_SIZE   0

#define ETHHDR_SIZE   sizeof(struct ethhdr)

#define LOHDR_SIZE   sizeof(struct ethhdr)

#define UNKNOWNHDR_SIZE   0

/* get physical layer header size */

   if ( get_linkhdrsize(ifname) == -1 ) {

      printf("[main] physical layer header size unknown\n");

      exit(1);

   }

et 

int get_linkhdrsize(char *ifname)

{

   if ( strstr(ifname, "ppp") )

   {

      linkhdr_size = PPPHDR_SIZE;

      return 0;

   }

   else if ( strstr(ifname, "eth") )

   {

      linkhdr_size = ETHHDR_SIZE;

      return 0;

   }

   else if ( strstr(ifname, "lo") )

   {

      linkhdr_size = LOHDR_SIZE;

      return 0;

   }

   else

      return 1;

}

```

Je comprends par pourquoi ce message, parce que la fonction renvoie "1" et non pas "-1"...

PS: ça passe sur eth0 bien sûr...

----------

## Darkael

Pour la version 2.0.0_rc3-r1 c'est plutot ça qu'il y a dans le code:

```

int get_linkhdr_size(char *ifname)

{

        if ( strstr(ifname, "ppp") ) { /* also works for ippp (ISDN) */

                linkhdr_size = PPPHDR_SIZE_LINUX;

                return 0;

        } else if ( strstr(ifname, "eth") ) {

                linkhdr_size = ETHHDR_SIZE;

                return 0;

        } else if (strstr(ifname, "ets")) {

                linkhdr_size = 0;

                return 0;

        } else if ( strstr(ifname, "lo") ) {

        linkhdr_size = LOHDR_SIZE;

                return 0;

        } else if (strstr(ifname, "atm")) {

                linkhdr_size = 0;

                return 0;

        } else if ( strstr(ifname, "wlan") ) {

                linkhdr_size = WLANHDR_SIZE;

                return 0;

        }

        else

                return -1;

}

```

Donc c'est normal apparemebt si ça marche pas...

----------

## Enlight

+1 pour le code cité par KarnEvil

Mais partant du constat que :

 *Quote:*   

> 
> 
>  grep HDR_SIZE *.h
> 
> ars.h:#define ARS_ICMPHDR_SIZE  sizeof(struct ars_icmphdr)
> ...

 

Je propose d'ajouter un : #define ATHHDR_SIZE 14 au fichier hping2.h

et de modifier getlhs.c ainsi (enfin pour ceux qu'on des cou***es car j'me suis mis au C hier, que c'est un pauvre raisonnement par analogie et qu'il ne tient pas du tout compte de l'existence de la LEM)

 *Quote:*   

> 
> 
> int get_linkhdr_size(char *ifname)
> 
> {
> ...

 

Et là on serre les fesses et on prie très fort pour que ATHHDR_size ne soit pas la grosse exception qui devrait prendre une valeur différente  :Rolling Eyes: 

----------

## angela

C'était bien ça... 

Bravo  :Very Happy: 

----------

## Enlight

 *angela wrote:*   

> C'était bien ça... 
> 
> Bravo 

 

 :Very Happy:  cool! Je te lassie te charger du bug report?

edit (bon j'envoie le patch au mainteneur)

----------

