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

Réseau C Discussion :

socket : problème avec GetHostByName


Sujet :

Réseau C

  1. #1
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut socket : problème avec GetHostByName
    Bonjour, j'essai de programmer avec les sockets sous windows ais j'ai un problème avec la fonction GetHostByname de winsock qui me retourne un pointeur NULL à chaque fois que je lui donne mon adresse ip (la "vrai" ou 127.0.0.1)
    J'ai essayé d'autres ip que la mienne mais ca ne amrche aps. Voici un extrait du code au cas ou quelqu'un pourrait m'aider :
    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
     
     
       char ipsource[200];
       char ipdestination[200];
       struct hostent *hotesrc,*hotedest;
     
    ...
       printf("1. Configuration IP\n");
       printf("IP source : ");
       scanf("%199s", ipsource);
       printf("IP destination : ");
       scanf("%199s", ipdestination);
     
       printf("Verification des donnees IP entrees\n");
       hotesrc=gethostbyname(ipsource); /*résoud ip source*/
       hotedest=gethostbyname(ipdestination); /*résoud ip destination*/
     
       /*vérifie info saisies*/
       if(hotesrc==NULL||hotedest==NULL)
       {
           system("PAUSE");
           printf("ERREUR");
           exit(-1);
       }
    Voila, ca nbe marche pas bien que j'ai inclus winsock.h et winsock.lib dans le projet...
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288

  3. #3
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    J'ai déja vu ce post.
    Que je donne le DNS ou l'ip ca ne change rine et mon code semble correcte, non ?
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  4. #4
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    paix et félicité,

    si tu utilises gethostbyname(), tu dois donner une URL, si tu donnes une IP tu dois utiliser gethostbyaddr().
    Errare humanum est ... sed humanus naturae erratum est.

  5. #5
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Quand je donne apr exemple www.wanadoo.fr ou www.free.fr la fonction me reoturne quand même NULL...
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  6. #6
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    1. As-tu initialisé WSAStartup ?

    Sinon tu peux le faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WSADATA wsaData;
     
    if(WSAStartup(MAKEWORD(1, 1), &wsaData))
    {
       cout << "WSA n'a pas pu être initialisé." << endl;
       return 0;
    }
    2. utilise ce code pour savoir ce que retourne comme erreur la fonction gethostbyname() :
    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
    hURL = gethostbyname("127.0.0.1");
    if(!hURL)
    {
    	LPTSTR WSAErr;
    	WSAErr = (char *)malloc(256 * sizeof(char));
    	(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
    			NULL,
    			WSAGetLastError(),
    			MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    			(LPTSTR)&WSAErr,
    			0,
    			NULL);*/
     
    	cout << WSAErr << endl;
    	free(WSAErr);
    	return 0;
    }
    Errare humanum est ... sed humanus naturae erratum est.

  7. #7
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    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
     
       char ipsource[200];
       char ipdestination[200];
     
       ...
       struct hostent *hotesrc,*hotedest;
       struct paquettcp *lepaquet;
       struct sockaddr_in sock;
       int lasocket,i,nbPacket;
     
       WORD wVersionRequested;
       WSADATA WSAData; /* structure WSADATA définie dans winsock.h */
       int err;
     
       wVersionRequested = MAKEWORD(1,1); 	       /* 1.1 version voulu de Winsock */
       err = WSAStartup(wVersionRequested, &WSAData); /* appel de notre fonction */
      					               /* controle d'erreur */
       if(err == 0)	fprintf(stdout, "[*] Winsock a ete initialise avec succes.\n");
       else {
    		fprintf(stderr, "Erreur lors de l'initialisation de Winsock, code d'erreur : %d\n", GetLastError());
    		return(-1);
       }
     
       printf("TCP MAKER\n");
       lepaquet=(struct paquettcp *)calloc(1,sizeof(struct paquettcp));
       printf("1. Configuration IP\n");
       printf("IP source : ");
       scanf("%199s", ipsource);
       printf("IP destination : ");
       scanf("%199s", ipdestination);
       ....
     
       hotesrc=gethostbyname(ipsource);
       hotedest=gethostbyname(ipdestination);
       printf("%s\n", hotesrc->h_name);
       printf("%s\n", hotedest->h_name);
       printf("%s\n", hotesrc->h_addr);
       printf("%s\n", hotedest->h_addr);
       printf("%d\n", hotesrc->h_length);
       printf("%d\n", hotedest->h_length);
    Ceci est une partie de mon code source ou j'observe des choses curieuses. Par exmple, si je lui donne 2 adresses IP au hazar, voici ce qu'il me donne à l'écran :

    [*] Winsock a ete initialise avec succes.
    TCP MAKER
    1. Configuration IP
    IP source : 145.65.89.127
    IP destination : 82.64.145.78
    IP id : 12
    IP FragOff : 1
    IP ttl : 6
    Verification des donnees IP entrees
    82.64.145.78
    82.64.145.78
    R@æN82.64.145.78
    R@æN82.64.145.78
    4
    4
    Appuyez sur une touche pour continuer...
    Je ne comrpends pas pourquoi il me donne la même adresse (destination et pourquoi la copie dans h_addr à buggé ???
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    C'est normal la fonction gethostbyname prends en argument le nom de l'hôte distant et pas son IP !

    Il te faut utiliser gethostbyaddr(),

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char * IP = "127.0.0.1"
    unsigned int adr = inet_addr(IP);
     
    struct hostent * Host = gethostbyaddr(&adr,sizeof(adr),AF_INET);
    printf("Nom de 127.0.0.1 : %s\n",Host->h_name);
    Voilà

  9. #9
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    POurtant de nombreux sites disent qu'on peut lui donner l'adresse IP ou le nom d'hôte...
    Je vais essayer
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  10. #10
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    J'ai vérifié pour gethostbyname et que je lui donne l'ip ou le nom d'hote ca donne la même chose...

    Autre chose, voici la déclaration de la fonction :
    struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);

    Ainsi, ton code ne passe pas à la compil et j'ai donc essayé ceci, mais ca ne passe pas à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            char * IP = "127.0.0.1";
     
            struct hostent * Host = gethostbyaddr(IP,strlen(IP),AF_INET);
            printf("Nom de 127.0.0.1 : %s\n",Host->h_name);
    Quelle est la syntaxe exact ?
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    La syntaxe que j'ai indiqué est la syntaxe exacte. Je l'utilise dans de nombreuses applications aussi bien sous windows que sous Linux et ca a toujours marché. Je ne sais pas du tout pourquoi ca ne marche pas chez toi.

    POurtant de nombreux sites disent qu'on peut lui donner l'adresse IP ou le nom d'hôte...
    Je vais essayer
    Ca ne t'es jamais venu à l'idée que : gethostbyaddr = par l'adresse et gethostbyname = par le nom ?
    Je ne sais pas de quels sites tu parles mais je n'ai jamais vu une telle chose et c'est résolument faux.


    Veux-tu bien indiquer le code d'erreur à la compilation de mon code ?

    J'utilise sous Linux : gcc et sous Windows : VC++ 6.0

    Yabo.

  12. #12
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Ca ne t'es jamais venu à l'idée que : gethostbyaddr = par l'adresse et gethostbyname = par le nom ?
    Je ne sais pas de quels sites tu parles mais je n'ai jamais vu une telle chose et c'est résolument faux.
    Bien sûr que ca m'es venu à l'idée mais j'ai vu ca dans plusieurs sites dont je vais rechercher les adresse d'ailleurs.
    En attendant, j'ai changé de compilo et j'ai pris le même que toi : visual C++, j'ai aussi changé ma version de winsock et j'ai transtyper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char * IP = "127.0.0.1"; 
    unsigned int adr = inet_addr(IP); 
     
    struct hostent * Host = gethostbyaddr((char *)&adr,sizeof(adr),AF_INET); 
    printf("Nom de 127.0.0.1 : %s\n",Host->h_name);
    L'erreur venait surement du compilo qui ne me prévenait pas du transtypage...en tout cas, je te remercie beaucoup et je te tiens au courant pour gethostbyaddr
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    Content d'avoir pu t'aider

  14. #14
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Je galère vraiment là. J'ai testé ton code tout seul et ca marchait parfaitement mais quand je veux l'intégrer dans mon code, ca bug. En fait, mon but est de faire un forgeur de paquet tcp et voici le début de mon code :

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
     
    #include <stdio.h>
    #include <stdarg.h>
    #include <winsock2.h>
    #include <string.h>
    #include <errno.h>
     
    extern int errno;
     
    struct pseudohdr
    {
       u_long saddr;
       u_long daddr;
       u_char zero;
       u_long protocol;
       u_long length;
    };
     
    struct tcphdr
    {
        unsigned short sport;      /* port source */
        unsigned short dport;      /* port de destination */
        unsigned int   seqnum;     /* numéro de séquence */
        unsigned int   acknum;     /* accusé de réception */
        unsigned char  dataoffset:4; /* décalage des données (data offset) */
        /* flags */
        unsigned char reserved:6;
        unsigned char  urg:1;
        unsigned char  ack:1;
        unsigned char  psh:1;
        unsigned char  rst:1;
        unsigned char  syn:1;
        unsigned char  fin:1;
        unsigned short windows;    /* fenêtre */
        unsigned short checksum;   /* checksum */
        unsigned short urgpointer; /* pointeur de données urgentes */
    };
     
    struct iphdr
    {
        unsigned char  version:4;  /* version du protocol IP*/
        unsigned char  ihl:4;      /* longeur de l'en tète */
        unsigned char  tos;	       /* type de service */
        unsigned short tot_len;    /* longueur totale du datagramme */
        unsigned short id;	       /* identification */
        unsigned char  M:1;        /* flag M*/
        unsigned char  df:1;       /* flag df*/
        unsigned char  mf:1;       /* flag mf*/
        unsigned short frag_off:13;   /* décalage de fragmentation */
        unsigned char  ttl;	       /* durée de vie du paquet */
        unsigned char  protocol;   /* protocole */
        unsigned short checksum;   /* somme de contrôle */
        unsigned long saddr;      /* adresse IP source */
        unsigned long daddr;      /* adresse IP destinataire */
    };
     
    struct paquettcp
    {
       struct iphdr ippart;
       struct tcphdr tcppart;
       struct pseudohdr pseudopart;
       char data[4096];
    };
     
    unsigned short checksum(u_short *addr, int len);
     
    main()
    {
       int taillepaquet=0;
       char ipsource[200];
       char ipdestination[200];
       unsigned int ipid=0,frago=0,ttl=0,mf=0,df=0;
       unsigned int portsrc=0,portdest=0,flagack,flagurg,flagfin,flagsyn,flagrst,
                    flagpsh,seqnum=0,acknum=0,decdata=0,win=0,urgptr=0;
       char data[4096];
       struct hostent *hotesrc,*hotedest;
       struct paquettcp *lepaquet;
       struct sockaddr_in sock;
       int lasocket,i,nbPacket;
       struct in_addr lasource;
     
       WORD wVersionRequested;
       WSADATA WSAData; 			       /* structure WSADATA définie dans winsock.h */
       int err;
     
       wVersionRequested = MAKEWORD(2,0); 	       /* 1.1 version voulu de Winsock */
       err = WSAStartup(wVersionRequested, &WSAData); /* appel de notre fonction */
      					               /* controle d'erreur */
       if(err == 0)	fprintf(stdout, "[*] Winsock a ete initialise avec succes.\n");
       else {
    		fprintf(stderr, "Erreur lors de l'initialisation de Winsock, code d'erreur : %d\n", GetLastError());
    		return(-1);
       }
     
       printf("TCP MAKER\n");
       lepaquet=(struct paquettcp *)calloc(1,sizeof(struct paquettcp));
       printf("1. Configuration IP\n");
       printf("IP source : ");
       scanf("%199s", ipsource);
       printf("IP destination : ");
       fflush(stdin);
       scanf("%199s", ipdestination);
     
       /*
       printf("IP id : ");
       scanf("%d", &ipid); // identifiant IP du paquet
       printf("IP FragOff : ");
       scanf("%d", &frago);
       printf("IP ttl : ");
       scanf("%d", &ttl);
       */
     
       /*printf("IP Frag DF : ");
       scanf("%d", &df);
       printf("IP Frag MF : ");
       scanf("%d", &mf);*/
     
       sock.sin_addr.s_addr=inet_addr(ipdestination);
       unsigned int adr = inet_addr(ipdestination);
     
       lasource.s_addr=inet_addr(ipsource);
       if((lasource.s_addr=inet_addr(ipsource))==-1)
       {
          printf("Adresse IP non valide");
          return 0;
       }
     
       printf("Verification des donnees IP entrees\n");
       hotesrc=gethostbyaddr((char *)&lasource,sizeof(lasource),AF_INET); /*résoud ip source*/
       hotedest=gethostbyaddr((char *)&sock.sin_addr.s_addr,sizeof(sock.sin_addr.s_addr),AF_INET); /*résoud ip destination*/
     
       //hotesrc=gethostbyname(ipsource);
       //hotedest=gethostbyname(ipdestination);
       printf("%s\n", hotesrc->h_name);
       printf("%s\n", hotedest->h_name);
       printf("%s\n", hotesrc->h_addr);
       printf("%s\n", hotedest->h_addr);
       printf("%d\n", hotesrc->h_length);
       printf("%d\n", hotedest->h_length);
     
       system("PAUSE");
    Comme tu peux le voir Yabo, j'ai suivi ta méthode mais à l'exécution, voici ce que ca donne :
    [*] Winsock a ete initialise avec succes.
    TCP MAKER
    1. Configuration IP
    IP source : 62.45.125.32
    IP destination : 82.67.45.122
    Verification des donnees IP entrees
    vaise-1-82-67-45-122.fbx.proxad.net
    vaise-1-82-67-45-122.fbx.proxad.net
    RC-zvaise-1-82-67-45-122.fbx.proxad.net
    RC-zvaise-1-82-67-45-122.fbx.proxad.net
    4
    4
    Appuyez sur une touche pour continuer...
    Il y a plusieurs problèmes, d'abord, le fait que'il prenne le même nom d'hote h_name et ensuite le h_addr semble incorrect...
    Ca fait un moment que j'ai des problèmes avec ca et là ca commenceà me taper sur les nerfs ...aidez moi svp
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    Ben oui réfléchis un peu

    regarde mon code et regarde le tiens ... Ca n'a absolument rien avoir !

    Il te faut une variable unsigned int MaVal qui soit = inet_addr("127.0.0.1"); (ou un char* contenant l'ip sous cette forme).

    Toi tu as un struct in_addr lasource.

    Donc ton code deviendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /* ... */
    unsigned int lasource;
    /*...*/
    lasource = inet_addr(ipsource);
    /* ... */
    struct hostent * hotesrc = gethostbyaddr(&lasource,sizeof(lasource),AF_INET);
     
    printf("Nom : %s\n",hotesrc->h_name);

  16. #16
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    J'ai changé mon code mais ca ne change rine ce qui est logique puisque je lui passe toujours le même type d'argument avec les mêmes valeurs :
    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
     
       wVersionRequested = MAKEWORD(2,0); 	       /* 1.1 version voulu de Winsock */
       err = WSAStartup(wVersionRequested, &WSAData); /* appel de notre fonction */
      					               /* controle d'erreur */
       if(err == 0)	fprintf(stdout, "[*] Winsock a ete initialise avec succes.\n");
       else {
    		fprintf(stderr, "Erreur lors de l'initialisation de Winsock, code d'erreur : %d\n", GetLastError());
    		return(-1);
       }
     
       printf("TCP MAKER\n");
       lepaquet=(struct paquettcp *)calloc(1,sizeof(struct paquettcp));
       printf("1. Configuration IP\n");
       printf("IP source : ");
       scanf("%199s", ipsource);
       printf("IP destination : ");
       fflush(stdin);
       scanf("%199s", ipdestination);
     
       /*
       printf("IP id : ");
       scanf("%d", &ipid); // identifiant IP du paquet
       printf("IP FragOff : ");
       scanf("%d", &frago);
       printf("IP ttl : ");
       scanf("%d", &ttl);
       */
     
       /*printf("IP Frag DF : ");
       scanf("%d", &df);
       printf("IP Frag MF : ");
       scanf("%d", &mf);*/
     
       //sock.sin_addr.s_addr=inet_addr(ipdestination);
       unsigned int adr = inet_addr(ipdestination);
     
       if((lasource=inet_addr(ipsource))==-1||adr==-1)
       {
          printf("Adresse IP non valide");
          return 0;
       }
     
       printf("Verification des donnees IP entrees\n");
       hotesrc=gethostbyaddr((char *)&lasource,sizeof(lasource),AF_INET); /*résoud ip source*/
       hotedest=gethostbyaddr((char *)&adr,sizeof(adr),AF_INET); /*résoud ip destination*/
     
       //hotesrc=gethostbyname(ipsource);
       //hotedest=gethostbyname(ipdestination);
       printf("%s\n", hotesrc->h_name);
       printf("%s\n", hotedest->h_name);
       printf("%s\n", hotesrc->h_addr);
       printf("%s\n", hotedest->h_addr);
       printf("%d\n", hotesrc->h_length);
       printf("%d\n", hotedest->h_length);
     
       system("PAUSE");
    Le problème doit encore venir d'autre part. Est ce que j'ai fait une autre erreur ? pkoi me donne t-il les mêmes résultats pour les 2 adresses :
    [*] Winsock a ete initialise avec succes.
    TCP MAKER
    1. Configuration IP
    IP source : 82.64.125.45
    IP destination : 82.64.124.65
    Verification des donnees IP entrees
    lns-th2-8-82-64-124-65.adsl.proxad.net
    lns-th2-8-82-64-124-65.adsl.proxad.net
    R@|Alns-th2-8-82-64-124-65.adsl.proxad.net
    R@|Alns-th2-8-82-64-124-65.adsl.proxad.net
    4
    4
    Appuyez sur une touche pour continuer...
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    Bon je vais t'écrire un code mais sans le tester pour que tu comprennes :

    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
     
    unsigned int IpSource_Bin;
    unsigned int IpDest_Bin;
     
    char * IpSource_Char = (char *)calloc(32,sizeof(char));
    char * IpDest_Char = (char *)calloc(32,sizeof(char));
     
    printf("Entrez l'ip source : \n");
    read(0,IpSource_Char,32);
    printf("\nEntrez l'ip dest : \n");
    read(0,IpDest_Char,32);
     
    IpSource_Bin = inet_addr(IpSource_Char);
    IpDest_Bin = inet_addr(IpDest_Char);
     
    if(IpSource_Bin == -1 || IpDest_Bin == -1)
    {
           printf("Erreur\n");
           exit(-1);
    }
     
    struct hostent * Source_Info = gethostbyaddr(&IpSource_Bin,sizeof(IpSource_Bin),AF_INET);
    struct hostent * Dest_Info = gethostbyaddr(&IpDest_Bin,sizeof(IpDest_Bin),AF_INET);
     
    if(Source_Info == NULL || Dest_Info == NULL)
    {
         printf("Erreur\n");
         exit(-1);
    }
     
    printf("Nom source : %s\n",Source_Info->h_name);
    printf("Nom dest : %s\n",Dest_Info->h_name);
    J'ai pas testé le code mais je l'ai relu et il ne devrait pas y avoir de prob.

    Voilà

  18. #18
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    C'est le même problème avec ton code et je ne comprends pas non plus pourquoi
    J'ai juste changer 2 lignes avec char * :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct hostent * Source_Info = gethostbyaddr((char *)&IpSource_Bin,sizeof(IpSource_Bin),AF_INET);
    Mais il donne 2 fois la même chose ... :
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    [*] Winsock a ete initialise avec succes.
    TCP MAKER
    1. Configuration IP
    IP source : 82.64.125.45
    IP destination : 82.64.124.65
    Verification des donnees IP entrees
    lns-th2-8-82-64-124-65.adsl.proxad.net
    lns-th2-8-82-64-124-65.adsl.proxad.net
    R@|Alns-th2-8-82-64-124-65.adsl.proxad.net
    R@|Alns-th2-8-82-64-124-65.adsl.proxad.net
    4
    4
    Appuyez sur une touche pour continuer...
    Ca serait pas parce'que tu lui a mit la même ip source et la même ip destination ?

  20. #20
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    [*] Winsock a ete initialise avec succes.
    TCP MAKER
    1. Configuration IP
    IP source : 82.64.123.56
    IP destination : 82.65.153.33
    Verification des donnees IP entrees
    lns-p19-16-82-65-153-33.adsl.proxad.net
    lns-p19-16-82-65-153-33.adsl.proxad.net
    RAÖ!lns-p19-16-82-65-153-33.adsl.proxad.net
    RAÖ!lns-p19-16-82-65-153-33.adsl.proxad.net
    4
    4
    Appuyez sur une touche pour continuer...
    Non pas du tout...regarde avec des adresses différentes...essai de le compiler et tu verras
    D'ailleurs, le "RAÖ!", je sais pas non plus d'ou il vient ?
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [SOCKET] Problème avec select()
    Par PaloPalo dans le forum Linux
    Réponses: 4
    Dernier message: 01/12/2011, 15h34
  2. [FLASH MX2004] [XMLSocket] Problème avec serveur socket php
    Par cocodunombril dans le forum Flash
    Réponses: 4
    Dernier message: 03/04/2009, 02h10
  3. problème avec des sockets
    Par ddii dans le forum Réseau
    Réponses: 10
    Dernier message: 15/11/2005, 15h53
  4. [Win32] Problème avec les sockets
    Par mickael777 dans le forum MFC
    Réponses: 3
    Dernier message: 12/08/2005, 11h15
  5. [socket] Problème avec les options
    Par gangsoleil dans le forum Développement
    Réponses: 3
    Dernier message: 13/07/2005, 13h11

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