CheckSum TCP en C

Iniciado por soyloqbuskas, 30 Marzo 2012, 15:46 PM

0 Miembros y 1 Visitante están viendo este tema.

soyloqbuskas

¡Buenas!

¿Podriais decirme porque no me crea bien el checksum?

/* Tama~o del paquete TCP */
unsigned int buffer_size = sizeof(struct iphdr) + sizeof(struct tcphdr);

/* Buffer de tama~o suficiente para un paquete TCP */
unsigned char buffer[buffer_size];
memset (buffer,0,buffer_size);

/* Cabecera IP */
struct iphdr *ip = (struct iphdr *)buffer;

/* Cabecera TCP */
struct tcphdr *tcp = (struct tcphdr *)(buffer + sizeof(struct iphdr));
/*
   Aqui relleno la cabecera TCP y la de IP
*/
unsigned short CheckSum(unsigned short *buffer, int size)
{
   unsigned long cksum=0;
   while(size >1)
   {
       cksum+=*buffer++;
       size -=sizeof(unsigned short);
   }
   if(size)
       cksum += *(unsigned char*)buffer;

   cksum = (cksum >> 16) + (cksum & 0xffff);
   cksum += (cksum >>16);
   return (unsigned short)(~cksum);
}

tcp->check=CheckSum((unsigned short int*)buffer,buffer_size);



Gracias, un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw