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
|
#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