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
|
#include<stdlib.h>
#include<stdio.h>
#include<sys/socket.h>
#include<netdb.h>
#include<sys/types.h>
#include<string.h>
#include<arpa/inet.h>
#include <errno.h>
int main (int argc, char ** argv){
if (argc != 2){
printf("Syntaxe : %s nom\n",argv[0]);
return 1;
}
struct addrinfo hints;
struct addrinfo *result, *rp;
int s;
char addrstr[64];
char ip[64];
char canonname[256];
memset(&canonname, 0, 256*sizeof(char));
memset(&ip, 0, 64*sizeof(char));
memset(&addrstr,0,64*sizeof(char) );
hints.ai_family=AF_UNSPEC;
hints.ai_socktype=0;
hints.ai_flags = AI_CANONNAME;
struct addrinfo * p ;
s= getaddrinfo(argv[1],NULL,&hints,&result);
if (s !=0) {
printf("error in getaddrinfo : %s\n", gai_strerror(s));
return 1;
}
strcpy(canonname, result->ai_canonname);
printf("%s\n",canonname);
int error;
char hostname[NI_MAXHOST] = "";
char oldhostname[NI_MAXHOST]="uesh";
for (p = result; p != NULL; p = p->ai_next){
error = getnameinfo(p->ai_addr, p->ai_addrlen, hostname, NI_MAXHOST, NULL, 0, 0);
if (error != 0)
{
printf("error in getnameinfo: %s\n", gai_strerror(error));
return 1;
}
if (strcmp(hostname,"")!=0 && strcmp(hostname,oldhostname)!=0){
printf("hostname : %s\n", hostname);
strcpy(oldhostname,hostname);
}
void * ptr;
switch(p->ai_family){
case AF_INET:
ptr = &((struct sockaddr_in * ) p->ai_addr)->sin_addr;
break;
case AF_INET6:
ptr = &((struct sockaddr_in6 * ) p->ai_addr)->sin6_addr;
break;
}
inet_ntop (p->ai_addr->sa_family,ptr, addrstr, 64 );
char type[100];
switch (p->ai_socktype){
case (SOCK_STREAM):
strcpy(type,"STREAM");
break;
case (SOCK_DGRAM):
strcpy(type,"DGRAM");
break;
}
printf("IP : %s type : %s\n",addrstr,type);
}
return 0;
}
|