| 12
 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
 
 |  
#include "cGetHostnameIP.hpp"
// csr =  typedef const std::string csr;
csr cNet::GetIpFromHostname(csr & Hostname){
        char *hostname = "www.google.com", *service = NULL;
        struct addrinfo indices, *res;
        int error;
        memset(&indices, 0, sizeof(indices));
        indices.ai_flags = AI_CANONNAME;
        indices.ai_family = AF_UNSPEC;      // Adresse IPv4 ou IPv6.
        indices.ai_socktype = SOCK_STREAM;  // Socket connectee.
        if ((error = getaddrinfo(hostname, service, &indices, &res))) {
                if (error == EAI_SYSTEM) perror("  [getaddrinfo]");
                fprintf(stderr, "  [getaddrinfo] %s : %s\n", hostname,
                        gai_strerror(error));
                return "Erreur";
        }
 
 
        return res;
//        freeaddrinfo(res);
 
 
 
}
csr cNet::GetIp(struct addrinfo * ai){
     //int i = 0;
        char *ptr = NULL;
        int port = 0;                // Numero de port.
        char addr[INET6_ADDRSTRLEN]; // Adresse reseau.
 
        while (ai != NULL) {  // Parcours de la liste chainée.
              //  printf("  [%d] ",i++);
              //  print_family(ai->ai_family);     printf("(%d) ", ai->ai_addrlen);
              //  print_socktype(ai->ai_socktype); printf(" ");
               // print_protocol(ai->ai_protocol); printf("\n");
                // Récupération du numéro de port et de l'adresse IP.
                switch (ai->ai_family) {
                case AF_INET:  {
                        struct sockaddr_in *sin =
                                (struct sockaddr_in *) ai->ai_addr;
                        ptr = (char *) inet_ntop(AF_INET, &sin->sin_addr,
                                                 addr, sizeof(addr));
                        port = sin->sin_port;
                        break;     }
                case AF_INET6: {
                        struct sockaddr_in6 *sin6 =
                                (struct sockaddr_in6 *) ai->ai_addr;
                        ptr = (char *) inet_ntop(AF_INET6, &sin6->sin6_addr,
                                                 addr, sizeof(addr));
                        port = sin6->sin6_port;
                        break;     }
                }
				std::cout << "IP : " << addr << "Port" << port << std::endl;
				return addr;
              //  if (ptr != NULL) printf("\t@IP -> %s\t port : %d\n",addr,port);
               /* if (ai->ai_canonname != NULL)
                        printf("\tNom -> %s\n", ai->ai_canonname);*/
              //  ai = ai->ai_next; // On passe à l'élément suivant.
        }
		return "Erreur inconnue ";
}
csr cNet::flags(int fl){
	switch (fl) {
	case AI_PASSIVE:     	return "Passive"		; break;
	case AI_CANONNAME:   	return "Name"			; break;
	case AI_NUMERICHOST: 	return "Numeric host"	; break;
	default: return"%d Inconnu " +fl				;
	}
}
csr cNet::family(int fam){
	switch (fam) {
	case AF_INET:  			return "Inet"			; break;
	case AF_INET6: 			return "Inet6"			; break;
	case AF_LOCAL: 			return "Local"			; break;
	default: return "Inconnu : " + fam 				;
	}
}
csr cNet::socktype(int sock){
	switch (sock) {
	case SOCK_STREAM: 		return "Sock stream"	; break;
	case SOCK_DGRAM:  		return "Sock dgram"		; break;
	default: return "Inconnu " + sock				;
	}
}
csr cNet::protocol(int proto){
	switch (proto) {
	case IPPROTO_IP:   		return "Protocole ip"	; break;
	case IPPROTO_TCP:  		return "Protocole tcp"	; break;
	case IPPROTO_UDP:  		return "Protocole udp"	; break;
	case IPPROTO_RAW:  		return "Protocole raw"	; break;
	case IPPROTO_ICMP: 		return "Protocole icmp"	; break;
	default: return "Inconnu " + proto				;
	}
} | 
Partager