je le code suivantdonnées plus en paquet de charge utile
int ParseData (unsigned char * paquet, int len) { struct ethhdr * ethernet_header; struct iphdr * ip_header; struct tcphdr * tcp_header; unsigned char * data; int data_len;
/* Check if any data is there */
if(len > (sizeof(struct ethhdr) + sizeof(struct iphdr) + sizeof(struct tcphdr)))
{
ip_header = (struct iphdr*)(packet + sizeof(struct ethhdr));
data = (packet + sizeof(struct ethhdr) + ip_header->ihl*4 + sizeof(struct tcphdr));
data_len = ntohs(ip_header->tot_len) - ip_header->ihl*4 - sizeof(struct tcphdr);
if(data_len)
{
printf("Data Len : %d\n", data_len);
PrintData("Data : ", data, data_len);
printf("\n\n");
return 1;
}
else
{
printf("No Data in packet\n");
return 0;
}
}
}
Je suis en train d'imprimer en ASCII la charge utile et avec une fonction simple comme celui-ci
PrintData (char * mesg, unsigned char * p, int len) { printf (mesg);
while(len--)
{
if(isprint(*p))
printf("%c", *p);
else
printf(".");
p++;
}
}
Le code semble bon, compilez aucun problème/avertissement. Le problème est que le premier caractère de charge utile n'est pas en cours d'impression à la position 0, mais à 12 octets plus tard.
Je pensais que tous les "lens" octets sont les données exactes que j'ai à imprimer.
Mon point de données à data = (paquet + taille de (structure ethhdr) + ip_header-> ihl * 4 + sizeof (struct tcphdr)); Cependant, les données [0] ne sont pas imprimables. Quel est le problème? Est-ce que je manque quelque chose? Dois-je vérifier la partie des options TCP peut-être?
Merci
En d'autres termes au lieu de sizeof (struct tcphdr) Je dois mettre le tcp_header-> doff * 4 – cateof
Oui, exactement à droite. –