thebadskull
Messages postés20Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention29 mai 2005
-
28 mai 2005 à 13:25
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 2011
-
4 oct. 2005 à 09:13
Bonjour voilà je suis entrain de faire un sniffeur de paquets en C avec la librairie pcap
Lorsque je recupére mes paquets je les affiches avec :
--> type : <type>
et j'aimerais convertir les adresse mac en adresse IP, j'ai cherché et j'ai que l'on pouvais le faire que lors d'un ping.
et donc afficher
--> type : <type>
voilà je vous montre un bout de code ::
--Affichage :
//Structure
typedef struct {
u_char ether_dhost[6]; //destination host (adresse de destination)
u_char ether_shost[6]; //source host (adresse source)
u_short ether_type; //type de trame
}ether_header;
//Avec mon Paquet qui est :
paquet = (u_char *) pcap_next(descriptPaquet, &paquethdr);
void print_ether_header(ether_header *paquet)
{
int i;
struct ip *paquetip;
for (i=0;i<6;i++)
{
printf("%.2x",paquet->ether_shost[i]);
if (i!=5) printf(":");
}
printf(" -> ");
for (i=0;i<6;i++)
{
printf("%.2x",paquet->ether_dhost[i]);
if (i!=5) printf(":");
}
printf(" type: %.4x",paquet->ether_type);
}
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 28 mai 2005 à 15:02
Yep,
L'adresse MAC est une adresse physique unique au monde pour une matériel.
L'adresse IP est une adresse logique unique qui t'ai donnée par ton FAI.
Il n'y a donc aucune correspondance entre ces deux types d'adresse.
Il te faudrait revoir TCP/IP avant de faire un sniffer, ca te serai très utile.
Il y a de bon bouquin la dessus.
thebadskull
Messages postés20Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention29 mai 2005 29 mai 2005 à 13:49
ouai je sais ^^
mais en recuperant mon paquet je peut le mettre sous forme d'une ip...
avec cette structure d'ip :
/* IP header */
struct sniff_ip {
#if BYTE_ORDER == LITTLE_ENDIAN
u_int ip_hl:4, /* header length */
ip_v:4; /* version */
#if BYTE_ORDER == BIG_ENDIAN
u_int ip_v:4, /* version */
ip_hl:4; /* header length */
#endif
#endif /* not _IP_VHL */
u_char ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
in_addr ip_src,ip_dst; /* source and dest address */
};
là j'avance un peu mais lors de l'afficha de mon ip_src et ip_dst j'ai
un segmentation fault avec un %s et avec un %x j'ai rien qui ressemble
à une ip...
il ne faut pas la convertir pour l'afficher??
style avec inetoa ou otre je connai pas trop ces fonctions...
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 20112 4 oct. 2005 à 09:13
Salut,
Tu as surement trouvé la solution depuis le temps, mais pour convertir une adresse MAC en adresse IP, il faut utiliser le protocole ARP (Adress Resolution Protocol).
Regarde dans l'aide de la commande arp (si tu es sous unix)