summaryrefslogtreecommitdiff
path: root/sem_6/HLIN611/tp1.c
blob: 7ff5a2b206afecc24a85fc19a794276774404af7 (plain)
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;
}