Gethostname.pdf

  • Uploaded by: Halder Subhas
  • 0
  • 0
  • October 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Gethostname.pdf as PDF for free.

More details

  • Words: 555
  • Pages: 5
Get ip address from hostname in C using Linux sockets

https://www.binarytides.com/hostname-to-ip-address-c-sockets-linux/

Get ip address from hostname in C using Linux sockets Google+

Socket applications often need to convert hostnames like google.com to their corresponding ip address. This is done through dns requests. The socket api in linux provides functions like gethostbyname and getaddrinfo that can be used to perform the dns requests and get the ip address.

gethostbyname The first method uses the traditional gethostbyname function to retrieve information about a hostname/domain name. Code #include<stdio.h> //printf #include<string.h> //memset #include<stdlib.h> //for exit(0); #include<sys/socket.h> #include<errno.h> //For errno - the error number #include //hostent #include<arpa/inet.h> int hostname_to_ip(char *

, char *);

int main(int argc , char *argv[]) { if(argc <2) { printf("Please provide a hostname to resolve"); exit(1); }

1 of 5

05/03/19, 1:02 am

Get ip address from hostname in C using Linux sockets

https://www.binarytides.com/hostname-to-ip-address-c-sockets-linux/

char *hostname = argv[1]; char ip[100]; hostname_to_ip(hostname , ip); printf("%s resolved to %s" , hostname , ip); printf("\n"); } /* Get ip from domain name */ int hostname_to_ip(char * hostname , char* ip) { struct hostent *he; struct in_addr **addr_list; int i; if ( (he = gethostbyname( hostname ) ) == NULL) { // get the host info herror("gethostbyname"); return 1; } addr_list = (struct in_addr **) he->h_addr_list; for(i = 0; addr_list[i] != NULL; i++) { //Return the first one; strcpy(ip , inet_ntoa(*addr_list[i]) ); return 0; } return 1; }

2 of 5

05/03/19, 1:02 am

Get ip address from hostname in C using Linux sockets

https://www.binarytides.com/hostname-to-ip-address-c-sockets-linux/

Compile and Run $ gcc hostname_to_ip.c && ./a.out www.google.com www.google.com resolved to 74.125.235.16 $ gcc hostname_to_ip.c && ./a.out www.msn.com www.msn.com resolved to 207.46.140.34 $ gcc hostname_to_ip.c && ./a.out www.yahoo.com www.yahoo.com resolved to 98.137.149.56

getaddrinfo The second method uses the getaddrinfo function to retrieve information about a hostname/domain name. The getaddrinfo supports ipv6 better. Code #include<stdio.h> //printf #include<string.h> //memset #include<stdlib.h> //for exit(0); #include<sys/socket.h> #include<errno.h> //For errno - the error number #include //hostent #include<arpa/inet.h> int hostname_to_ip(char *

, char *);

int main(int argc , char *argv[]) { if(argc <2) { printf("Please provide a hostname to resolve"); exit(1); } char *hostname = argv[1];

3 of 5

05/03/19, 1:02 am

Get ip address from hostname in C using Linux sockets

https://www.binarytides.com/hostname-to-ip-address-c-sockets-linux/

char ip[100]; hostname_to_ip(hostname , ip); printf("%s resolved to %s" , hostname , ip); printf("\n"); } /* Get ip from domain name */ int hostname_to_ip(char *hostname , char *ip) { int sockfd; struct addrinfo hints, *servinfo, *p; struct sockaddr_in *h; int rv; memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; // use AF_INET6 to force IPv6 hints.ai_socktype = SOCK_STREAM; if ( (rv = getaddrinfo( hostname , "http" , &hints , &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return 1; } // loop through all for(p = servinfo; p { h = (struct strcpy(ip , }

the results and connect to the first we can != NULL; p = p->ai_next) sockaddr_in *) p->ai_addr; inet_ntoa( h->sin_addr ) );

freeaddrinfo(servinfo); // all done with this structure return 0;

4 of 5

05/03/19, 1:02 am

Get ip address from hostname in C using Linux sockets

https://www.binarytides.com/hostname-to-ip-address-c-sockets-linux/

}

Compile and Run $ gcc hostname_to_ip.c && ./a.out www.google.com www.google.com resolved to 74.125.235.19 $ gcc hostname_to_ip.c && ./a.out www.yahoo.com www.yahoo.com resolved to 72.30.2.43 $ gcc hostname_to_ip.c && ./a.out www.msn.com www.msn.com resolved to 207.46.140.34

Last Updated On : 19th November 2012

5 of 5

05/03/19, 1:02 am

More Documents from "Halder Subhas"

Gethostname.pdf
October 2019 10
Myaddminerrorrecover.pdf
October 2019 19
Animal Flow.docx
May 2020 11
575
August 2019 19