begin process at 2012 02 13 05:43:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

Checksum de packet udp incorrect HELP!!!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Checksum de packet udp incorrect HELP!!!

vendredi 11 mai 2007 à 09:55:16 | Checksum de packet udp incorrect HELP!!!

sebastienmz

Bonjours tlm
j'ai quelque petit problème je crée mon packet udp tout est bon saufe le checksum pouvez vous m'aider voici mon code:

#define PORT 521
#define buffer_size 2//5120
#define IP "192.168.2.1"



    typedef struct udphdr
{
    unsigned short srcport;
    unsigned short dstport;
    unsigned short length;
    unsigned short checksum;
} UDP_HDR;



unsigned short in_cksum(u_short * addr, int len)
{
    register int nleft = len;
    register u_short *w = addr;
    register int sum = 0;
    u_short answer = 0;

    while (nleft > 1) {
    sum += *w++;
    nleft -= 2;
    }

    if (nleft == 1) {
    *(u_char *) (&answer) = *(u_char *) w;
    sum += answer;
    }

    sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16);
    answer = ~sum;

    return (answer);
}





 


int main(int argc, char *argv[]){

  unsigned short sizeofPacket;   
  char *packet = NULL, *ptr = NULL;
  int len_sin;
  SOCKET sock;
  SOCKADDR_IN sin;
  WSADATA data;
  struct udphdr *udp;
  if( (WSAStartup(MAKEWORD(2,0), &data)) != 0)
     winsock_err(1);   

  if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP))==INVALID_SOCKET )
      winsock_err(1);       
              
  sizeofPacket = sizeof(struct udphdr);  // sizeof(struct iphdr) +
 
  udp = (struct udphdr *) malloc(sizeof(struct udphdr));
 
  memset(udp, 0x0, sizeof(struct udphdr));
 
  udp->srcport = htons(48605); //port source
  udp->dstport = htons(521); //port dest
  udp->length = htons(sizeof(struct udphdr));
  udp->checksum = 0;
  udp->checksum = in_cksum((unsigned short *) udp, sizeof(struct udphdr)); 
 
  packet = (char *) malloc(sizeofPacket);
 
  memset(packet, 0x0, sizeofPacket);
  ZeroMemory(packet, sizeofPacket);
 
  ptr = packet;
 
  memcpy(ptr, udp, sizeof(struct udphdr));
  ptr += sizeof(struct udphdr);
 
  sin.sin_addr.s_addr=inet_addr(IP);
  sin.sin_port=htons(PORT);
  sin.sin_family=AF_INET;
 
  len_sin=sizeof(sin);
 
  if (sendto(sock, packet, sizeofPacket, 0x0, (struct sockaddr *) &sin,len_sin) == SOCKET_ERROR)
      winsock_err(1);
  closesocket(sock);             
  WSACleanup();
  system("PAUSE");   
  return 0;
}


POUVEZ VOUS ->m'aider?
____
www.sebastien-metthez.com
le problème vient souvent de l'interface chaise clavier.
samedi 12 mai 2007 à 14:15:21 | Re : Checksum de packet udp incorrect HELP!!!

emmatopiak

Salut,

Bon trois choses à dire là.

1) essaye de passer sum en unsigned int
2) essaye de tester sur des paquets de longueur paire dans un premier temps, le dernier char est toujours etrange a tester
3) essaye aussi de voir dans les sources du noyau quelle est la fonction de calcul exacte

et une autre :p

4) sum = (sum >> 16) + (sum & 0xffff);
 sum += (sum >> 16);
Sur ces deux ligne la, utilise une variable intermediaire dans un premier temps pour recuperer la partie 16bits gauche et la partie 15bits droite de sum.

Une autruche ne se cuit pas aux petits lardons.


Cette discussion est classée dans : sin, short, udp, struct, udphdr


Répondre à ce message

Sujets en rapport avec ce message

UDP et Win98 [ par sena ] Bonjourvoila j'ai fait 2 prog en langage:un client et un serveur en UDP, ceux ci communiquent entre eux et sont sur la meme machine.J'avais un pb de r Erreur 10049 sur socket UDP [ par Ezekiel69 ] Salut tous le monde...Me voici depuis plusieurs jour confronté un a problème étrange.Je veux envoyer un message par l'intermédiaire d'un packet UDP su pd de threading [ par abdoulax ] Bon j'ai un pitit problème avec mon thread. En fait je suis en train faire un programme qui a besoin de traîter plusieur connection en même tps. Pour [C] socket [ par sheorogath ] bonjour ,j'essai de me faire une sorte de lib client dans un premier temps pour utiliser les socket mais avec mon code je ne peut me connecter null pa envoi d'une structure dans un socket [ par Taum ] Bonjour, voilà j'ai besoin d'envoyer une structure dans un paquet udp :typedef struct { unsigned short TransactionId; short Flags; short Questions; sh recvfrom erreur [ par valoue ] Bonjour,J'essaie de récupérer les données envoyées par un client en utilisant le protocole UDP (sous VC++).je créé ma socket speciale UDP:s = socket(A envoi de paquet ip [ par sendouda ] Bonjour;j'ai écrit un programme qui permet d'envoyer des paquets ip à une destination.mais quand j'ai voulu le sniffer j'ai pas pu le capter.J'ai beso urgent:envoi paquet [ par sendouda ] Bonjour;j'ai écrit un programme qui permet d'envoyer des paquets ip à une destination.mais quand j'ai voulu le sniffer j'ai pas pu le capter.J'ai beso Sockets - Broadcast UDP [ par Toadstool ] Je veux broadcaster un paquet UDP pour "pinger" les serveurs half-life présent sur un réseau local (cf. la source bot irc + scan de parties counter-st Liaison client/serveur (socket) [ par bthivent ] Bonjour !J'ai suivi un tutorial pour apprendre les sockets. J'ai ensuite essaiyé un exemple qu'ils proposaient, voici mon code qui permet de faire un


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,465 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales