Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: soyloqbuskas en 30 Marzo 2012, 15:46 pm



Título: CheckSum TCP en C
Publicado por: soyloqbuskas en 30 Marzo 2012, 15:46 pm
¡Buenas!

¿Podriais decirme porque no me crea bien el checksum?
Código
  1. /* Tama~o del paquete TCP */
  2. unsigned int buffer_size = sizeof(struct iphdr) + sizeof(struct tcphdr);
  3.  
  4. /* Buffer de tama~o suficiente para un paquete TCP */
  5. unsigned char buffer[buffer_size];
  6. memset (buffer,0,buffer_size);
  7.  
  8. /* Cabecera IP */
  9. struct iphdr *ip = (struct iphdr *)buffer;
  10.  
  11. /* Cabecera TCP */
  12. struct tcphdr *tcp = (struct tcphdr *)(buffer + sizeof(struct iphdr));
  13. /*
  14.    Aqui relleno la cabecera TCP y la de IP
  15. */
  16. unsigned short CheckSum(unsigned short *buffer, int size)
  17. {
  18.    unsigned long cksum=0;
  19.    while(size >1)
  20.    {
  21.        cksum+=*buffer++;
  22.        size -=sizeof(unsigned short);
  23.    }
  24.    if(size)
  25.        cksum += *(unsigned char*)buffer;
  26.  
  27.    cksum = (cksum >> 16) + (cksum & 0xffff);
  28.    cksum += (cksum >>16);
  29.    return (unsigned short)(~cksum);
  30. }
  31.  
  32. tcp->check=CheckSum((unsigned short int*)buffer,buffer_size);
  33.  
  34.  

Gracias, un saludo.