Reputation: 569
I am not getting this assignment about finding the IP address of the machine. I need help understanding the logic of this code. Our college lab uses proxy server; will this code work on a computer without proxy?
#include <stdio.h> /* stderr, stdout */
#include <netdb.h> /* hostent struct, gethostbyname() */
#include <arpa/inet.h> /* inet_ntoa() to format IP address */
#include <netinet/in.h> /* in_addr structure */
int main(int argc, char **argv) {
struct hostent *host; /* host information */
struct in_addr h_addr; /* internet address */
if (argc != 2) {
fprintf(stderr, "USAGE: nslookup <inet_address>\n");
exit(1);
}
if ((host = gethostbyname(argv[1])) == NULL) {
fprintf(stderr, "(mini) nslookup failed on '%s'\n", argv[1]);
exit(1);
}
h_addr.s_addr = *((unsigned long *) host->h_addr_list[0]);
fprintf(stdout, "%s\n", inet_ntoa(h_addr));
exit(0);
}
Upvotes: 0
Views: 1114
Reputation: 6913
netdb.h
- definitions for network database operations
arpa/inet.h
- definitions for internet operations
netinet/in.h
- Internet address family
The gethostname()
function returns the standard host name for the current machine.
inet_ntoa(h_addr)
To convert an IP address from 32-bit network format back to dotted decimal.
These are the basic understanding terms. Most importantly use google
for detail.
Upvotes: 1
Reputation: 11220
Actually, the gethostbyname function performs a DNS request which returns the hostent structure filed. It could be interesting for you to snif the network with wireshark for instance to look what the traffic looks like.
Upvotes: 0
Reputation: 38899
The 2 key methods of interest here are:
Try to be specific, where are you having problem understanding the code.
The code works with me.
$./a.out nslookup
returns host ip.
Upvotes: 2