需要帮助了解C程序,找到机器IP地址

问题描述:

我没有得到有关查找机器IP地址的任务。我需要帮助理解这段代码的逻辑。我们的大学实验室使用代理服务此代码是否可以在没有代理的计算机上工作?需要帮助了解C程序,找到机器IP地址

 #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); 
     } 
+1

你读过正在使用的函数的manpages吗?那之后你不了解什么部分? – Thomas 2010-07-25 17:46:42

这里关注的两个关键方法是:

  1. gethostbyname() - gethostbyname函数获取主机信息
  2. inet_ntoa - 转换IP地址添加到IN_ADDR

尽量具体,您在哪里了解代码的问题。

该代码适用于我。

$./a.out nslookup 

返回主机IP。

+2

+1连接Beej。 – 2010-07-25 17:48:10

+0

未得到指针变量*主机和条件在if()中进行测试 – 2010-07-25 18:13:55

实际上,gethostbyname函数执行返回hostent结构域的DNS请求。 例如,你可以用wireshark来嗅探网络,看看流量是什么样子。

netdb.h - 定义为网络数据库操作 arpa/inet.h - 定义互联网业务 netinet/in.h - 互联网地址族 的gethostname()函数返回当前机器的标准主机名。 inet_ntoa(h_addr)将IP地址从32位网络格式转换回点分十进制。

这些是基本的理解术语。细节最重要的是使用google