IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

envoi de packet


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Par défaut envoi de packet
    bonjour,

    je souhaite envoyer un packet sur le port 53 utilisant le protocole udp.

    j'utilise pour cela les raw socket.

    le programme se lance mais aucun packet n'est envoyé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    #define __USE_BSD
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netinet/ip.h>
    #define __FAVOR_BSD  /
    #include <netinet/tcp.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <string.h>
     
    #define P 53
     
     
    struct ipheader {
     unsigned char ip_hl:4, ip_v:4; /* this means that each member is 4 bits */
     unsigned char ip_tos;
     unsigned short int ip_len;
     unsigned short int ip_id;
     unsigned short int ip_off;
     unsigned char ip_ttl;
     unsigned char ip_p;
     unsigned short int ip_sum;
     unsigned int ip_src;
     unsigned int ip_dst;
    }; /* total ip header length: 20 bytes (=160 bits) */
     
     
    struct udpheader {
     unsigned short int uh_sport;
     unsigned short int uh_dport;
     unsigned short int uh_len;
     unsigned short int uh_check;
    }; /* total udp header length: 8 bytes (=64 bits) */
     
     
    int 
    main (void)
    {
      int s = socket (PF_INET, SOCK_RAW, IPPROTO_UDP);	/* open raw socket */
      char datagram[4096];	/* this buffer will contain ip header, tcp header,
    			   and payload. we'll point an ip header structure
    			   at its beginning, and a tcp header structure after
    			   that to write the header values into it */
      struct ipheader *iph   = (struct ipheader *) datagram;
      struct udpheader *udph = (struct udpheader *) datagram + sizeof (struct ip);
      struct sockaddr_in sin;
    			/* the sockaddr_in containing the dest. address is used
    			   in sendto() to determine the datagrams path */
     
      sin.sin_family = AF_INET;
      sin.sin_port = htons (P);/* you byte-order >1byte header values to network
    			      byte order (not needed on big endian machines) */
      sin.sin_addr.s_addr = inet_addr ("127.0.0.1");
     
      memset (datagram, 0, 4096);	/* zero out the buffer */
     
    /* we'll now fill in the ip header values, see above for explanations */
      iph->ip_hl = 5;
      iph->ip_v = 4;
      iph->ip_tos = 0;
      iph->ip_len = sizeof (struct ipheader) + sizeof (struct udpheader);	/* no payload */
      iph->ip_id = htonl (54321);	/* the value doesn't matter here */
      iph->ip_off = 0;
      iph->ip_ttl = 255;
      iph->ip_p = 6;
      iph->ip_sum = 0;		/* set it to 0 before computing the actual checksum later */
      iph->ip_src = inet_addr ("1.2.3.4");/* SYN's can be blindly spoofed */
      iph->ip_dst = sin.sin_addr.s_addr;
     
    /* we'll now fill in the udp header values, see above for explanations */
      udph->uh_sport=12345;
      udph->uh_dport=htons(P);
      udph->uh_len=sizeof (struct udpheader);
      udph->uh_check=111;
     
          if (sendto (s,		/* our socket */
    		  datagram,	/* the buffer containing headers and data */
    		  iph->ip_len,	/* total length of our datagram */
    		  0,		/* routing flags, normally always 0 */
    		  (struct sockaddr *) &sin,	/* socket addr, just like in */
    		  sizeof (sin)) < 0)		/* a normal send() */
    	printf ("error\n");
     
     
     
      return 0;
    }

    avez-vous une idée ?

    merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    Pour envoyer quelque choses il faut que la connexion se soit etablie et que le serveur soit programmer pour accepter le paquet , es le cas ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Par défaut
    Citation Envoyé par MarcG
    Pour envoyer quelque choses il faut que la connexion se soit etablie et que le serveur soit programmer pour accepter le paquet , es le cas ?
    oui

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Par défaut
    j'ai utilisé netcat pour ca : nc -l -p 53 -u

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    J avais pas vu au debut :
    tu prendrai l'habitude de faire afficher le numero de l'erreur sa te permettrai de gagner beaucoup de temp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <errno.h>
    .....
    .....
    printf ("error %d\n",errno);
    ./test
    error N 9
    bash-3.1$ perror 9
    OS error code   9:  Bad file descriptor
    et la j ai rigolé
    ou ouvre tu ta socket ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Simulation d'envoi de mails par des packets
    Par Thibqult dans le forum Réseau
    Réponses: 6
    Dernier message: 22/09/2011, 16h45
  2. Packet UDP reçu environ 20 seconds apres l envoi dans petit Lan
    Par zouhair9 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 23/04/2010, 17h58
  3. Envoi de packet personnalisé sur réseau
    Par Kyom dans le forum C#
    Réponses: 2
    Dernier message: 09/09/2008, 10h42
  4. envoie de packet
    Par xankow dans le forum C#
    Réponses: 16
    Dernier message: 10/07/2008, 14h20
  5. TCP/IP - envois de packets
    Par justgreat dans le forum Scripts/Batch
    Réponses: 14
    Dernier message: 06/11/2007, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo