0

我没有得到关于查找机器 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);
      }
4

3 回答 3

2

这里感兴趣的 2 个关键方法是:

  1. gethostbyname() - gethostbyname 函数检索主机信息
  2. inet_ntoa - 将 ip add 转换为 in_addr

试着具体一点,你在哪里理解代码有问题。

该代码适用于我。

$./a.out nslookup

返回主机 ip。

于 2010-07-25T17:45:47.337 回答
1

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

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

于 2010-07-26T06:51:22.913 回答
0

实际上,gethostbyname 函数执行一个 DNS 请求,该请求返回 hostent 结构域。例如,使用wireshark 嗅探网络以查看流量​​是什么样子可能会很有趣。

于 2010-07-25T18:06:02.413 回答